最近由於公司做的一個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的) 這裡下載 DSS for Windows
2.下載後解壓,會看到一個 Install.bat 的檔案,直接運行它就會安裝到 C:\Program Files\Darwin Streaming Server\ 並還會在 系統服務裡面加一個號 Darwin Streaming Server 的服務程式,這個就是 DSS 的 RTSP 伺服器。
3.接下來你要安裝 Perl 解譯器,可以從 http://www.perl.org/get.html 這裡下載到,然後安裝
4.裝好 Perl 後就可以在 CMD 下面使用 perl **.pl 來運行程式了
5.接下來在CMD下面做如下操作:
o# 根據提示建立 WebAdmin 的帳號和密碼
oC:\Program Files\Darwin Streaming Server>perl WinPasswdAssistant.pl
o# 運行 WebAdmin 管理器
oC:\Program Files\Darwin Streaming Server>perl streamingadminserver.pl
o# 現在可以開啟 http://127.0.0.1:1220/ 來對 DSS 伺服器進行管理了
6.在 DSS WebAdmin 裡面修改 General Settings -> Media Directory ,將它改為你的 Media 目錄,當然也可以使用預設的,把自已的視頻檔案放到 C:\Program Files\Darwin Streaming Server\Movies 裡面
7.現在你可以使用 QuickTime 或 VLC 開啟 rtsp://127.0.0.1:80/sample_100kbit.mp4 來測試視頻了,(注 sample_100kbit.mp4 是 DSS 5.5.5 內建的視頻)
B。將自己的視頻轉換為流媒體格式
一開始,我安裝了流媒體之後,弄了很久,發現播放DDS內建的測試視頻可以播放正常,但是發現只要是自己用手機拍攝的視頻放到流媒體伺服器上,即使是同樣的尾碼格式(如同是.3gp,.mp4)都播放不了,這可急了我了,網上查了很多,都沒找到相關的解釋,後來想想是不是視頻的編碼不相同,後來使用了視頻編碼查看器來對比了下,發現也沒什麼不同,最後找到了上面第三個參考網址裡有解釋是因為流媒體伺服器只識別包含RTSP資訊頭的視頻,需要在視頻的頭部加入了RTSP資訊之後才可以被DSS識別,所以要使用工具把自己的視頻轉化為帶
RTSP資訊頭的視頻格式;下面使用mp4box.exe來轉化
下載到到解壓出後會有個叫 mp4box.exe ,用它在命令列下面運行
C:\Program Files\Darwin Streaming Server\Movies>mp4box mymovie.mp4 -hint
出現結果:
Hinting file with Path-MTU 1450 Bytes
Hinting track ID 201 - Type "mp4v:mp4v" (MP4V-ES) - BW 33 kbps
Hinting track ID 101 - Type "mp4a:mp4a" (mpeg4-generic) - BW 64 kbps
Saving mymovie.mp4: 0.500 secs Interleaving
然後,再用KMPlayer.exe 開啟 rtsp://127.0.0.1:80/test.mp4 播放!用智能手機,可以直接用手機開啟這個地址試一下。
在java代碼中可以直接使用代碼調用mp4box.exe來轉化,需要把 mp4box.ex相關工具檔案直接放到流媒體伺服器中的視頻目錄下,相關轉化代碼如下:
/**
* 轉化為RTSP格式的視頻
*
* @param fileName
*/
public void changeToRtsp(String fileName) {
Runtime rn = Runtime.getRuntime();
Process p = null;
try {
p = rn.exec("D:\\tomcat\\webapps\\vmadmin\\vedios\\MP4box.exe D:\\tomcat\\webapps\\vmadmin\\vedios\\" + fileName + " -hint");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String str;
while ((str = bufferedReader.readLine()) != null)
System.out.println(str);
int result = p.waitFor();
System.out.println("thread run result ------------------ : "
+ result);
} catch (Exception e) {
System.out.println("Error exec notepad ");
}
finally{
p.destroy();
}
}
其中fileName即為流媒體伺服器視頻目錄中的檔案名稱,轉化後就可以使用手機終端調用系統視頻播放器輸入:rtsp://127.0.0.1:80/****.mp4類似地址來播放了。