搭建流媒體伺服器
需求:現在需要搭建一台流媒體伺服器,為了將主講人的電腦案頭螢幕和聲音直播給遠端的人接收即時觀看,要求延遲在5秒左右。理論上RTSP、RTMP、HTTP都可以做直播和點播,但是一般做直播都是用RTSP和RTMP,做點播用HTTP。做視頻會議的時候原來使用的是SIP協議,現在基本上被RTMP協議取代了。
兩種方案如下:
1)rtsp目前用的比較流行的是live555、vlc、DarwinStreamingSrvr5.5.5等開源軟體。
2)rtmp只能用nginx載入rtmp模組來搭建服務端。
首先值得我們需要思考的幾個問題:
1、直播端的資料流是拉取還是推送?
2、是服務端主動拉取?還是直播端安裝推流軟體基於工具來推流?
3、服務端能接收推流嗎?如何測試推流成功?
4、接收端用什麼接收測試?工具還是瀏覽器?
需要的環境及工具:
1、筆記本一台(這裡作為服務端也是直播端,最好能上公網且是ubuntu系統)
2、Flv視頻檔案一個(測試點播檔案)
3、vlc用戶端一個(接收端使用)或者能上網的電腦一台
4、obs用戶端一個(直播端)
方案一、
先嘗試第一種解決方案rtsp,網上搜尋的方案大多數只有三種:
1、用live555作為服務端(網上一堆方法,部署也很簡單)
結果:只實現了點播的效果,用obs推流報不知道的協議,網上查詢實現直播需要修改源碼,棄之。
2、用vlc作為服務端(網上一堆方法,部署也很簡單)
結果:實施過程相當簡單,但是只能實現mp3音頻檔案的串流,試過案頭串流好像不行。而且高並發的也不確定有沒有效能上的問題。也棄之。
3、用DarwinStreamingSrvr5.5.5作為服務端(網上一堆方法,部署也很簡單)
結果:點播都不行,更別說是直播了,當然這裡我不否定是不是部署有問題,最後果斷棄之。
實驗後的結論:
RTSP果斷放棄吧!雖然說是延遲很低、即時性高,但是部署都失敗了。所以我這裡準備採用RTMP作為服務端。
關於vlc和obs兩個工具的使用感受:
vlc只能作為服務端和接收端,不能作為直播端推送資料流到服務端。
obs只能作為直播端推送資料流到服務端,不能作為服務端和接收端。
綜上所述解答上面提出的幾個問題:
1、直播端的資料流是拉取還是推送?
答:推送
2、是服務端主動拉取?還是直播端安裝推流軟體基於工具來推流?
答:是直播端用obs軟體推流
3、服務端能接收推流嗎?如何測試推流成功?
答:服務端可以接受推流,服務端可以用Apsara Distributed File System直播伺服器,在Apsara Distributed File System直播註冊一個帳號,然後記住流媒體伺服器的url和流密鑰,在obs軟體佈建裡面填上這個參數就可以測試推流成功了。
4、接收端用什麼接收測試?工具還是瀏覽器?
答:接收端用vlc可以接收測試,但是我個人建議還是使用瀏覽器裡面帶的播放器測試,延遲更低,但是必須要能上公網,地址如下:
http://www.ossrs.net/players/srs_player.html,在URL裡面輸入你流媒體伺服器的地址即可!
如下:
方案二、
一、服務端操作:
1、筆記本安裝ubuntu系統(步驟略)
2、安裝obs軟體,注意obs官網linux版本只支援ubuntu安裝,所以現在知道為什麼上面說明需要ubuntu系統了吧!當然windows也可以,因為我這裡還 需要一些php環境運行一些其它的服務。
- sudo add-apt-repository ppa:obsproject/obs-studio
- sudo apt-get update && sudo apt-get install obs-studio
3、安裝nginx和rtmp模組
- wget http://nginx.org/nginx-1.11.8.tar.gz
- unzip nginx-rtmp-module-master.zip(這個模組去網上搜尋下載)
- tar zxvf nginx-1.11.8.tar.gz
- cd nginx-1.11.8
- ./configure --prefix=/usr/local/nginx --add-module=/root/nginx-rtmp-module-master
- make
- make install
修改nginx.conf檔案,在server段上面添加如下內容:
- rtmp {
- server {
- listen 1935;
- application live {
- live on;
- record off;
- }
- }
- }
注意裡面的application可以加多個,live相當於頻道的含義。只不過直播端推流的時候要設定為和接收端一樣的地址就行。
啟動nginx服務,如果正常應該監聽了80和1935連接埠。保證直播端和接收端能訪問服務端的這兩個連接埠。
以下紅色字型可以完全忽略
簡單測試點播(注意下面是在centos7.2系統操作的):
先找一個flv檔案吧!這,需要安裝一個ffmpeg軟體來類比推流操作
- rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
- yum –y install ffmpeg
- ffmpeg -re -i test.flv -f flv rtmp://192.168.1.1/live
正常輸出如下:
找一台能上網的window作為接收端,輸入下面的url,然後輸入rtmp://192.168.1.1/live,最後點擊播放按鈕,出現如下畫面說明點播正常。其實這個測試點播的步驟完全可以省略,我這裡是方便記錄一下ffmpeg推流。
服務端接著操作:
1、開啟終端直接輸入obs命令,然後會彈出obs的介面,然後點擊串流—選擇自訂流媒體伺服器---URL填寫rtmp://伺服器IP/live—點擊確定按鈕
2、滑鼠指標放到來源空白處,然後點擊添加—螢幕捕獲
3、滑鼠指標放到來源空白處,然後點擊添加—音頻輸入捕獲
4、點擊OK,在來源處應該會出現螢幕捕獲和音頻輸入捕獲了。
然後點擊開始串流,最後點擊是就OK了!如果下面有個時間開始計時走動了就說明資料流能正常推送到服務端了。
三、接收端操作
瀏覽器輸入下面的url,然後輸入rtmp://192.168.1.1/live/,最後點擊播放按鈕,出現ubuntu的案頭說明直播正常。經過測試一般延遲2秒左右,但是用vlc測試延遲4秒左右。所以如果你的接收端能上公網就用瀏覽器,如果不能上就用vlc。使用方法如下:
開啟vlc,點擊媒體—開啟網路串流,輸入你的服務端的地址,點擊播放按鈕就可以即時接收直播的資料流了。