国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Linux系統(tǒng)的H.264標(biāo)準(zhǔn)的實(shí)時(shí)視頻壓縮及傳輸系統(tǒng)設(shè)計(jì)

2015-12-02 21:01:24劉溶劍王趙璽
現(xiàn)代電子技術(shù) 2015年22期
關(guān)鍵詞:視頻流接收端編碼

劉溶劍+王趙璽

摘 要: 隨著計(jì)算機(jī)網(wǎng)絡(luò)媒體的迅猛發(fā)展,研究時(shí)視頻壓縮及傳輸技術(shù)具有十分重要的意義。首先建立基于Ubuntu Linux操作系統(tǒng)的H.264實(shí)時(shí)視頻壓縮及傳輸系統(tǒng),并詳細(xì)介紹該系統(tǒng)相關(guān)軟、硬件實(shí)現(xiàn)方法和系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)思想。然后通過(guò)實(shí)時(shí)視頻的采集和編碼模塊設(shè)計(jì)系統(tǒng),并采用系統(tǒng)的實(shí)現(xiàn)代碼具體實(shí)現(xiàn)系統(tǒng)的各個(gè)模塊。結(jié)果表明,使用該設(shè)計(jì)系統(tǒng)進(jìn)行傳輸,可以獲得較好的圖像質(zhì)量以及較低傳輸?shù)难訒r(shí),能滿足實(shí)時(shí)性應(yīng)用的需求。

關(guān)鍵詞: H.264; 視頻壓縮; 傳輸系統(tǒng); Ubuntu Linux

中圖分類號(hào): TN919?34; TP391.4 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)22?0078?02

近年來(lái),視頻壓縮技術(shù)和網(wǎng)絡(luò)傳輸技術(shù)發(fā)展迅速,實(shí)時(shí)視頻通信技術(shù)已漸漸進(jìn)入人們的生活。H.264視頻壓縮標(biāo)準(zhǔn)的日趨成熟,RTP 協(xié)議的出現(xiàn)進(jìn)一步推動(dòng)了視頻通信的發(fā)展,視頻壓縮技術(shù)和視頻通信技術(shù)一直是人們所關(guān)心的重要問(wèn)題,對(duì)原始的視頻數(shù)合理有效的壓縮和網(wǎng)絡(luò)傳輸中的擁塞控制始終是研究的熱點(diǎn)[1]。筆者通過(guò)對(duì)大量文獻(xiàn)資料的學(xué)習(xí)[2],對(duì)H.264視頻壓縮標(biāo)準(zhǔn),實(shí)時(shí)傳輸協(xié)議RTP/RTCP等相關(guān)知識(shí)梳理和研究,建立了一種基于Ubuntu Linux系統(tǒng)的H.264實(shí)時(shí)視頻壓縮及傳輸系統(tǒng)。

1 系統(tǒng)的的軟硬件環(huán)境及整體結(jié)構(gòu)

1.1 系統(tǒng)的軟、硬件環(huán)境

整個(gè)系統(tǒng)的設(shè)計(jì)目標(biāo)是完成通過(guò)經(jīng)路由器建立的局域網(wǎng),在兩臺(tái)加入相同多播組的計(jì)算機(jī)間,進(jìn)行實(shí)時(shí)視頻的壓縮及傳輸。在編解碼模塊使用的是基于開放源代碼的RTP庫(kù)——libccrtp設(shè)計(jì)的一種軟件。硬件方面,需要現(xiàn)在廣泛使用的PC機(jī)及一般的USB接口數(shù)碼攝像頭一個(gè),網(wǎng)絡(luò)連接方案如前所述,通過(guò)經(jīng)路由器建立的局域網(wǎng)。

選用的操作系統(tǒng)是Ubuntu 10.10。視頻的獲取通過(guò)Video4Linux2(簡(jiǎn)稱V4L2),是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng)。視頻編解碼部分使用的是VLC或Mplayer及Mencoder,VLC多媒體播放器(最初命名為VideoLAN客戶端)是VideoLAN計(jì)劃的多媒體播放器。視頻的傳輸部分使用的是開放源代碼的RTP庫(kù)——libccrtp,以及基于libccrtp而編寫的實(shí)時(shí)流媒體傳輸軟件。

1.2 系統(tǒng)的整體結(jié)構(gòu)

系統(tǒng)采用了客戶機(jī)/服務(wù)器設(shè)計(jì)模式,服務(wù)器端(發(fā)送端)采集發(fā)送視頻,客戶端(接收端)接收回放視頻,系統(tǒng)可分為5個(gè)功能模塊:視頻采集模塊、視頻編碼模塊、包處理模塊、網(wǎng)絡(luò)傳輸模塊和視頻解碼模塊,總體結(jié)構(gòu)如圖1所示。

2 系統(tǒng)各個(gè)模塊的具體實(shí)現(xiàn)

2.1 系統(tǒng)實(shí)時(shí)視頻采集及編碼模塊的設(shè)計(jì)

2.1.1 編碼器的選擇

與其他視頻壓縮技術(shù)相比,H.264的壓縮碼率能降低一半以下,但這種高效率的壓縮性能是以運(yùn)算復(fù)雜度為代價(jià)的,對(duì)機(jī)器的處理能力有很高要求[3]。因此需要根據(jù)實(shí)際需要選擇一個(gè)好的H.264編碼器,目前H.264的開源編碼器主要有三個(gè):JM,X264,T264。通過(guò)比較:T264(fast mode)、T264(high quality mode)的編碼性能和X264性能相比有一定劣勢(shì); X264的編碼速度也相當(dāng)快,完全可以達(dá)到實(shí)用的要求。本設(shè)計(jì)選用X264編碼器。

2.1.2 基于VLC的實(shí)時(shí)視頻采集及編碼

VLC是一款功能強(qiáng)大的視頻編碼及播放軟件,使用它對(duì)視頻流編碼的一般格式如下:

vlc input_stream ??sout

"#module1{option1=parameter1{parameter?option1},option2=parameter2}:module2{option1=...,option2=...}:..."

其中module表示各個(gè)模塊,本系統(tǒng)所使用的兩個(gè)模塊為transcode(編碼)模塊和std(標(biāo)準(zhǔn))模塊,將在下文中進(jìn)行介紹。

在Ubuntu系統(tǒng)下安裝了VLC并連接了攝像頭后在終端中運(yùn)行以下命令即可完成實(shí)時(shí)視頻的獲取及壓縮編碼:

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的實(shí)時(shí)視頻采集及編碼

整體代碼如下,功能依然是通過(guò)V4L2視頻設(shè)備內(nèi)核驅(qū)動(dòng),對(duì)設(shè)備文件/dev/video0及/dev/dsp進(jìn)行設(shè)置,進(jìn)而完成實(shí)時(shí)視頻的采集和編碼:

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 系統(tǒng)網(wǎng)絡(luò)傳輸模塊的設(shè)計(jì)

2.2.1 RTP封裝及傳輸前的準(zhǔn)備

在經(jīng)過(guò)編碼的實(shí)時(shí)視頻流進(jìn)行RTP封裝并進(jìn)入網(wǎng)絡(luò)傳輸之前,還有幾件事情需要完成。

首先,要更改工作目錄,以便后續(xù)命令的編寫和執(zhí)行。更改工作目錄只需一條簡(jiǎn)單Ubuntu的命令即可實(shí)現(xiàn),代碼如下:

cd myworks/trunk/build/Debug/bin;

其次,由于本系統(tǒng)采用組播技術(shù)作為IP網(wǎng)絡(luò)數(shù)據(jù)傳輸方式,故要將多播地址添加到傳輸方及接收方計(jì)算機(jī)的IP路由表當(dāng)中;

最后,還要先利用Mplayer測(cè)試編碼后的視頻流,然后方能調(diào)用相關(guān)程序進(jìn)行封裝及傳輸。如果經(jīng)過(guò)以上三步均未出現(xiàn)問(wèn)題,那么就可以進(jìn)入視頻流的封裝及網(wǎng)絡(luò)傳輸階段。

2.2.2 網(wǎng)絡(luò)傳輸模塊軟件libccrtp核心思想

本系統(tǒng)的傳輸模塊所用到的libccrtp軟件,是基于開放源代碼的RTP庫(kù)——libccrtp設(shè)計(jì)的,它的核心思想是在發(fā)送端完成編碼后實(shí)時(shí)視頻流的RTP封裝及接收端原始視頻流的恢復(fù),即在發(fā)送端軟件先對(duì)媒體類型進(jìn)行檢查,根據(jù)不同的媒體類型確定RTP數(shù)據(jù)包的負(fù)載類型以及RTP時(shí)間戳增量[4]。封裝好RTP數(shù)據(jù)分組后將數(shù)據(jù)進(jìn)行UDP發(fā)送[5];接收端在接收到RTP包后分析RTP包頭,判斷其版本、長(zhǎng)度和負(fù)載類型等信息的有效性,然后按照RTP時(shí)間戳和包序列號(hào)等進(jìn)行同步,整理RTP包順序,重構(gòu)視頻幀[6]。

2.2.3 系統(tǒng)發(fā)送端及接收端的軟件實(shí)現(xiàn)

發(fā)送端所要實(shí)現(xiàn)的目標(biāo)是通過(guò)libccrtp軟件實(shí)現(xiàn)已編碼實(shí)時(shí)視頻流的應(yīng)用層RTP封裝然后進(jìn)行UDP發(fā)送,實(shí)現(xiàn)代碼為:cat pipe|./rtpcat 224.0.1.2 5004。接收端根據(jù)RTP包頭信息重構(gòu)視頻幀,最后恢復(fù)出視頻流,代碼如下:

./rtprecv 224.0.1.2 5004 | mplayer ?cache 1024 ?

2.3 整個(gè)系統(tǒng)的實(shí)現(xiàn)代碼

整個(gè)系統(tǒng)使用Ubuntu Linux下的bash進(jìn)行編寫,編碼模塊以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 5004 | mplayer ?cache 1024 ?

3 結(jié) 語(yǔ)

實(shí)驗(yàn)結(jié)果表明,使用本設(shè)計(jì)系統(tǒng)進(jìn)行傳輸,不僅能夠獲得較好的圖像質(zhì)量以及較低傳輸?shù)难訒r(shí),同時(shí)也能夠滿足實(shí)時(shí)性應(yīng)用的需求。本系統(tǒng)具有硬件條件需求低,通用性強(qiáng)等優(yōu)點(diǎn),但還存在不足之處之處:由于傳輸模塊設(shè)計(jì)目標(biāo)僅為完成基本實(shí)時(shí)傳輸功能,故在系統(tǒng)傳輸?shù)膿砣?、差錯(cuò)控制方面沒(méi)有考慮的太多;本系統(tǒng)采用端到端的設(shè)計(jì),并沒(méi)有把多用戶的情況考慮進(jìn)去。因此,擁塞控制機(jī)制以增強(qiáng)接收端解碼視頻的質(zhì)量和多點(diǎn)傳輸?shù)目紤]及網(wǎng)絡(luò)拓?fù)涞闹С謱⑹沁M(jìn)一步的研究方向。

參考文獻(xiàn)

[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] 畢厚杰,王健.新一代視頻壓縮標(biāo)準(zhǔn):H.264/AVC[M].北京:人民郵電出版社,2009.

[4] 樓劍,虞露.新一代的視頻編解碼標(biāo)準(zhǔn):H.264[J].當(dāng)代通信,2003(5):27?31.

[5] 姜蓉蓉,周建江.基于TMS320DM355的MAV機(jī)載視頻傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電光與控制,2013,20(1):56?60.

[6] 胡鵬.嵌入式的網(wǎng)絡(luò)視頻傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2010(22):6321?6323.

猜你喜歡
視頻流接收端編碼
邊緣實(shí)時(shí)視頻流分析系統(tǒng)配置動(dòng)態(tài)調(diào)整算法研究
基于擾動(dòng)觀察法的光通信接收端優(yōu)化策略
基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
頂管接收端脫殼及混凝土澆筑關(guān)鍵技術(shù)
一種設(shè)置在密閉結(jié)構(gòu)中的無(wú)線電能傳輸系統(tǒng)
新能源科技(2021年6期)2021-04-02 22:43:34
基于多接收線圈的無(wú)線電能傳輸系統(tǒng)優(yōu)化研究
基于視頻流傳輸中的擁塞控制研究
《全元詩(shī)》未編碼疑難字考辨十五則
子帶編碼在圖像壓縮編碼中的應(yīng)用
電子制作(2019年22期)2020-01-14 03:16:24
Genome and healthcare
共和县| 永春县| 马关县| 南木林县| 枣强县| 马山县| 客服| 启东市| 南安市| 灵宝市| 广汉市| 台东县| 香港| 安义县| 隆林| 迭部县| 灵寿县| 安西县| 淳化县| 永胜县| 泰和县| 巴林右旗| 永宁县| 宜城市| 泗洪县| 宁南县| 额尔古纳市| 荃湾区| 浦北县| 大洼县| 漯河市| 梁河县| 安义县| 东方市| 镇原县| 竹北市| 新闻| 扎赉特旗| 大城县| 甘德县| 仁寿县|