文 /胡景文 劉芮汐 周小明 宗巍陽 劉專 焦敏
視頻直播技術是實現通過設備采集音視頻信息,壓縮轉碼后傳送到服務器,然后客戶端通過解碼來重現音視頻信息這一過程的技術。視頻直播技術目前廣泛應用于工作、娛樂中,在教育教學領域的應用發展前景尤為值得關注。在教育領域,遠程教學、教學信息化這樣的字眼隨著新技術更新正不斷豐富。網絡實時交互同步教學,在利用現代先進通訊技術打破教育教學的地域與時間限制、緩解教育資源分布不均,縮小教育差距上發揮了有力作用。
目前,國內出現了許多在線課堂教育平臺,不過他們大多都只是分享課程的課件和已經錄制好的課程視頻,而在教學過程中和老師進行互動才能更好地幫助學生集中精力、理解知識,從而提高學習效率。為了能更好地滿足視頻直播技術在教育以及其他方面的需求,進一步提高視頻直播的性能就成為了一個重要的研究問題。
目前各大在線教學平臺均使用IPv4作為其網絡傳輸協議。IPv4網絡設計于20世紀70年代后期,互聯網已經經歷了多年的發展,IPv4的地址已經消耗殆盡。基于IPv6網絡傳輸數據與基于IPv4相比具有很多優點,因此將進行基于IPv6的視頻直播性能分析與優化。
所有視頻直播的過程都有異曲同工之妙。首先,視頻采集設備將景物通過鏡頭投射到圖像傳感器上,轉化為模電信號,然后經過A/D轉換,通過數字信號芯片的處理,從與計算機連接的端口(如USB接口)傳遞到計算機里,音頻設備的采集與上述過程類似。接下來,對原始的視頻和音頻數據進行壓縮和編碼,使之體積在很大程度上變小,然后按照指定的協議格式進行打包,通過網絡連接傳輸到流媒體服務器端。最后,客戶端通過解碼從服務器收到的數據還原視頻和音頻。[1]

圖1 Red5流媒體工作原理
RTMP協議作為一種應用層協議,它的設計目的是解決多媒體數據流的多路復用以及其他問題。利用RTMP協議傳輸數據時,首先建立基于傳輸層協議的鏈路,然后客戶端和服務器被要求通過基于傳輸層鏈接“握手”建立鏈接,并在其上傳輸一些控制信息。存在相關命令創建一個流鏈接來傳輸音頻視頻數據以及控制該數據傳輸的命令信息。RTMP協議傳輸數據時自己將數據進行格式化得到的數據我們稱之為消息。傳輸時, 消息被發送端分成帶有不同標記的塊,每個塊可能是一個單獨完整的消息,或是消息的一部分。接收端通過塊中的數據長度、標記和消息的長度將塊還原成完整的消息。這就是信息收發的過程。[2]類似于數據包的容器,數據可以是AMF格式或FLV格式的音視頻數據,RTMP保持與終端的永久連接,允許實時通信。[3]
Red5流媒體服務器的主要功能與Flash Media Server差不多。它不僅提供基于Flash的流媒體服務,使用RTMP作為流媒體傳輸協議,而且與FMS完全兼容,支持了視頻直播應用。Red5支持直播的功能如下,它能夠流化FLV、MP3文件,實時地錄制客戶端流并將其轉化為FLV文件,發布現場直播流。因為Red5是一種免費的開源服務器,與Flash Media Server相比具有可替代性,所以在Flash視頻網站、Flash直播系統、視頻會議系統等領域有著廣泛應用。HTTP通信服務、rtmp通信服務也是Red5的一部分。Red5提供的rtmp通訊服務幫助實現了直播應用。其架構主要由Jetty6、Mina和Spring組成。它們分別負責HTTP的部分通信和Java Servelet的承載調度,RTMP協議的通信和實現,兩部分的有機結合和相關調度。

圖2 基于IPv6和IPv4直播課堂系統實現
接下來,以我們實現的一個支持IPv6及IPv4的直播課堂Web系統為例對視頻直播技術進行說明。
1.系統功能
該Web系統功能主要分為兩部分:教師端的功能實現,包括就教師登錄、教師個人中心,教師開課申請,教師開始直播,課程即時反饋,課程作業及公告發布等,另一部分是學生端的主要功能實現,包括登錄及個人中心、搜索課程,申請聽課,進入聽課,作業提交以及發表評論等功能。系統實現主要基于Java和jsp兩門語言,對于學生或者老師的請求,通過jsp提交到后臺服務器,服務器根據數據庫的和請求計算出結果反饋給客戶端,客戶端獲取信息后再顯示在界面上,完成動態信息獲取的目的。
2.視頻、音頻采集轉碼與推流的實現
直播編碼的實現:
ActionScript采用Sorenson Spark 或 On2 VP6 編解碼器編碼的FLV文件。On2 VP6視頻編解碼器比之前使用的帶寬少,并且提供了額外的馬賽克消除濾鏡和色度去環濾鏡。
VP6編碼器的基本原理,將很大的原始視頻編碼成很小的視頻文件,其核心就是去掉視頻文件中的冗余信息。
VP6主要采用了H.264標準,其編碼過程包含以下幾點:
(1) 幀內預測編碼
幀內編碼主要用于減少圖片的空間冗余,在給定幀中盡可能地利用相鄰宏塊的空間相關性。
(2) 幀間預測編碼
幀間預測編碼通過連續幀中的時間冗余來進行運動估計和補償。
(3) 整數變換
(4) 量化
(5) 熵編碼
ActionScript中提供了NetStream類來進行播放FLV文件的流,并提供了類VP6VideoStreamSettings,可以為每一個NetSteam設置指定視頻壓縮設置,來實現直播編碼的實現。
服務器推流及客戶端接受的實現:
在推流方面使用了ActionScript來處理RTMP流,ActionScript中有已經封裝好的流文件和現成的接口函數,可以用于直接調用。

圖3 視頻、音頻采集轉碼與推流的實現

圖4 Vp6編解碼器
ActionScript中進行客戶端推送RTMP:
(1)先建立網絡連接,客戶端連接上流媒體服務器
nc = new NetConnection()
nc.connect(“rtmp://[流媒體服務器的IPv6地址]:1935/live”)
(2)建立網絡流
ns = new NetStream(nc)
(3)添加攝像頭與音頻
ns.attachCamera(cam) // 添加攝像頭 , 可以關于cam進行參數設置
ns.attachAudio(mic) // 添加音頻 , 可以關于mic 進行參數設置
(4)網絡流的上傳
ns.publish(“直播間名”, ”live”)
Actionscript中進行客戶端視頻播放:
(1) 先建立網絡連接,客戶端連接上流媒體服務器
nc = new NetConnection()
nc.connect(“rtmp://[流媒體服務器的IPv6地址]:1935/live”)
(2) 建立網絡流
ns = new NetStream(nc)
(3) 播放網絡流
ns.play(“想要觀看的直播間名”) // 即可進行觀看
3.IPv6網絡的支持
配置IPv6環境的流媒體服務器,選取了centos系統和nginx服務器來進行配置。
關于IPv6環境的配置,對于校園網服務器的IPv6的DNS服務器已經配置好,不用再配置、對于非校園網的服務器,則需要先配置IPv6的隧道,然后再在服務器上配置路由。
關于流媒體服務器的搭建,檢查nginx服務器的IPv6模塊是否配置,如果沒有配置,則需要安裝IPv6模塊。
然后配置流媒體服務器,對nginx服務器安裝rtmp module,并在配置文件中進行以下部署,配置app:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
max_connections 1024;
}
application hls{
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 1s;
}
}
}
以上配置同時包含了rtmp直播協議和hls直播協議,使流媒體服務器同時支持兩者。
通過上述步驟,我們最終能完成視頻直播應用的搭建。
視頻直播的過程包括獲取音視頻數據,用Vp6編碼器編碼,然后推送rtmp流到Red5流媒體服務器,客戶端接收流并用Vp6解碼,還原音視頻信息。在不同的環節都有其對應的優化策略,針對數據傳輸和數據編碼的環節進行優化。
從網絡傳輸方面來看,IPv6網絡具有諸多優點。IPv6與IPv4在流媒體應用方面進行比較,IPv6有以下幾方面的優越性:
1.地址容量的問題得以解決,優化了地址結構,一定程度上適應了流媒體通信大信息傳輸的需要。
2.關于服務質量,它能根據緊急程度和服務類別提供各類多媒體信息的數據包優先級信息。
3.組播功能增強,很多流媒體應用都因其有了發展機會。4.采用必選的IPSec,很好地保證了網絡安全。
目前,IPv6協議的基本框架已經成熟,并且不斷地被推廣。支持IPv6網絡,并將其用于數據傳輸,不僅提升了安全性能,并且在一定程度上保證了信息傳輸,優化了性能。[5]
從表1中可以看出,基于IPv6網絡進行傳輸的延時在obs推流和網頁flash推流的情況下均比基于IPv4網絡的要低,性能更優。IPv6的數據包在同IPv4的數據包有著很大不同,其在首部新添加一個8位的業務流類別和一個20位的流標記。而將業務流類別和流標記應用在多媒體的實時應用中,將會大大提升多媒體應用的服務質量,同時也大大降低其延遲。IPv6進行業務優先級處理。其優先級可以分為兩類:一是用于起始節點對其提供的擁塞控制的信息傳輸,二是用于在發生擁堵時不退讓的信息傳輸。其具體應用在多媒體流的傳播上,可以通過在起始節點給多媒體流分配高的優先級,讓其得到優先處理,使得多媒體流傳播速度得到提升。同一數據流的會被標記,由于流是一個從特定起始點到一個特定目的地的分組序列,這些序列在傳播過程中會經過許多路由器,同時需要這些路由器對其進行特殊處理。在IPv6環境下,起始點可以對流分配一個流標記,在經過節點路由器的時候,路由器可以通過對流標記去記住對應的處理步驟,同時對在由對流標記的跟蹤,直接對后面的標記有該流標記的數據分組實現直接轉發,從而實現數據流后續分組的快速交換,節省了時間,同時提升了服務質量。[6]

表1 IPv4與IPv6的性能對比
Vp6編解碼器使用H.264視頻編碼標準,它使用高效和準確的運動估計預測方法。H.264繼承了H.263和MPEG1/2/4視頻編碼協議的優點,保留了變換編碼技術和運動補償,并在此基礎上增加了DCT整數變換,CAVLC,CABAC等新技術,讓編碼算法的壓縮效率和圖像回放質量在很大程度上得以提高。[7]基于靈活分割宏塊的運動矢量估計、多幀預測、幀內預測編碼模式等多種技術特點決定了H.264編碼效率的高效及Vp6編解碼器的高效。
目前已經有很多學者對編解碼技術的優化提出了很多具體的優化措施,現僅以具體事例來簡單分析基于IPv6的直播技術及在傳統模型上的優化。對于直播技術而言,IPv6網絡和編解碼技術都同等重要。IPv6網絡在安全和穩定傳輸方面提供了保障,高性能的編碼技術保證了視頻流盡可能小且保證了音視頻的質量。IPv6網絡的充分利用和更加高效的編解碼技術在未來會被更加重視。