1. 程式人生 > >《視訊直播技術詳解》系列之一:開篇

《視訊直播技術詳解》系列之一:開篇

作者:七牛雲

隨著網際網路使用者消費內容和互動方式的升級,支撐這些內容和互動方式的基礎設施也正在悄悄發生變革。手機裝置拍攝視訊能力和網路的升級催生了大家對視訊直播領域的關注,吸引了很多網際網路創業者或者成熟企業進入該領域。

七牛雲作為一家以基礎服務能力見長的雲端計算公司,於 6 月底釋出了一個針對視訊直播的實時流網路 LiveNet 和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。

結合七牛實時流網路 LiveNet 和直播雲解決方案的實踐,我們將用八篇文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解視訊直播技術,更好地技術選型。

本系列文章大綱如下:

(一)開篇

(二)採集

(三)處理

(四)編碼和封裝

(五)推流和傳輸

(七)延遲優化

本文是《解密視訊直播技術》系列之一:開篇,我們將從整體介紹直播中的各個環節。

1.採集

採集是播放環節中的第一環,iOS 系統因為軟硬體種類不多,硬體適配性較好,所以比較簡單。Android 則不同,市面上硬體機型非常多,難以做到一個庫適配所有硬體。PC 端的採集也跟各種攝像頭驅動有關,推薦使用目前市面上最好用的 PC 端開源免費軟體 OBS。

2.處理

「80% 的主播沒有美顏根本沒法看。」不光是美顏,很多其它的視訊處理如模糊效果、水印等也都是在這個環節做。目前 iOS 端比較知名的是 GPUImage 這個庫,提供了豐富端預處理效果,還可以基於這個庫自己寫演算法實現更豐富端效果。Android 也有 GPUImage 這個庫的移植,叫做 android-gpuimage。同時,Google 官方開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形影象相關的處理。

3.編碼

編碼主要難點有兩個:1. 處理硬體相容性問題。2. 在高 fps、低 bitrate 和音質畫質之間找到平衡。iOS 端硬體相容性較好,可以直接採用硬編。而 Android 的硬編的支援則難得多,需要支援各種硬體機型,推薦使用軟編。

4.推流和傳輸

傳輸涉及到很多端:從主播端到服務端,從收流服務端到邊緣節點,以及再從邊緣節點到觀眾端。

推流端和分發端理論上需要支援的併發使用者數應該都是億級的,不過畢竟產生內容的推流端在少數,和消費內容端播放端不是一個量級,但是他們對推流穩定性和速度的要求比播放端高很多,這涉及到所有播放端能否看到直播,以及直播端質量如何。

很多人吐槽現在的 CDN 不靠譜,我也承認傳統的 CDN 在新時代顯得心有餘力不足。你能夠藉助 CDN 快速實現大規模的流分發,但是穩定高速的推流上傳可能還需要自己做很多工作。因此,我們七牛打造了一個直播專屬的實時流網路,接下來我們會重點介紹這個網路和傳統 CDN 的差別。

5.轉碼

為了讓主播推上來的流適配各個平臺端各種不同協議,需要在服務端做一些流處理工作,比如轉碼成不同格式支援不同協議如 RTMP、HLS 和 FLV,一路轉多路流來適配各種不同的網路狀況和不同解析度的終端裝置。

同時,為了配合一些運營需求,比如一些監管部門的要求,我們在服務端也提供了內容識別如鑑黃的功能。

6.解碼和渲染

解碼和渲染,也即音視訊的播放,目前 iOS 端的播放相容性較好,在延遲可接受的情況下使用 HLS 協議是最好的選擇,我們也提供了能夠播放 RTMP 和 HLS 的播放器 SDK。Android 的硬體解碼和編碼一樣也存在相容性問題,目前比較好的開源播放器是基於 ffplay 的 ijkplayer,我們也基於此實現了一個更好的 Android SDK。

除了 SDK 的介紹之外,我們將重點介紹播放器的原理,以及現代視訊播放器的基本架構。

7.直播場景化解決方案

除了整個直播流程的介紹之外,我們將圍繞當下最火的直播場景如社交直播和遊戲直播,介紹它背後的技術方案。這些技術方案不僅涉及到七牛這樣的直播基礎服務,還可能涉及到和場景相關的其它技術,如社交直播下的聊天、點贊和彈幕的支援。

在下一篇連載中,我們將詳細介紹下直播播放環節的前兩個環節:採集和處理。

  • 面對市場上各種視訊採集源,直播應用開發者應該如何去完整的覆蓋?

  • 市場上主播的各種需求如美顏、水印、連麥互動等該怎麼去滿足?