視頻直播平台網站搭建思路
2019.04.10
快速搭建直播服務大體架構
srs+ffmpeg+第三方(阿裏雲,騰訊雲等),因為不是專門做直播平台,所以借助第三方平台(服務器,帶寬,cdn可以省不少心)。當然如果你想自建一個視頻直播平台也是可以的~~
srs用來接收從手機客戶端推來的rtmp流,ffmpeg用來對視頻進行處理,比如增加logo或濾鏡等,在各種技術嚐試中,走過不少彎路,接收流方麵還使用過netty,nginx-rtmp,流處理方麵使用過javaCV,但效果有些不理想.,java太吃內存,cpu。
下麵我們來看一下大致的流程吧
srs的文檔簡單全麵,附上git地址
https://github.com/ossrs/srs/wiki/v2_CN_Home

第一步,獲取SRS。
git clone https://github.com/ossrs/srs
cd srs/trunk
或者使用git更新已有代碼:
git pull
第二步,編譯SRS。
./configure && make
第三步,編寫SRS配置文件。
將以下內容保存為文件,譬如conf/rtmp.conf,服務器啟動時指定該配置文件(srs的conf文件夾有該文件)。
# conf/rtmp.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
}
第四步,啟動SRS。
./objs/srs -c conf/rtmp.conf
以上是基本配置,
安裝成功後文件路徑如下
下麵是完整配置
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中的http_hooks為一組配置,當srs接收,停止到推流時會調用配置文件中所填地址,並且將各種參數包括streamId,appid傳到後台中。
hvhost中的dvr功能是本地錄製,dvr_plan有多種錄製計劃
session:按照session來關閉flv文件,即編碼器停止推流時關閉flv,整個session錄製為一個flv。
segment:按照時間分段錄製,flv文件時長配置為dvr_duration和dvr_wait_keyframe。注意:若不按關鍵幀切flv(即dvr_wait_keyframe配置為off),所以會導致後麵的flv啟動時會花屏。
至此srs服務器的搭建結束。
手機直播平台的搭建;
1,采集,iOS是比較簡單的,Android則要做些機型適配工作,PC最麻煩各種奇葩攝像頭驅動,出了問題特別不好處理,建議放棄PC隻支持手機主播,目前幾個新進的直播平台都是這樣的。
2,前處理,現在直播美顏已經是標配了,80%的主播沒有美顏根本沒法看。美顏算法需要用到GPU編程,需要懂圖像處理算法的人,沒有好的開源實現,要自己參考論文去研究。難點不在於美顏效果,而在於GPU占用和美顏效果之間找平衡。GPU雖然性能好,但是也是有功耗的,GPU占用太高會導致手機發燙,而手機發燙會導致攝像頭采集掉幀,iPhone6尤其明顯,因為iPhone6的CPU和前置攝像頭很近。
3,編碼,肯定要采用硬編碼,軟編碼720p完全沒希望,勉強能編碼也會導致CPU過熱燙到攝像頭。硬編碼兼容性又是一個大坑,android上要有人去填。編碼要在分辨率,幀率,碼率,GOP等參數設計上找到最佳平衡點。
4,傳輸,自己做不現實,交給CDN服務商吧,也就是貴了點,相信有誌於做直播平台改變世界的你不差錢。假設2W PCU大約每月帶寬費用100萬左右,因為清晰流暢的720p要1.5mbps左右。CDNzhitigongledaikuanhefuwuqijianchuanshu,fasonghejieshouduandewangluolianjiedoudonghuanchonghaishiyaozijixiede。buxiangyaokadun,biranyaojiadahuanchong,huidaozhiyanchigao,yanchigaoyingxianghudongxing,yaozuoquanheng。
要想用於推流還必須把音視頻數據使用傳輸協議進行封裝,變成流數據。常用的流傳輸協議有RTSP、RTMP、HLS等,使用RTMP傳輸的延時通常在1–3秒,對於移動直播這種實時性要求非常高的場景,RTMP也成為移動直播中最常用的流傳輸協議。最後通過一定的Qos算法將音視頻流數據推送到網絡斷,通過CDN進行分發。在直播場景中,網絡不穩定是非常常見的,這時就需要Qos來(lai)保(bao)證(zheng)網(wang)絡(luo)不(bu)穩(wen)情(qing)況(kuang)下(xia)的(de)用(yong)戶(hu)觀(guan)看(kan)直(zhi)播(bo)的(de)體(ti)驗(yan),通(tong)常(chang)是(shi)通(tong)過(guo)主(zhu)播(bo)端(duan)和(he)播(bo)放(fang)端(duan)設(she)置(zhi)緩(huan)存(cun),讓(rang)碼(ma)率(lv)均(jun)勻(yun)。另(ling)外(wai),針(zhen)對(dui)實(shi)時(shi)變(bian)化(hua)的(de)網(wang)絡(luo)狀(zhuang)況(kuang),動(dong)態(tai)碼(ma)率(lv)和(he)幀(zhen)率(lv)也(ye)是(shi)最(zui)常(chang)用(yong)的(de)策(ce)略(lve)。
當然,在網絡傳輸方麵全部自己來做基本不現實,找提供推流服務的CDN服務商提供解決方案是最好的選擇。據了解,阿裏雲是國內唯一能自研CDNhuancunfuwuqidechangshang,xingnengfeichangyoubaozhang。dangran,daduoshuzhibopingtaidouhuitongshijieruduogeshipinyunfuwutigongshang,zheyangkeyizuolaliuxianluhubei,duituiliuhoushipinjiqunzaijinxingyouhuayeketigaozhibodeliuchangxinghewendingxing。

免費直播編碼推流軟件
現代生活已經離不開互聯網,離不開軟件了。 這說法毫不誇張。 比如手機上各種APP眼花繚亂 ,各種行業, 各種功能, 各種Logo, 各種的各種。 沒有良好的整理力,是真的不好意思讓別人看到啊。 這些功能各異的APP程序大多數是免費APP。今(jin)天(tian)我(wo)們(men)來(lai)談(tan)談(tan)關(guan)於(yu)直(zhi)播(bo)編(bian)碼(ma)和(he)推(tui)流(liu)的(de)免(mian)費(fei)軟(ruan)件(jian)。推(tui)薦(jian)四(si)款(kuan)筆(bi)者(zhe)用(yong)過(guo)的(de)直(zhi)播(bo)編(bian)碼(ma)推(tui)流(liu)軟(ruan)件(jian),這(zhe)些(xie)免(mian)費(fei)軟(ruan)件(jian)各(ge)有(you)功(gong)能(neng)側(ce)重(zhong)點(dian)。不(bu)過(guo)最(zui)終(zhong)這(zhe)四(si)款(kuan)能(neng)脫(tuo)穎(ying)而(er)出(chu),主(zhu)要(yao)是(shi)滿(man)足(zu)了(le)以(yi)下(xia)兩(liang)個(ge)基(ji)本(ben)功(gong)能(neng):
1) 支持H264編碼方式,支持MP3或者AAC編碼。H.264是視頻編碼方式,而MP3
與AAC是音頻編碼方式。
H264:又稱AVC(高級視頻編碼),是當前首選的編碼標準。
MP3:是音頻編碼標準,大家都熟悉,不多說。
AAC:即高級音頻編碼,比MP3音質還好,是做直播的首選,它有AAC-LC與HE-AAC兩個
檔次,AAC-LC是地複雜度的AAC,兼容性好,HE-AAC是高效能AAC,壓縮度高,音質與
AAC-LC相當。
2) 支持RTMP推流。
RTMP:是實時消息協議的簡稱,是由Adobe公司開發,雖然沒有變成國際標準,但它是實
際上的工業標準,無論哪個公司,隻要做直播,就得用它,當今的手機直播APP推流所用
的協議都是RTMP協議。
四款免費推流軟件分別為:
1. Adobe Flash Media Encoder
2. Open Broadcaster Software
3. 800Li Education Podcast
4. iAVcast
1)Flash Media Live Encoder 3.2
由著名的Adobe公司出品,值得信賴,Adobe好長時間已經停止更新了,時代比較久遠了,但仍舊不失為一個好用的編碼器軟件。
2)Open Broadcaster Software
開源並且免費的直播軟件,是當前非常流行的直播軟件,很多遊戲直播就采用它,例如鬥魚直播。
3)800Li Education Podcast
mianfeidezhuazhuomianzhibohelupingruanjian。bukeduodedemianfeidezhibobianmaruanjian。youhuazhonghuagongnengjihuabibiaozhugongneng,duiyumuqianzaixianjiaoyuzhibobushiweiyigehaodexuanze。 小巧、好用。免費但不開源。
4)iAVCast(串流直播)
國內串流直播團隊開發的免費直播軟件,免費但不開源。
做直播除了需要直播編碼推流軟件之外,流媒體服務器係統必不可少。 筆者簡單列一下可以使用的直播係統,選擇開源的實時直播軟件可以考慮Red 5, 選擇國外大品牌的可以考慮Adobe Media Server, 選擇有flash P2P功能的可以選擇800Li Media Server。












