1. 程式人生 > >Darwin Stream server(DSS伺服器)的Relay(中繼/轉發)設定

Darwin Stream server(DSS伺服器)的Relay(中繼/轉發)設定

先說一下需求:

有4臺主機ABCD。A機上跑live555,將攝像頭的實時視訊編碼為H264,用RTSP協議(URL:rtsp://IpAddr-B/CamLive.sdp)將視訊流推送至DSS伺服器B。B將收到的流轉發給DSS伺服器C。客戶端D執行VLC,用地址rtsp://IpAddr-C/CamLive.sdp訪問視訊流。

在上述直播轉發的實驗過程過程中,順帶實現點播轉發。在DSS伺服器B上執行播放自帶的mp4檔案f1.mp4和我自己錄製的mp4檔案f2.mp4,並向DSS伺服器C轉發。客戶端D執行VLC,用地址rtsp://IpAddr-C/File1.sdp和rtsp://IpAddr-C/File2.sdp訪問點播流。

實驗過程中在網上搜集了很多相關配置的資料,出現頻率較高的有(1)《D​a​r​w​i​n​ ​r​e​l​a​y​配​置 / Darwin伺服器安裝以及中繼配置》,(2)《Darwin Streaming Server Relay Setting》,(3 論文)《基於Darwin Streaming Server快速流媒體中繼實現》。它們給了我很多幫助,同時也帶來了很多誤導,本文在此逐一點評。(僅限於技術探討,說的不對的地方還請原作者以及各位指正。)

文獻地址:

(1)http://wenku.baidu.com/link?url=Gm3fYUEO_wrn_toJamKzMvR468uVE0dfIsaHPhkrNVjCHDypyei5uT0KpzzHcnCytqbQdyIpiYaZBGDGQKhBhFRbQvz1vqObE1AivrqB65K

(2)http://blog.chinaunix.net/uid-20751538-id-252614.html

(3)http://www.doc88.com/p-877811973239.html


好,現在開始。

Step1:將B機和C機的DSS服務和webadmin啟動。



Step2:對於直播,在A機上啟動Live555向B機推送視訊流。對於點播,在B機上將視訊檔案加入播放列表。





在這一步中,對於直播,Live555程式已經經過改寫,執行在A機上,將視訊監控的實時流主動向B機推送。B機接收到A機推送的流後會自動在Movies目錄下生成live51_30.sdp。

對於點播,直接在B機上配置播放列表即可,本例中,testf使用了DSS自帶的視訊檔案sample_300kbit.mp4,testf2使用了我自己錄製的視訊檔案aaa_after.mp4。這裡要注意的是,對於自己錄製的mp4檔案,需要經過處理,新增RTSP頭部後才能播放。我用的處理自有視訊檔案的程式是MP4Box,

下載地址。配置玩播放列表後別忘了點選播放按鈕是status從stop程式設計play,點選播放按鈕的時候,會在B機的Movies目錄下生成testf.sdp和testf2.sdp。

至此,B機上的配置全部結束。本例中B機的IP是192.1.101.30,可以用VLC通過rtsp://192.1.101.30/live51_30.sdp,rtsp://192.1.101.30/testf.sdp,rtsp://192.1.101.30/testf2.sdp 這三個URL觀看從B機發送的視訊流。

Step3:在C機上配置轉發/中繼,就是Relay。





本例中,live51對應B機中的直播中繼配置,testf和testf2分別對應B機中的自帶視訊點播和錄製視訊點播。因為流資料從B發出以後就不區分檔案還是直播了,所以三個配置大同小異。

Source Setting中的地址填寫B機的地址,掛載點填寫B機上生成的sdp檔名;我只嘗試了Request incoming stream這種方式,需要填寫B機的使用者名稱和密碼。(這裡有一點待定,我不填使用者名稱和密碼好像也行,所以猜測此處的使用者名稱和密碼可能是針對加密rtsp流的,不一定是B機DSS是管理員使用者名稱和密碼)。

Destination Settings中地址填寫127.0.0.1,因為目的地是C機本機,我選擇了Announced UDP方式,掛載點留空白,這樣DSS會在C機的Movies目錄下生成和B機上同名的sdp檔案,使用者名稱密碼我填了C機的管理員使用者和口令(安裝DSS時配置的那個)。

選擇Announced UDP的好處是DSS會在目的地自動生成sdp檔案,但根據手冊上的描述,該方式不具備穿越防火牆的能力,也就是說適用於區域網。在實驗過程中我也嘗試了Unannounced UDP方式(手冊上說這種方式適合穿越防火牆,應該可以用在Internet上),需要填寫一個目的地的監聽埠號,和最大TTL數(用於控制傳輸距離)。但該方法需要手工將B機上的sdp檔案拷貝到C機,並且需要更改埠,由於對sdp檔案內容不太瞭解,成功的次數少,而失敗的次數多。(我懷疑是不是跟下圖中兩處10位數字有關,那是session號嗎?是不是每次重連都要修改sdp檔案?還有兩處IP地址分別是什麼含義,到底哪一個有用?懇請牛人指導解答)最終作罷。


這裡要點評一下前面提到的3篇文件,第一篇《D​a​r​w​i​n​ ​r​e​l​a​y​配​置 / Darwin伺服器安裝以及中繼配置》還是比較靠譜,他用的就是Unannounced UDP方式;第二篇《Darwin Streaming Server Relay Setting》中講到需要在兩臺DSS伺服器上分別配置Relay,一推一拉,還很認真的給出了兩臺DSS伺服器上的Relay Status(如下圖),其實根據實驗,不管是直播還是點播,都不需要在B機上配置Relay,只要在C機上配就行了。至於第三篇《基於Darwin Streaming Server快速流媒體中繼實現》,應該是誤導了不少人,文件二的作者也沒看明白這篇論文,主要問題集中在論文第3.3節的小標題8上:文中說將第一臺DSS伺服器上的playlist目錄內的資料夾拷貝到第二臺DSS伺服器上,然後啟動第二臺DSS的playlist,但我嘗試後發現無法啟動playlist,我猜測原因可能是因為原始視訊檔案仍然在第一臺DSS上的緣故,如果將視訊檔案也拷貝到第二臺DSS上,那就沒有第一臺什麼事了,也談不上轉發。況且使用這種方式每當第一臺DSS增加一路視訊,都需要做拷貝操作,似乎並不合理。如果我有幸能讓論文原作者看到此博文,請指正。


好了,回到主題,至此就配完了DSS轉發,本例中C機的IP是192.1.101.77。現在可以使用可以用VLC通過rtsp://192.1.101.77/live51_30.sdp,rtsp://192.1.101.77/testf.sdp,rtsp://192.1.101.77/testf2.sdp 這三個URL觀看從C機發送的視訊流了。