代工匠码 2011-11-07
最近由于公司做的一个Android项目,需要上传视频到服务器,实现上下传以及播放,涉及到视频的手机终端播放流媒体视频,所以本人搭配了一个达尔文流媒体服务器,本文还参考了:
百度文库:http://wenku.baidu.com/view/eca0cd5c3b3567ec102d8aef.html,以及网址http://www.devdiv.com/home.php?mod=space&uid=74824&do=blog&id=3491,
http://www.cnblogs.com/zhangweia/archive/2010/08/27/1810030.html
A。首先安装DDS,即达尔文流媒体服务器:
1.从:http://dss.macosforge.org/downloads/DarwinStreamingSrvr5.5.5-Windows.exe(只有5.5的)这里下载DSSforWindows
2.下载后解压,会看到一个Install.bat的文件,直接运行它就会安装到C:\ProgramFiles\DarwinStreamingServer\并还会在系统服务里面加一个号DarwinStreamingServer的服务程序,这个就是DSS的RTSP服务器。
3.接下来你要安装Perl解释器,可以从http://www.perl.org/get.html这里下载到,然后安装
4.装好Perl后就可以在CMD下面使用perl**.pl来运行程序了
5.接下来在CMD下面做如下操作:
o#根据提示创建WebAdmin的账号和密码
oC:\ProgramFiles\DarwinStreamingServer>perlWinPasswdAssistant.pl
o#运行WebAdmin管理器
oC:\ProgramFiles\DarwinStreamingServer>perlstreamingadminserver.pl
o#现在可以打开http://127.0.0.1:1220/来对DSS服务器进行管理了
6.在DSSWebAdmin里面修改GeneralSettings->MediaDirectory,将它改为你的Media目录,当然也可以使用默认的,把自已的视频文件放到C:\ProgramFiles\DarwinStreamingServer\Movies里面
7.现在你可以使用QuickTime或VLC打开rtsp://127.0.0.1:80/sample_100kbit.mp4来测试视频了,(注sample_100kbit.mp4是DSS5.5.5自带的视频)
B。将自己的视频转换为流媒体格式
一开始,我安装了流媒体之后,弄了很久,发现播放DDS自带的测试视频可以播放正常,但是发现只要是自己用手机拍摄的视频放到流媒体服务器上,即使是同样的后缀格式(如同是.3gp,.mp4)都播放不了,这可急了我了,网上查了很多,都没找到相关的解释,后来想想是不是视频的编码不相同,后来使用了视频编码查看器来对比了下,发现也没什么不同,最后找到了上面第三个参考网址里有解释是因为流媒体服务器只识别包含RTSP信息头的视频,需要在视频的头部加入了RTSP信息之后才可以被DSS识别,所以要使用工具把自己的视频转化为带
RTSP信息头的视频格式;下面使用mp4box.exe来转化
下载到到解压出后会有个叫mp4box.exe,用它在命令行下面运行
C:\ProgramFiles\DarwinStreamingServer\Movies>mp4boxmymovie.mp4-hint
出现结果:
HintingfilewithPath-MTU1450Bytes
HintingtrackID201-Type"mp4v:mp4v"(MP4V-ES)-BW33kbps
HintingtrackID101-Type"mp4a:mp4a"(mpeg4-generic)-BW64kbps
Savingmymovie.mp4:0.500secsInterleaving
然后,再用KMPlayer.exe打开rtsp://127.0.0.1:80/test.mp4播放!用智能手机,可以直接用手机打开这个地址试一下。
在java代码中可以直接使用代码调用mp4box.exe来转化,需要把mp4box.ex相关工具文件直接放到流媒体服务器中的视频目录下,相关转化代码如下:
/**
*转化为RTSP格式的视频
*
*@paramfileName
*/
publicvoidchangeToRtsp(StringfileName){
Runtimern=Runtime.getRuntime();
Processp=null;
try{
p=rn.exec("D:\\tomcat\\webapps\\vmadmin\\vedios\\MP4box.exeD:\\tomcat\\webapps\\vmadmin\\vedios\\"+fileName+"-hint");
BufferedReaderbufferedReader=newBufferedReader(
newInputStreamReader(p.getInputStream()));
Stringstr;
while((str=bufferedReader.readLine())!=null)
System.out.println(str);
intresult=p.waitFor();
System.out.println("threadrunresult------------------:"
+result);
}catch(Exceptione){
System.out.println("Errorexecnotepad");
}
finally{
p.destroy();
}
}
其中fileName即为流媒体服务器视频目录中的文件名称,转化后就可以使用手机终端调用系统视频播放器输入:rtsp://127.0.0.1:80/****.mp4类似地址来播放了。