作者:七牛云
隨著互聯(lián)網(wǎng)用戶消費內容和交互方式的升級,支撐這些內容和交互方式的基礎設施也正在悄悄發(fā)生變革。手機設備拍攝視頻能力和網(wǎng)絡的升級催生了大家對視頻直播領域的關注,吸引了很多互聯(lián)網(wǎng)創(chuàng)業(yè)者或者成熟企業(yè)進入該領域。
七牛云作為一家以基礎服務能力見長的云計算公司,于 6 月底發(fā)布了一個針對視頻直播的實時流網(wǎng)絡 LiveNet 和完整的直播云解決方案,很多開發(fā)者對這個網(wǎng)絡和解決方案的細節(jié)和使用場景非常感興趣。
結合七牛實時流網(wǎng)絡 LiveNet 和直播云解決方案的實踐,我們將用八篇文章,更系統(tǒng)化地介紹當下大熱的視頻直播各環(huán)節(jié)的關鍵技術,幫助視頻直播創(chuàng)業(yè)者們更全面、深入地了解視頻直播技術,更好地技術選型。
本系列文章大綱如下:
(一)開篇
(二)采集
(三)處理
(四)編碼和封裝
(五)推流和傳輸
(六)現(xiàn)代播放器原理
(七)延遲優(yōu)化
(八)SDK 性能測試模型
本文是《解密視頻直播技術》系列之一:開篇,我們將從整體介紹直播中的各個環(huán)節(jié)。
1.采集
采集是播放環(huán)節(jié)中的第一環(huán),iOS 系統(tǒng)因為軟硬件種類不多,硬件適配性較好,所以比較簡單。Android 則不同,市面上硬件機型非常多,難以做到一個庫適配所有硬件。PC 端的采集也跟各種攝像頭驅動有關,推薦使用目前市面上最好用的 PC 端開源免費軟件 OBS。
2.處理
「80% 的主播沒有美顏根本沒法看?!共还馐敲李仯芏嗥渌囊曨l處理如模糊效果、水印等也都是在這個環(huán)節(jié)做。目前 iOS 端比較知名的是 GPUImage 這個庫,提供了豐富端預處理效果,還可以基于這個庫自己寫算法實現(xiàn)更豐富端效果。Android 也有 GPUImage 這個庫的移植,叫做 android-gpuimage。同時,Google 官方開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形圖像相關的處理。
3.編碼
編碼主要難點有兩個:1. 處理硬件兼容性問題。2. 在高 fps、低 bitrate 和音質畫質之間找到平衡。iOS 端硬件兼容性較好,可以直接采用硬編。而 Android 的硬編的支持則難得多,需要支持各種硬件機型,推薦使用軟編。
4.推流和傳輸
傳輸涉及到很多端:從主播端到服務端,從收流服務端到邊緣節(jié)點,以及再從邊緣節(jié)點到觀眾端。
推流端和分發(fā)端理論上需要支持的并發(fā)用戶數(shù)應該都是億級的,不過畢竟產(chǎn)生內容的推流端在少數(shù),和消費內容端播放端不是一個量級,但是他們對推流穩(wěn)定性和速度的要求比播放端高很多,這涉及到所有播放端能否看到直播,以及直播端質量如何。
很多人吐槽現(xiàn)在的 CDN 不靠譜,我也承認傳統(tǒng)的 CDN 在新時代顯得心有余力不足。你能夠借助 CDN 快速實現(xiàn)大規(guī)模的流分發(fā),但是穩(wěn)定高速的推流上傳可能還需要自己做很多工作。因此,我們七牛打造了一個直播專屬的實時流網(wǎng)絡,接下來我們會重點介紹這個網(wǎng)絡和傳統(tǒng) CDN 的差別。
5.轉碼
為了讓主播推上來的流適配各個平臺端各種不同協(xié)議,需要在服務端做一些流處理工作,比如轉碼成不同格式支持不同協(xié)議如 RTMP、HLS 和 FLV,一路轉多路流來適配各種不同的網(wǎng)絡狀況和不同分辨率的終端設備。
同時,為了配合一些運營需求,比如一些監(jiān)管部門的要求,我們在服務端也提供了內容識別如鑒黃的功能。
6.解碼和渲染
解碼和渲染,也即音視頻的播放,目前 iOS 端的播放兼容性較好,在延遲可接受的情況下使用 HLS 協(xié)議是最好的選擇,我們也提供了能夠播放 RTMP 和 HLS 的播放器 SDK。Android 的硬件解碼和編碼一樣也存在兼容性問題,目前比較好的開源播放器是基于 ffplay 的 ijkplayer,我們也基于此實現(xiàn)了一個更好的 Android SDK。
除了 SDK 的介紹之外,我們將重點介紹播放器的原理,以及現(xiàn)代視頻播放器的基本架構。
7.直播場景化解決方案
除了整個直播流程的介紹之外,我們將圍繞當下最火的直播場景如社交直播和游戲直播,介紹它背后的技術方案。這些技術方案不僅涉及到七牛這樣的直播基礎服務,還可能涉及到和場景相關的其它技術,如社交直播下的聊天、點贊和彈幕的支持。
在下一篇連載中,我們將詳細介紹下直播播放環(huán)節(jié)的前兩個環(huán)節(jié):采集和處理。
面對市場上各種視頻采集源,直播應用開發(fā)者應該如何去完整的覆蓋?
市場上主播的各種需求如美顏、水印、連麥互動等該怎么去滿足?