快速搭建直播服務大(dà)體(tǐ)架構

2019-06-08

快速搭建直播服務大(dà)體(tǐ)架構

srs+ffmpeg+第三方(阿裏雲,騰訊雲等),因爲不是專門做直播平台,所以借助第三方平台(服務器,帶寬,cdn可以省不少心)。當然如果你想自建一(yī)個視頻(pín)直播平台也是可以的~~

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

下(xià)面我(wǒ)們來看一(yī)下(xià)大(dà)緻的流程吧

srs的文檔簡單全面,附上git地址

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配置文件。
将以下(xià)内容保存爲文件,譬如conf/rtmp.conf,服務器啓動時指定該配置文件(srs的conf文件夾有該文件)。

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

第四步,啓動SRS。

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

以上是基本配置,

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

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後面要寫對應的推流地址或者ip.

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

hvhost中(zhōng)的dvr功能是本地錄制,dvr_plan有多種錄制計劃

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

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

 

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


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

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

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

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

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


免費(fèi)直播編碼推流軟件

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

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

與AAC是音頻(pín)編碼方式。

H264:又(yòu)稱AVC(高級視頻(pín)編碼),是當前首選的編碼标準。

MP3:是音頻(pín)編碼标準,大(dà)家都熟悉,不多說。

AAC:即高級音頻(pín)編碼,比MP3音質還好,是做直播的首選,它有AAC-LC與HE-AAC兩個

檔次,AAC-LC是地複雜(zá)度的AAC,兼容性好,HE-AAC是高效能AAC,壓縮度高,音質與

AAC-LC相當。


2)  支持RTMP推流。

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

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

的協議都是RTMP協議。

四款免費(fèi)推流軟件分(fēn)别爲:

1.       Adobe Flash Media Encoder

2.       Open Broadcaster Software

3.       800Li Education Podcast

4.       iAVcast

1)Flash Media Live Encoder 3.2

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

2)Open Broadcaster Software

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

3)800Li Education Podcast

免費(fèi)的抓桌面直播和錄屏軟件。不可多得的免費(fèi)的直播編碼軟件。有畫中(zhōng)畫功能及畫筆标注功能,對于目前在線教育直播不失爲一(yī)個好的選擇。 小(xiǎo)巧、好用。免費(fèi)但不開(kāi)源。

4)iAVCast(串流直播)

國内串流直播團隊開(kāi)發的免費(fèi)直播軟件,免費(fèi)但不開(kāi)源。

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


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

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

*請認真填寫需求,我(wǒ)們會在24小(xiǎo)時内與您取得聯系。