摘要:隨著移動互聯網的興起,直播作為一種新型的互聯網交流方式近年來迅速發展,在娛樂,電動競技,教育,安防等領域有著廣泛應用。自媒體利用網絡直播技術,更是對傳統媒體有著具體沖擊。本文深入分析網絡視頻直播中“連麥”技術,并給出一些解決方案及其實現。
關鍵詞:直播;連麥技術;研究;實現
1.視頻直播和連麥簡介
1.1.視頻直播
視頻直播分為主播和觀眾,可以有一個或幾個主播對應多個觀眾。主播通過錄屏工具(一般為手機或個人電腦攝像頭),錄取聲音和視頻,然后及時的發送到觀眾的客戶端上,客戶端為手機或電腦。我們主要考慮移動設備(手機)上直播的實現方案。直播性能上主要有以下要求:
(1)音視頻的清晰程度:例如音頻采樣率和視頻壓縮率,分辨率。手機上音頻采樣率要達到16000以上,視頻達到720P高清格式;音視頻數據量比較大,主播端需要編碼壓縮,一般使用h264編碼,對應的客戶端則需要解碼操作。
(2)信息的實時性:主播端音視頻需要實時傳送到觀眾段,時延要低,這個主要靠網絡傳輸和服務器性能保證。
音視頻編碼和解碼技術上有硬件和軟件2種實現方案,硬件方案是利用手機上的特殊硬件來執行編解碼,目前手機一般都有編解碼硬件,這種方式性能高且開發方便;軟件方案則是利用第三方的軟件編解碼庫,例如ffmpeg來實現,其效率低下而且容易影響手機性能,引起卡頓,作為直播方案不太合適。
一旦編碼完成,主播端則需要利用網絡將數據幀發送到視頻服務器(主播推流),服務器將數據轉發給客戶端(觀眾拉流),客戶端解碼后顯示并播放聲音。
由于視頻流受網絡影響比較大,通常采用CDN加速的方式,即主播推流到視屏服務器,服務器將視頻同步分發到各個地區的CDN子服務器,觀眾端選擇最近的CDN服務器拉流,以減少網絡時間消耗。對于網絡傳播協議方面,常見的直播協議有幾個:RTMP、HLS、HDL(HTTP-FLV)、RTP等。
(1)RTMP:屬于Adobe專有協議,基于TCP,整個協議比較復雜,現在大部分CDN已不支持。\
(2)HDL(HTTP-FLV):使用HTTP協議流式的傳輸媒體內容,相比RTMP,沒有專利保護,而且由于基于HTTP,協議比較簡單。
(3)HLS:由蘋果公司提出,也是使用HTTP傳輸。但是將視頻流分割成時間等長的小段,客戶端每次讀取小段播放,優點在于如果視頻不太連續,客戶端可以選擇跳過某些小段。是目前主流的直播協議。
(4)RTP:基于udp的傳輸層協議,需要rtcp作為信令協議結合使用。此協議最為靈活,定制性最高,只是目前CDN沒有直接支持的。
1.2.連麥簡介
“連麥”是視頻直播中的一個比較有趣的擴展功能,是指同時可以有多個觀眾加入到主播中,觀眾端同時也作為主播端,觀眾端不僅僅拉流,自己也同時推流。但最終展示的只有一路數據流,所以這多路數據流需要做一個“合并”操作,例如主流合并方法主播端是主畫面,但是在右下角開出幾個小窗口,每個小窗口對應一個觀眾端流。可以看到,雖然連麥功能擴展不多,對技術上改變卻很大,普通觀眾端增了推流功能,多路流的合并功能,這些需求在簡單直播服務中是無法提供的,我們就連麥技術的實現做了一些分析,提出幾個解決方案實現。
2.連麥的技術實現
2.1.服務器多推流多拉流實現
服務器多推流多拉流方式對傳統方式做了擴充,連麥用戶請求連麥并通過后,和主播用戶一樣,也推流到服務器,這樣服務器需要接受連麥用戶和主播2個推流,所有其它用戶需要接受這2個推流,并且在客戶端做解碼,然后將2路視頻流按需求定義混合,例如前面說的多個視頻窗口功能,就是將主播視頻流在主窗口顯示,連麥用戶視頻在小窗口顯示,音頻流也需疊加混音處理。
這種實現方式適合多主播多用戶互動,系統復雜度與耦合性較低,便于擴展。服務器端由于不需要混音、混屏,其壓力較低 主要實現集中于服務器端,一個主播需要推送多個流,其帶寬占用比較大。對于觀眾端,連麥主觀眾和主播的媒體流時間上同步難度比較大,由于網絡原因,2路流不能做實時同步,這樣在觀眾端混合視頻的時候要考慮到其時間戳,如果相差太大則需要采用某些策略,例如丟棄某路流。
2.2.服務器多推流單拉流實現
服務器多推流單拉流實現方式和服務器多推流多拉流實現方式相類似,也是多個連麥用戶和主播同時向服務器推流,不同的是在服務器做混流操作,多路媒體流推送到服務器,服務器端完成多路音視頻的合并,觀眾端和傳統方式相比沒有變化,收到的只是一路流。這也是目前主流連麥技術采用的辦法,很多CDN服務商實現了此功能,對客戶端來說改變比較簡單。此方式操作簡單,但限制也比較多,難點部分放到服務器,服務器不僅僅要推拉流的網絡操作,還要實時對推流混碼合并,計算量很大,會有比較大的壓力。
2.3.P2P技術實現
P2P是peer to peer簡稱,也就是點對點通信,指客戶端之間直接通信,不需要通過服務器中轉。在直播中特指音視頻數據流在客戶端直接交互,這和傳統的直播方式差別比較大。P2P技術具體通過端口轉發實現,此功能需要網關支持。
實現步驟:連麥用戶向視頻服務器發送連麥請求,服務器通知主播,主播接受后,雙方通過服務器交換對方的網絡信息(公網IP地址,端口號),雙方以P2P方式嘗試直接聯接對方的公網IP地扯(如果失敗還需通過服務器轉發,保證直播能完成,但此時已屬于P2P范圍),然后主播和連麥用戶將自己編碼后的流以UDP發送所有其它用戶,同時所有用戶接受到其它用戶流媒體后解碼渲染到界面。
“點對點”的特點,除了在信令交互(連麥申請/接受)階段需要視頻服務器介入,連接一旦建立,就不需要服務器了。但是也顯然增加了各個客戶端的負擔,假設主播1人,連麥者2人,觀眾3人,主播端和連麥端都需要接受2輸入流,同時輸出5路流。對于手機而言,這是一個不小的負擔。所以P2P方式只能適合人數比較少的直播。另外由于媒體流協議采用rtp/自定義的UDP協議,開發難度也比較大,但是其時延和服務器壓力是最小的。
3.結束語
本文探討了直播的連麥技術,介紹了幾種連麥功能的實現方案,這些方案各有利弊,具體操作時需要結合其它客觀條件因地制宜的實施。
參考文獻:
[1]張春元、文梅..流計算和視頻編碼.?科學出版社,2012
[2]哈渭濤..流媒體中關鍵技術研究.?科學出版社,2019
[3]蔡康..P2P對等網絡原理與應用.?科學出版社,2011
作者簡介:閆新惠(1974-),女,漢,山東省泰安市人,講師,碩士,主要研究方向為計算機網絡技術。