天天看點

如何搭建一個完整的手機直播系統源碼?

首先第一步,采集,iOS是比較簡單的,Android則要做些機型适配工作,PC最麻煩各種奇葩攝像頭驅動,出了問題特别不好處理,建議放棄PC隻支援手機主播,目前幾個新進的直播平台都是這樣的。

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

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

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

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

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

繼續閱讀