音視訊直播技術漫談
前言
今天的給大家簡單的介紹一下音視訊技術主要應用於哪些產品, 以及這些產品都涉及到哪些技術,並簡單講一下每種技術的難點,最後我想談一談音視訊直播的未來。
產品分類
現在大家一談到音視訊直播就會想到花椒、映客等娛樂直播,還有鬥魚、熊貓等遊戲直播,這兩種直播我們將它們統稱為泛娛樂化直播。其實音視訊直播技術不光應用於這類泛娛樂直播,還有很多其它型別的直播,如音視訊會議、教育直播等,這兩種我們稱之為實時互動直播。
- 泛娛樂化直播主要有音訊,視訊,聊天,打賞等功能。
- 實時互動直播除了具有音訊,視訊,聊天,打賞功能外,一般還包括 文件共享、桌面共享、白板共享、批註等功能。
泛娛樂化直播與實時互動直播區別
泛娛樂化直播與實時互動直播的區別還是比較大的,從技術門檻來說實時互動直播比泛娛樂化直播要高好幾個級別。
泛娛樂化直播的一般場景是一個網紅主播在上面給大家分享,粉絲們與網紅的主要溝通方式是通過聊天的方式。在這種場景下,直播平臺主需要保障網紅的視訊與聲音保持同步就可以了。粉絲對於網紅聲音、視訊的延遲不太關心,也就是說網紅從開口說話到粉絲收聽到網紅的聲音和視訊延遲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技術、影象處理等技術的加入會讓人們享受後更好的產品體驗。