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