大作業(yè) - 2 rtmp服務(wù)器配置

服務(wù)器端

開源的rtmp服務(wù)器在網(wǎng)上主要有這樣幾種:crtmpserver,nginx-rtmp-module,Red5,F(xiàn)luorineFx等。

crtmpserver

在ubuntu下,獲取軟件自然先從apt-get開始。

$ sudo apt-get install crtmpserver

使用apt-get方式安裝的crtmpserver默認(rèn)配置在/etc/crtmpserver目錄下。此時,這個服務(wù)器已經(jīng)可以運(yùn)行。

apt-get所下載下來的長時間運(yùn)行的程序基本上會在/etc/init.d下有一個接受start, stop, restart等命令的腳本,而crtmpserver也不例外。所以,直接使用該腳本啟動服務(wù)器即可。

$ sudo /etc/init.d/crtmpserver start
* Starting c++ RTMP Server crtmpserver            [ OK ]

但為了確保服務(wù)器的運(yùn)行符合我們的預(yù)期,需要檢查一下配置文件。通過查看 /etc/init.d/crtmpserver 腳本,可以看到默認(rèn)配置文件為 /etc/crtmpserver/crtmpserver.lua。

再通過查看配置文件,最終定位到applications目錄下的appselector.lua文件。文件內(nèi)容如下

application = 
{
    ......
    default = true,
    acceptors = 
    {
        {
            ip = "0.0.0.0",
            prot = 1935,
            protocol = "inboundRtmp"
        }
    ......
    }
}

以上配置文件說明,該applications為默認(rèn)app,接受所有的連接請求,同時,綁定本機(jī)所有ip上的1935端口,協(xié)議為Rtmp協(xié)議。該配置滿足我們的要求。

至此,一個支持rtmp協(xié)議的服務(wù)器已經(jīng)搭建完畢。

Nginx

Nginx也包括在在ubuntu下的包管理器中,但是,從服務(wù)器下載的是已經(jīng)編譯好的Nginx。而Nginx添加模塊的方式需要重新編譯,此時,我們需要自己編譯Nginx。

編譯步驟也很簡單,按照rtmp-module Github頁面上的流程進(jìn)行即可。

$ cd /path/to/nginx_source_code
$ ./configure --add-module=/path/to/nginx-rtmp-module
$ make
$ make install

make install之后,Nginx被安裝到了/usr/local/nginx目錄下,通過編輯./conf/nginx.conf配置文件,即可使用rtmp模塊。

......
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live{
            live on;
            record off;
        }
    }
}

如上的配置表示這是一個rtmp模塊,監(jiān)聽端口1935,直播模式為開,并且不記錄為文件。該application接受型為rtmp://xx.xx.xx.xx:1935/live/xxxx的地址。

配置完成后使用命令打開服務(wù)器,即可開始使用Nginx服務(wù)器。

$ /usr/local/nginx/sbin/nginx -t

客戶端

當(dāng)然,口說無憑,服務(wù)器能否使用自然需要一些方式來驗證。由于rtmp協(xié)議有著三方的共同參與:服務(wù)器、推流和拉流。所以,為驗證服務(wù)器的可用性需要構(gòu)建出一個推流端以及至少一個拉流端進(jìn)行驗證。

拉流

獲取總是比創(chuàng)造容易。視頻直播流的獲取也比發(fā)送方便很多。
推薦使用VLC與SRS播放器。VLC在ubuntu下可以由apt-get獲取。

推流

推流的工具有很多,常見的有圖形化的OBS以及命令行下的FFmpeg。

OBS

該軟件被用于各大視頻網(wǎng)站的直播中,支持?jǐn)z像頭捕獲、屏幕分享等各種常用功能。

最簡單的獲取方式依然是apt-get包管理器。

$ sudo add-apt-repository ppa:obsproject/obs-studio
$ sudo apt-get update && sudo apt-get install obs-studio

下載完畢之后,需要進(jìn)行配置后才可使用。首先,在 File/Settings 選項卡中,選擇Stream配置項。將Stream Type改為Custom Streaming Server。而后url填寫crtmpserver的端口地址即可。

我的配置

此時,OBS會將流量發(fā)送至rtmp://127.0.0.1:1935/livd/test這個地址,而拉流也是通過這個地址。

屏幕捕獲直播

FFmpeg

我們的應(yīng)用的需求并沒有涉及到復(fù)雜的視頻處理,而僅僅只是捕獲攝像頭數(shù)據(jù)并按照rtmp格式傳輸即可。同時,并不是每一個客戶端均支持圖形化配置運(yùn)行界面,所以,可能需要一個新的選擇。

而FFmpeg作為一個老牌的多媒體編解碼框架,同時也提供了發(fā)送流媒體的能力,與我們的需求吻合。

$ ls /dev/video*
/dev/video0
$ ffmpeg -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0x2074920] Raw       :   yuyv422 :     YUV 4:2:2 (YUYV) : 640x480 352x288 320x240 176x144 160x120 1280x720 640x480
[video4linux2,v4l2 @ 0x2074920] Compressed:     mjpeg :                MJPEG : 640x480 352x288 320x240 176x144 160x120 1280x720 640x480
/dev/video0: Immediate exit requested
$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/test

以上命令獲取了當(dāng)前電腦的視頻設(shè)備,并通過ffmpeg查看了具體的攝像機(jī)細(xì)節(jié)。最后一條命令則是開始向地址rtmp://127.0.0.1:1935/live/test進(jìn)行推流。

當(dāng)然,ffmpeg也可以使用文件作為流輸入。

$ ffmpeg -i 這個殺手不太冷.rmvb -f flv rtmp://127.0.0.1:1935/live/test
使用ffmpeg推送文件流直播

一些問題

在實(shí)踐過程中,可能會發(fā)生FFmpeg與crtmpserver不兼容的問題,例如說

[rtmp @ 0x18aa360] Server error: Specified stream not found in call to releaseStream
[rtmp @ 0x18aa360] Sending publish command for 'test2'
[rtmp @ 0x18aa360] Server error: call to function _checkbw failed

或者

HandShake: client signature does not match!

此時可以試著使用

ffmpeg ... ...  -f flv -metadata streanName="test" tcp://localhost:6666

來嘗試解決。此時6666端口使用的是crtmpserver所帶的application文件flvplayback.lua。而原來所使用的1935端口是在appselector.lua中定義。

同時,還可以修改上述兩個配置文件中的validateHandshake字段為false放行未匹配的客戶端。但是,就我本人實(shí)驗而言,沒有特別大效果。

最終項目使用以下命令成功在樹莓派上實(shí)現(xiàn)攝像頭推流。

raspivid -t -1 -w 960 -h 540 -fps 25 -b 500000 -vf -o - | ffmpeg -i - -vcodec copy -an -r 25 -f flv -metadata streamName=test tcp://remote_server_ip:6666

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容