快速搭建直播服務大體架構

2019-06-08

快速搭建直播服務大體架構

srs+ffmpeg+第三方(阿裏雲,騰訊雲等),因為(wèi)不是專門做(zuò)直播平台,所以借助第三方平台(服務器,帶寬,cdn可(kě)以省不少心)。當然如(rú)果你想自(zì)建一(yī)個視(shì)頻直播平台也是可(kě)以的(de)~~

srs用來接收從手機客戶端推來的(de)rtmp流,ffmpeg用來對視(shì)頻進行處理(lǐ),比如(rú)增加logo或濾鏡等,在各種技術嘗試中,走過不少彎路,接收流方面還使用過netty,nginx-rtmp,流處理(lǐ)方面使用過javaCV,但效果有些不理(lǐ)想.,java太吃內(nèi)存,cpu。

下面我們來看一(yī)下大緻的(de)流程吧(ba)

srs的(de)文檔簡單全面,附上git地(dì)址

https://github。com/ossrs/srs/wiki/v2_CN_Home

 

 QQ圖片20190608163744.png


第一(yī)步,獲取SRS。


git clone https://github。com/ossrs/srs
cd srs/trunk

或者使用git更新已有代碼:

git pull

第二步,編譯SRS。

./configure && make

第三步,編寫SRS配置文件。
将以下內(nèi)容保存為(wèi)文件,譬如(rú)conf/rtmp.conf,服務器啓動時指定該配置文件(srs的(de)conf文件夾有該文件)。

# conf/rtmp.conf
listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
}

第四步,啓動SRS。

./objs/srs -c conf/rtmp.conf

以上是基本配置,

安裝成功後文件路徑如(rú)下
下面是完整配置

listen              1935;
max_connections     1000;
daemon              off;
#srs_log_tank        console;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;

http_api {
    enabled         on;
    listen          8085;
    crossdomain     on;
}

vhost test.xx.com {
dvr {
        enabled             on;
        #dvr_path            ./objs/nginx/html/[app]/[stream].[timestamp].flv;
        dvr_path            ./objs/nginx/html/[stream]/[timestamp].flv;
        dvr_plan            session;
        dvr_duration        30;
        dvr_wait_keyframe   on;
    }
    http_hooks {
        enabled         on;
        on_connect      http://127.0.0.1:8383/lss/liveItem/LiveItemAction!streamStatus.do ;
        on_close        http://127.0.0.1:8383/lss/liveItem/LiveItemAction!streamStatus.do ;
        on_publish      http://127.0.0.1:8383/lss/liveItem/LiveItemAction!streamStatus.do ;
        on_unpublish    http://127.0.0.1:8383/lss/liveItem/LiveItemAction!streamStatus.do  ;
        on_dvr          http://127.0.0.1:8085/api/v1/dvrs;
        #on_play         http://127.0.0.1:8085/api/v1/sessions ;
        #on_stop         http://127.0.0.1:8085/api/v1/sessions ;
    }
}

vhost後面要寫對應的(de)推流地(dì)址或者ip.

http_api 與vhost中的(de)http_hooks為(wèi)一(yī)組配置,當srs接收,停止到推流時會調用配置文件中所填地(dì)址,并且将各種參數包括streamId,appid傳到後台中。

hvhost中的(de)dvr功能是本地(dì)錄制,dvr_plan有多種錄制計劃

    session:按照session來關閉flv文件,即編碼器停止推流時關閉flv,整個session錄制為(wèi)一(yī)個flv。
    segment:按照時間分段錄制,flv文件時長(cháng)配置為(wèi)dvr_duration和(hé)dvr_wait_keyframe。注意:若不按關鍵幀切flv(即dvr_wait_keyframe配置為(wèi)off),所以會導緻後面的(de)flv啓動時會花屏。

至此srs服務器的(de)搭建結束。

 

手機直播平台的(de)搭建;
1,采集,iOS是比較簡單的(de),Android則要做(zuò)些機型适配工作,PC最麻煩各種奇葩攝像頭驅動,出了問題特别不好處理(lǐ),建議放棄PC隻支持手機主播,目前幾個新進的(de)直播平台都是這樣的(de)。


2,前處理(lǐ),現在直播美顔已經是标配了,80%的(de)主播沒有美顔根本沒法看。美顔算法需要用到GPU編程,需要懂圖像處理(lǐ)算法的(de)人,沒有好的(de)開源實現,要自(zì)己參考論文去(qù)研究。難點不在于美顔效果,而在于GPU占用和(hé)美顔效果之間找平衡。GPU雖然性能好,但是也是有功耗的(de),GPU占用太高(gāo)會導緻手機發燙,而手機發燙會導緻攝像頭采集掉幀,iPhone6尤其明顯,因為(wèi)iPhone6的(de)CPU和(hé)前置攝像頭很近。

3,編碼,肯定要采用硬編碼,軟編碼720p完全沒希望,勉強能編碼也會導緻CPU過熱燙到攝像頭。硬編碼兼容性又是一(yī)個大坑,android上要有人去(qù)填。編碼要在分辨率,幀率,碼率,GOP等參數設計上找到最佳平衡點。

4,傳輸,自(zì)己做(zuò)不現實,交給CDN服務商吧(ba),也就是貴了點,相信有志于做(zuò)直播平台改變世界的(de)你不差錢。假設2W PCU大約每月帶寬費用100萬左右,因為(wèi)清晰流暢的(de)720p要1.5mbps左右。CDN隻提供了帶寬和(hé)服務器間傳輸,發送和(hé)接收端的(de)網絡連接抖動緩沖還是要自(zì)己寫的(de)。不想要卡頓,必然要加大緩沖,會導緻延遲高(gāo),延遲高(gāo)影響互動性,要做(zuò)權衡。

要想用于推流還必須把音視(shì)頻數據使用傳輸協議進行封裝,變成流數據。常用的(de)流傳輸協議有RTSP、RTMP、HLS等,使用RTMP傳輸的(de)延時通常在1–3秒,對于移動直播這種實時性要求非常高(gāo)的(de)場景,RTMP也成為(wèi)移動直播中最常用的(de)流傳輸協議。最後通過一(yī)定的(de)Qos算法将音視(shì)頻流數據推送到網絡斷,通過CDN進行分發。在直播場景中,網絡不穩定是非常常見的(de),這時就需要Qos來保證網絡不穩情況下的(de)用戶觀看直播的(de)體驗,通常是通過主播端和(hé)播放端設置緩存,讓碼率均勻。另外,針對實時變化的(de)網絡狀況,動态碼率和(hé)幀率也是最常用的(de)策略。

當然,在網絡傳輸方面全部自(zì)己來做(zuò)基本不現實,找提供推流服務的(de)CDN服務商提供解決方案是最好的(de)選擇。據了解,阿裏雲是國(guó)內(nèi)唯一(yī)能自(zì)研CDN緩存服務器的(de)廠商,性能非常有保障。當然,大多數直播平台都會同時接入多個視(shì)頻雲服務提供商,這樣可(kě)以做(zuò)拉流線路互備,對推流後視(shì)頻集群再進行優化也可(kě)提高(gāo)直播的(de)流暢性和(hé)穩定性。


免費直播編碼推流軟件

現代生活已經離(lí)不開互聯網,離(lí)不開軟件了。 這說法毫不誇張。 比如(rú)手機上各種APP眼花缭亂 ,各種行業, 各種功能, 各種Logo, 各種的(de)各種。 沒有良好的(de)整理(lǐ)力,是真的(de)不好意思讓别人看到啊。 這些功能各異的(de)APP程序大多數是免費APP。今天我們來談談關于直播編碼和(hé)推流的(de)免費軟件。推薦四款筆(bǐ)者用過的(de)直播編碼推流軟件,這些免費軟件各有功能側重點。不過最終這四款能脫穎而出,主要是滿足了以下兩個基本功能:

1)  支持H264編碼方式,支持MP3或者AAC編碼。H.264是視(shì)頻編碼方式,而MP3

與AAC是音頻編碼方式。

H264:又稱AVC(高(gāo)級視(shì)頻編碼),是當前首選的(de)編碼标準。

MP3:是音頻編碼标準,大家都熟悉,不多說。

AAC:即高(gāo)級音頻編碼,比MP3音質還好,是做(zuò)直播的(de)首選,它有AAC-LC與HE-AAC兩個

檔次,AAC-LC是地(dì)複雜度的(de)AAC,兼容性好,HE-AAC是高(gāo)效能AAC,壓縮度高(gāo),音質與

AAC-LC相當。


2)  支持RTMP推流。

RTMP:是實時消息協議的(de)簡稱,是由Adobe公司開發,雖然沒有變成國(guó)際标準,但它是實

際上的(de)工業标準,無論哪個公司,隻要做(zuò)直播,就得用它,當今的(de)手機直播APP推流所用

的(de)協議都是RTMP協議。

四款免費推流軟件分别為(wèi):

1.       Adobe Flash Media Encoder

2.       Open Broadcaster Software

3.       800Li Education Podcast

4.       iAVcast

1)Flash Media Live Encoder 3.2

由著名的(de)Adobe公司出品,值得信賴,Adobe好長(cháng)時間已經停止更新了,時代比較久遠了,但仍舊(jiù)不失為(wèi)一(yī)個好用的(de)編碼器軟件。

2)Open Broadcaster Software

開源并且免費的(de)直播軟件,是當前非常流行的(de)直播軟件,很多遊戲直播就采用它,例如(rú)鬥魚直播。

3)800Li Education Podcast

免費的(de)抓桌面直播和(hé)錄屏軟件。不可(kě)多得的(de)免費的(de)直播編碼軟件。有畫中畫功能及畫筆(bǐ)标注功能,對于目前在線教育直播不失為(wèi)一(yī)個好的(de)選擇。 小巧、好用。免費但不開源。

4)iAVCast(串流直播)

國(guó)內(nèi)串流直播團隊開發的(de)免費直播軟件,免費但不開源。

做(zuò)直播除了需要直播編碼推流軟件之外,流媒體服務器系統必不可(kě)少。 筆(bǐ)者簡單列一(yī)下可(kě)以使用的(de)直播系統,選擇開源的(de)實時直播軟件可(kě)以考慮Red 5, 選擇國(guó)外大品牌的(de)可(kě)以考慮Adobe Media Server, 選擇有flash P2P功能的(de)可(kě)以選擇800Li Media Server。


責任編輯:中山網站建設
 【網訊網絡】國(guó)家高(gāo)新技術企業》十年(nián)專注軟件開發,網站建設,網頁設計,APP開發,小程序,微信公衆号開發,定制各類企業管理(lǐ)軟件(OA、CRM、ERP、訂單管理(lǐ)系統、進銷存管理(lǐ)軟件等)!服務熱線:0760-88610046、13924923903,http://www.wansion.net

您的(de)項目需求咨詢熱線:0760-88610046(國(guó)家高(gāo)新技術企業)

*請認真填寫需求,我們會在24小時內(nèi)與您取得聯系。