音影片直播技術漫談
- 2020 年 4 月 2 日
- 筆記

直播
前言
今天的給大家簡單的介紹一下音影片技術主要應用於哪些產品, 以及這些產品都涉及到哪些技術,並簡單講一下每種技術的難點,最後我想談一談音影片直播的未來。
產品分類
現在大家一談到音影片直播就會想到花椒、映客等娛樂直播,還有鬥魚、熊貓等遊戲直播,這兩種直播我們將它們統稱為泛娛樂化直播。其實音影片直播技術不光應用於這類泛娛樂直播,還有很多其它類型的直播,如音影片會議、教育直播等,這兩種我們稱之為實時互動直播。
- 泛娛樂化直播主要有音頻,影片,聊天,打賞等功能。
- 實時互動直播除了具有音頻,影片,聊天,打賞功能外,一般還包括 文檔共享、桌面共享、白板共享、批註等功能。
泛娛樂化直播與實時互動直播區別
泛娛樂化直播與實時互動直播的區別還是比較大的,從技術門檻來說實時互動直播比泛娛樂化直播要高好幾個級別。
泛娛樂化直播的一般場景是一個網紅主播在上面給大家分享,粉絲們與網紅的主要溝通方式是通過聊天的方式。在這種場景下,直播平台主需要保障網紅的影片與聲音保持同步就可以了。粉絲對於網紅聲音、影片的延遲不太關心,也就是說網紅從開口說話到粉絲收聽到網紅的聲音和影片延遲10秒或20秒用戶都是可以接受的。
實時互動直播與泛娛樂化直播場景有非常大的區別,我們以音影片會方為例,比如在一場會議中同時有30人參加,每個與會者都有可能參與討論交流,並根據前一位發言者所講的問題發表自己的看法。 所以它要求會中每個人都能夠講話,都能進行影片共享。在這種場景下,它對實時性就有了非常高的要求,如果在音影片會議中語音延遲超過500ms那用戶的感受就會非常差。實際上音影片會議的規範上有明確的規定,音頻的實時互動小於300毫秒,實時互動的體驗會非常好。在我們實際的應用中, 我們發現如果音頻延遲不超過500毫秒,用戶的體驗還是非常不錯的。
為了達到實時互動的目的,實時互動直播要做非常多的工作,如網路優化,音影片的優化,伺服器優化等。
另一方面,實時互動直播由於一般應用於音影片會議和在線教育,所以在功能上也比比泛娛樂化直播多很多。這一點已經在上面一節提到過了。
所以說,實時互動直播泛娛樂化直播技術門檻高了好幾個級別。
技術漫談
下面我們來講一下音影片直播都用到了哪些技術。說到音影片直播技術,我們最先想到的是音頻技術和影片技術。 其實音頻技術和影片技術它們的大體處理流程都是差不多的。一般都分為五大步: 數據採集,編碼,傳輸,解碼和渲染。然後是IM聊天,這主要是服務端的工作。IM主要解決的問題是大負載問題以及消息丟失和消息重複問題。桌面共享,桌面共享可以用影片技術實現,也可以用VNC技術實現,相較而言,VNC優勢更大。文檔共享,比較簡單的方式是將各種文檔都轉成jpg格式,更好點的可以轉成矢量圖,這樣圖片進行放大,縮小時不會失真。傳輸,對於實時性不高的產品可以使用RTMP, 對於實時性比較高的必須使用UDP,一般會選用RUDP(可靠性UDP),既可以保證傳輸速度,又可以防止丟包。下面我們對這幾個方面做一下詳細介紹:
音影片處理
- 數據採集。對於音頻來說採集到的數據是PCM格式,對於影片數據採集的格式是YUV格式。
- 數據壓縮編碼。數據採集完成之後,需要對數據進行壓縮編碼。音影片使用的壓縮技術稱為有損壓縮技術。而像我們平RAR,ZIP工具進行的壓縮都是無損壓縮。就是說解壓後的數據與原始數據一樣叫做無損壓縮,解壓後和原始數據高度接近稱為有損壓縮,音影片編碼屬於後者。對於音頻來講,常用的編碼格式有speex, AAC, OPUS, G.711等。現在比較常用的是AAC,一是它音質比較好,二是RTMP對AAC支援的比較好。對於影片編碼格式有H.264, H.265, VP8, VP9等,目常基本上都是使用H.264。注意,衡量有損壓縮好壞的指標就是看同等壓縮率的情況下,解壓後的數據與原始數據之間差別的大小,差別越小證明壓縮的演算法越優。當然在實時互動直播中,我們為了實時性就需要犧牲一部分品質或者也有可能為了品質而犧牲一些實時性,這需要仔細的權衡。
- 傳輸。數據壓縮完之後通過網路傳輸。對於泛娛樂化的直播平台一般都使用RTMP協議進行數據的傳輸,RTMP是在TCP之上的網路協議。對於實時互動直播則必須使用UDP進行數據傳輸。 UDP數據的傳輸速度上比TCP有天然的優勢。RTMP是Adobe公司發明一種傳輸協議,目前所有的CDN網路對RTMP的支援是非常好的,但它的問題就是延遲性比較大。使用RTMP造成延遲主要有兩個方面原因,一是RTMP網路協議由於是基於TCP協議的,本身延遲就比UDP大,另一方面是CDN架構造成的。CDN首先從頂級結點接收數據,然後以樹狀形式分發到端結點,這個過程鏈條比較長,導致整體的延遲非常大。而且延遲時間不固定,有可能某段時間延遲3、5秒,也有可能過一段時間延遲就達到了30秒這都是有可能的。
- 解碼。就是將對編碼數據做反向操作。如音頻是AAC編碼,則它再解為PCM格式數據。影片是H.264再解為YUV數據。
- 播放和渲染。對於音頻直接將PCM數據放入到音頻驅動緩衝驅,驅動程式就會將音頻播放出來。對於影片一般會通過 opengl利用 GPU進行影像渲染。
IM聊天
對於直播產品中的聊天與QQ之類聊天軟體還有不少區別,尤其娛樂直播,在一場直播中可能有上萬人蔘上,其中一個用戶發消息就要分發1萬份,10000人同時發,就是1億的消息量,具有短時大並發的特性。可以在用戶接入設計上要考慮多點介面,而在下發時要做限流控制,同時在客戶端也要限制用戶發消息的頻率。
桌面共享
桌面共享可以使用影片技術也可以使用VNC技術,相較而言VNC技術更佔優勢。VNC主要是以下幾點好處,一,共享者桌面不發生變化時,就沒有數據產生,這樣可以節省頻寬流量,而影片即使不動也會產生一定流量。二、VNC可以保障桌面的清晰度,而影片由於是動態變化的,所以很難做到這點。三、可以進行遠程控制,影片技術無法實現。
文檔共享
文檔實現共享的方式很簡單,就是將各種類型的文檔如 word, ppt, excel, txt, pdf等都轉成圖片。當時轉成的圖片可以是 jpg 也可以是矢量圖。矢量圖的好處是圖片進行縮放時不失真。一般的實現方式都是實現一個虛擬印表機來實現。
傳輸
這裡主要說一下 RUDP, 我們知道TCP是流式的,可靠傳輸,而UDP是不可靠傳輸。它們都是基於IP協議的,而IP協議是不可靠的包傳輸方式。那麼TCP是怎麼成為流式可靠傳輸的呢?這裡不可以做詳細介紹,但其核心就是發送/應答機制,丟包/超時重傳機制,滑窗控制(慢增長,快下降)機制。而RDUP也是利用這幾個機制來達到可靠性的要求。
為什麼直播火了
2015年直播一下火了,對於直播為什麼能火我來談一下我的看法,我是從2010年做網路音影片會議平台的,那個時候中國還很少有做這類產品的公司,即使有也大多不是很成功。國外有一家比較大的公司叫WebEx公司,它是全球第一家做網路音影片會議上市的公司,也是我們想超越的一個目標公司。
在當時來講技術的門檻還是比較高的,既要解決音影片的問題,又要解決傳輸的問題, 還要解決 服務端高負載、大並發、高可用等問題,所以做一個音影片會議或實時互動直播的產品是非常麻煩的。這幾年隨著開源社區的不斷貢獻,如我們熟知的ffmpeg, x264, webrtc等開源庫的出現;Adobe RTMP協議的推廣;CDN價格的降低,技術的成熟;以及智慧手機的普及,大大降低了直播技術的門檻。
技術已經不是那麼高不可攀,而人們對影片天然有大量的需求,直播產品的出現,網紅的出現,以及資加的注入,加速了或推動了市場的繁榮,到2015年出現在大爆發。但這種繁榮是虛假繁榮。網紅的出現只是短期滿足人們的新鮮感,這類產品並不是一個長期需求。所以從2015年下半年,直播就已經開始走下坡路。最後能生存下來的泛娛樂直播必須要進行痛苦的轉型。
未來的方向
泛娛樂直播的衰落並不代表著直播沒有前途,而我覺得直播行業才剛剛開始。只是不要把它簡單的用在為了娛樂而娛樂的產品上。如直播與在線教育結合,與會議結合,與安防行業結合,與媒體行業結合都是不錯的道路。
而在技術上,模式識別(人臉識別)、語音識別與分析、VR技術、影像處理等技術的加入,會讓人們享受後更好的產品體驗。