需求:現在需要搭建一台流媒體服務器,為了將主講人的電腦桌面屏幕和聲音直播給遠端的人接收實時觀看,要求延遲在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、服務端能接收推流嗎?如何測試推流成功?
答:服務端可以接受推流,服務端可以用盤古直播服務器,在盤古直播注冊一個賬號,然後記住流媒體服務器的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,點擊媒體—打開網絡串流,輸入你的服務端的地址,點擊播放按鈕就可以實時接收直播的數據流了。