劉溶劍+王趙璽
摘 要: 隨著計算機網絡媒體的迅猛發展,研究時視頻壓縮及傳輸技術具有十分重要的意義。首先建立基于Ubuntu Linux操作系統的H.264實時視頻壓縮及傳輸系統,并詳細介紹該系統相關軟、硬件實現方法和系統結構的設計思想。然后通過實時視頻的采集和編碼模塊設計系統,并采用系統的實現代碼具體實現系統的各個模塊。結果表明,使用該設計系統進行傳輸,可以獲得較好的圖像質量以及較低傳輸的延時,能滿足實時性應用的需求。
關鍵詞: H.264; 視頻壓縮; 傳輸系統; Ubuntu Linux
中圖分類號: TN919?34; TP391.4 文獻標識碼: A 文章編號: 1004?373X(2015)22?0078?02
近年來,視頻壓縮技術和網絡傳輸技術發展迅速,實時視頻通信技術已漸漸進入人們的生活。H.264視頻壓縮標準的日趨成熟,RTP 協議的出現進一步推動了視頻通信的發展,視頻壓縮技術和視頻通信技術一直是人們所關心的重要問題,對原始的視頻數合理有效的壓縮和網絡傳輸中的擁塞控制始終是研究的熱點[1]。筆者通過對大量文獻資料的學習[2],對H.264視頻壓縮標準,實時傳輸協議RTP/RTCP等相關知識梳理和研究,建立了一種基于Ubuntu Linux系統的H.264實時視頻壓縮及傳輸系統。
1 系統的的軟硬件環境及整體結構
1.1 系統的軟、硬件環境
整個系統的設計目標是完成通過經路由器建立的局域網,在兩臺加入相同多播組的計算機間,進行實時視頻的壓縮及傳輸。在編解碼模塊使用的是基于開放源代碼的RTP庫——libccrtp設計的一種軟件。硬件方面,需要現在廣泛使用的PC機及一般的USB接口數碼攝像頭一個,網絡連接方案如前所述,通過經路由器建立的局域網。
選用的操作系統是Ubuntu 10.10。視頻的獲取通過Video4Linux2(簡稱V4L2),是Linux中關于視頻設備的內核驅動。視頻編解碼部分使用的是VLC或Mplayer及Mencoder,VLC多媒體播放器(最初命名為VideoLAN客戶端)是VideoLAN計劃的多媒體播放器。視頻的傳輸部分使用的是開放源代碼的RTP庫——libccrtp,以及基于libccrtp而編寫的實時流媒體傳輸軟件。
1.2 系統的整體結構
系統采用了客戶機/服務器設計模式,服務器端(發送端)采集發送視頻,客戶端(接收端)接收回放視頻,系統可分為5個功能模塊:視頻采集模塊、視頻編碼模塊、包處理模塊、網絡傳輸模塊和視頻解碼模塊,總體結構如圖1所示。
2 系統各個模塊的具體實現
2.1 系統實時視頻采集及編碼模塊的設計
2.1.1 編碼器的選擇
與其他視頻壓縮技術相比,H.264的壓縮碼率能降低一半以下,但這種高效率的壓縮性能是以運算復雜度為代價的,對機器的處理能力有很高要求[3]。因此需要根據實際需要選擇一個好的H.264編碼器,目前H.264的開源編碼器主要有三個:JM,X264,T264。通過比較:T264(fast mode)、T264(high quality mode)的編碼性能和X264性能相比有一定劣勢; X264的編碼速度也相當快,完全可以達到實用的要求。本設計選用X264編碼器。
2.1.2 基于VLC的實時視頻采集及編碼
VLC是一款功能強大的視頻編碼及播放軟件,使用它對視頻流編碼的一般格式如下:
vlc input_stream ??sout
"#module1{option1=parameter1{parameter?option1},option2=parameter2}:module2{option1=...,option2=...}:..."
其中module表示各個模塊,本系統所使用的兩個模塊為transcode(編碼)模塊和std(標準)模塊,將在下文中進行介紹。
在Ubuntu系統下安裝了VLC并連接了攝像頭后在終端中運行以下命令即可完成實時視頻的獲取及壓縮編碼:
vlc ?vvv v4l2:// :v4l2?vdev="/dev/video0" :v4l2?adev="/dev/dsp " :v4l2?norm=3 :v4l2?frequency=?1 ??run?time 600 ??sout
′#transcode{vcodec=h264,vb=300,scale=1,acodec=mpga,ab=128,channels=2}:std{access=file,mux=ts,dst=pipe}′
2.1.3 基于mencoder的實時視頻采集及編碼
整體代碼如下,功能依然是通過V4L2視頻設備內核驅動,對設備文件/dev/video0及/dev/dsp進行設置,進而完成實時視頻的采集和編碼:
tv:// ?tv driver=v4l2:width=320:height=240:device=/dev/video0:forceaudio:adevice=/dev/dsp ?ovc x264 ?x264encopts bitrate=300 ?oac mp3lame ?lameopts cbr:br=64:mode=3 ?o pipe
2.2 系統網絡傳輸模塊的設計
2.2.1 RTP封裝及傳輸前的準備
在經過編碼的實時視頻流進行RTP封裝并進入網絡傳輸之前,還有幾件事情需要完成。
首先,要更改工作目錄,以便后續命令的編寫和執行。更改工作目錄只需一條簡單Ubuntu的命令即可實現,代碼如下:
cd myworks/trunk/build/Debug/bin;
其次,由于本系統采用組播技術作為IP網絡數據傳輸方式,故要將多播地址添加到傳輸方及接收方計算機的IP路由表當中;
最后,還要先利用Mplayer測試編碼后的視頻流,然后方能調用相關程序進行封裝及傳輸。如果經過以上三步均未出現問題,那么就可以進入視頻流的封裝及網絡傳輸階段。
2.2.2 網絡傳輸模塊軟件libccrtp核心思想
本系統的傳輸模塊所用到的libccrtp軟件,是基于開放源代碼的RTP庫——libccrtp設計的,它的核心思想是在發送端完成編碼后實時視頻流的RTP封裝及接收端原始視頻流的恢復,即在發送端軟件先對媒體類型進行檢查,根據不同的媒體類型確定RTP數據包的負載類型以及RTP時間戳增量[4]。封裝好RTP數據分組后將數據進行UDP發送[5];接收端在接收到RTP包后分析RTP包頭,判斷其版本、長度和負載類型等信息的有效性,然后按照RTP時間戳和包序列號等進行同步,整理RTP包順序,重構視頻幀[6]。
2.2.3 系統發送端及接收端的軟件實現
發送端所要實現的目標是通過libccrtp軟件實現已編碼實時視頻流的應用層RTP封裝然后進行UDP發送,實現代碼為:cat pipe|./rtpcat 224.0.1.2 5004。接收端根據RTP包頭信息重構視頻幀,最后恢復出視頻流,代碼如下:
./rtprecv 224.0.1.2
2.3 整個系統的實現代碼
整個系統使用Ubuntu Linux下的bash進行編寫,編碼模塊以VLC為例,代碼如下:
sender:
$ cd myworks/trunk/build/Debug/bin
$ mkfifo pipe
$ sudo route add ?net 224.0.0.0 netmask 240.0.0.0 dev eth0
$ vlc ?vvv v4l2:// :v4l2?vdev="/dev/video0" :v4l2?adev="/dev/dsp " :v4l2?norm=3 :v4l2?frequency=?1 ??run?time 600 ??sout ′#transcode{vcodec=h264,vb=300,scale=1,acodec=mpga,ab=128,channels=2}:std{access=file,mux=ts,dst=pipe}′
$ mplayer ?cache 1024 pipe
$ cat pipe | ./rtpcat 224.0.1.2 5004
receiver:
$ cd myworks/trunk/build/Debug/bin
$ sudo route add ?net 224.0.0.0 netmask 240.0.0.0 dev eth0
$./rtprecv 224.0.1.2
3 結 語
實驗結果表明,使用本設計系統進行傳輸,不僅能夠獲得較好的圖像質量以及較低傳輸的延時,同時也能夠滿足實時性應用的需求。本系統具有硬件條件需求低,通用性強等優點,但還存在不足之處之處:由于傳輸模塊設計目標僅為完成基本實時傳輸功能,故在系統傳輸的擁塞、差錯控制方面沒有考慮的太多;本系統采用端到端的設計,并沒有把多用戶的情況考慮進去。因此,擁塞控制機制以增強接收端解碼視頻的質量和多點傳輸的考慮及網絡拓撲的支持將是進一步的研究方向。
參考文獻
[1] Joint Video Team (JVT). H.264/MPEG?4 AVC reference software manual [R]. London: ISO/IEC, 2005.
[2] WIEGAND T. Overview of the H.264/AVC video coding standard [J]. IEEE Transactions on Circuits and System for Video Technology, 2003, 13(7): 560?576.
[3] 畢厚杰,王健.新一代視頻壓縮標準:H.264/AVC[M].北京:人民郵電出版社,2009.
[4] 樓劍,虞露.新一代的視頻編解碼標準:H.264[J].當代通信,2003(5):27?31.
[5] 姜蓉蓉,周建江.基于TMS320DM355的MAV機載視頻傳輸系統的設計與實現[J].電光與控制,2013,20(1):56?60.
[6] 胡鵬.嵌入式的網絡視頻傳輸系統的設計與實現[J].電腦知識與技術,2010(22):6321?6323.