喬 莉, 李 博, 舒行科, 孟祥飛
(1.中北大學(xué) 儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,太原 030051;2.中國電子科技集團(tuán)公司第三十三研究所,太原 030006)
在大數(shù)據(jù)信息時(shí)代,隨著視頻技術(shù)的發(fā)展和應(yīng)用,海量的視頻信息深入到我們的工作和生活的方方面面中。隨著高清(HD)、超高清(UHD)、3D和多視點(diǎn)(Multi-View)視頻的普及,海量的視頻所攜帶的數(shù)據(jù)量越來越龐大,例如,分辨率為1920×1080的高清視頻,幀率為每秒30幀,若3個(gè)色彩分量每個(gè)像素值用8個(gè)bit數(shù)來表示,則每一秒的視頻數(shù)據(jù)量為1920×1080×30×3×8≈1493 Mbit,這么大的數(shù)據(jù)量造成傳輸網(wǎng)絡(luò)難以承受[1]。針對(duì)海量視頻數(shù)據(jù)的在線實(shí)時(shí)傳輸,需要有高效的視頻編碼方法來解決這一問題。
2013年由國際電信組織(International Telecommunication Union,IUT)和運(yùn)動(dòng)圖像專家組(Moving Picture Exp*erts Group,MPEG)聯(lián)合成立的JCT-VC(Joint Collaborative Team-Video Coding)組織提出的新一代高效視頻編碼標(biāo)準(zhǔn)(High Efficiency Video Coding,HEVC)[2]。HEVC使用基于四叉樹的塊劃分,對(duì)幀內(nèi)的35種模式預(yù)測(cè),樣本自適應(yīng)偏移,基于離散余弦變換的插值運(yùn)動(dòng)補(bǔ)償濾波器和高級(jí)運(yùn)動(dòng)矢量預(yù)測(cè)。最新的視頻編碼技術(shù)HEVC提高了編碼效率,比上一代H.264/AVC在同樣的編碼質(zhì)量下,碼率能夠節(jié)約50%以上[3-5]。高壓縮比、低碼率和特有的并行處理設(shè)計(jì)等優(yōu)點(diǎn),使得HEVC快速在各類視頻業(yè)務(wù)中獲得廣泛應(yīng)用。
系統(tǒng)以TMS320C6678 DSP開發(fā)板為硬件實(shí)現(xiàn)平臺(tái),選用TI的高性能數(shù)字信號(hào)處理器TMS320C6678芯片作為實(shí)現(xiàn)HEVC編碼器的核心CPU。TMS320C6678主要特點(diǎn):①處理器架構(gòu)先進(jìn),基于TI Keystone的多核定點(diǎn)/浮點(diǎn)數(shù)字信號(hào)處理器,DSP集成了C66x CorePac,集成了8個(gè)C66x核;②運(yùn)算能力強(qiáng),每個(gè)核心主頻1 GHz/1.25 GHz,1 GHz定點(diǎn)性能為32 GMAC/core,1 GHz浮點(diǎn)性能為16 GFLOP/core,單核可高達(dá)40GMACS和20GFLOPS,每核心32 KB L1P、32 KB L1D、512 KB L2,4 MB多核共享內(nèi)存,8 192個(gè)多用途硬件隊(duì)列,支持DMA傳輸,具有多核共享存儲(chǔ)器控制器(MSMC);③網(wǎng)絡(luò)性能優(yōu)越:支持雙千兆網(wǎng)口,帶有由1個(gè)數(shù)據(jù)包加速器和1個(gè)安全加速器組成的網(wǎng)絡(luò)協(xié)處理器;④拓展資源豐富:支持PCIe、SRIO、HyperLink16等多種高速接口,同時(shí)支持I2C、SPI、UART等常見接口等。用于高壓縮視頻的HEVC編解碼、實(shí)時(shí)傳輸提供了很好的硬件平臺(tái)[6-7]。
TI提供了面向TMS320C6678的視頻處理開發(fā)包Multicore Video Software Development Kit (MCSDK-Video),開發(fā)包支持多種格式的優(yōu)化編解碼的快速開發(fā),如表1所示[8]。系統(tǒng)在TMS320C6678 DSP開發(fā)板硬件平臺(tái)上,引入新一代視頻編碼標(biāo)準(zhǔn)HEVC對(duì)視頻進(jìn)行實(shí)時(shí)壓縮,可以獲得更高壓縮比。
系統(tǒng)選用相機(jī)為千兆網(wǎng)相機(jī),可設(shè)置輸出1920×1080@(30-60)f/s的實(shí)時(shí)圖像數(shù)據(jù),輸出的圖像經(jīng)千兆網(wǎng)口傳入臺(tái)式工作機(jī)。臺(tái)式工作機(jī)作為HOST主機(jī),將傳入的圖像經(jīng)PCIE接口傳給DSP板,對(duì)圖像進(jìn)行實(shí)時(shí)的編碼,編碼后的碼流通過DSP板的網(wǎng)口傳至筆記本電腦端VLC HEVC進(jìn)行實(shí)時(shí)的解碼顯示。系統(tǒng)在該平臺(tái)上實(shí)現(xiàn)1920×1080@30 f/s的HEVC編碼實(shí)時(shí)網(wǎng)絡(luò)傳輸,實(shí)時(shí)將編碼后的碼流通過網(wǎng)口發(fā)送到上位機(jī)進(jìn)行解碼顯示。HEVC編碼后的UDP數(shù)據(jù)包通過以太網(wǎng)傳輸?shù)焦P記本終端上使用VLC HEVC軟件接收和解碼。VLC HEVC軟件采用硬件加速,可實(shí)現(xiàn)1080p30幀/s的實(shí)時(shí)解碼顯示。高清視頻HEVC編碼實(shí)時(shí)傳輸系統(tǒng)如下圖1所示,千兆網(wǎng)相機(jī)、HOST臺(tái)式主機(jī)、TMS320C6678 DSP開發(fā)板、筆記本終端VLC HEVC軟件實(shí)時(shí)顯示之間通過以太網(wǎng)相連。
表1TMS320C6678的視頻處理開發(fā)包支持多種格式的優(yōu)化編解碼
Codec SupportVideo codecsJPEG 2000, AVC-Intra 50/100, H.265/HEVC, H.264 10-bit 4:2:2, H.263, MPEG-4, MPEG-2 4:2:2, JPEG, VC1, SVC, Sorenson Spark encoders and decodersAudio codecsAAC, AACv2, AC3, MP3, WMA8, WMA9 encoders and decodersVoice codecsG.711, G.718, G.722, G.722.1, G.723, G.726, G.728, G.729AB, G.729G, GSM-ARM w/EFR, GSM-FR, EVRC-B, WBAMR
圖1 高壓縮視頻HEVC實(shí)時(shí)傳輸系統(tǒng)
1.2.1HEVC視頻編碼
視頻可以編碼是因?yàn)橐曨l存在多種冗余,主要有空間冗余、時(shí)間冗余、編碼冗余和主觀冗余等,如表2所示。由于視頻的冗余,使得視頻有很大的編碼空間和可能性,可以通過多種編碼框架中的多種編碼模塊,實(shí)現(xiàn)高壓縮比。
表2 視頻冗余的種類及定義
HEVC視頻編碼標(biāo)準(zhǔn)采用圖編碼框架,基于塊的混合編碼框架,如圖2所示,包括變化、量化、熵編碼、幀內(nèi)預(yù)測(cè)、幀間預(yù)測(cè)、環(huán)路濾波等模塊,每個(gè)模塊中都引入了新的編碼技術(shù)。HEVC視頻編碼有兩個(gè)顯著特點(diǎn):一是提高壓縮效率,在相同的視覺質(zhì)量下,HEVC視頻編碼的比特率為H.264/AVC的1/2,但是相應(yīng)地其計(jì)算的復(fù)雜度提高了2~10倍;二是增強(qiáng)其對(duì)并行處理機(jī)制的支持,在計(jì)算復(fù)雜度提高的情況下仍然能夠做到快速實(shí)時(shí)處理。
圖2 HEVC視頻標(biāo)準(zhǔn)編碼框架
最新的視頻編碼壓縮標(biāo)準(zhǔn)HEVC視頻編碼,支持高分辨率視頻序列,比以前的標(biāo)準(zhǔn)H.264/AVC編碼具有更好的性能。HEVC視頻編碼基于一個(gè)四叉樹編碼器,一個(gè)樹的編碼單元(通常為64×64)可以拆分成更小的。HEVC幀內(nèi)預(yù)測(cè)的兩個(gè)重要特點(diǎn):一個(gè)是5層幀內(nèi)預(yù)測(cè)塊類型(包括Intra4×4、Intra8×8、Intra16×16、Intra32×32、Intra64×64)等5種大小的PU,另一個(gè)特點(diǎn)是其中每一種大小的PU都對(duì)應(yīng)35種預(yù)測(cè)模式,包括Planar模式、DC模式和33種角度模式[9-12],來提高編碼效率。
1.2.2CCSV5.5
系統(tǒng)軟件設(shè)計(jì)是在Windows下的以CCS V5.5為軟件實(shí)現(xiàn)平臺(tái)。CCS V5.5軟件比目前常用的視頻處理Linux系統(tǒng)更加方便簡(jiǎn)潔。Linux系統(tǒng)的程序源代碼專業(yè)性強(qiáng),更改、設(shè)計(jì)、移植復(fù)雜困難。
打開CCS V5.5軟件,新建一個(gè)工程:File->New->CCS Project(Project->New CCS Project);設(shè)置工程名稱project name如“High Definition Video HEVC Encoding_test”,Device選擇開發(fā)芯片對(duì)應(yīng)的型號(hào)C6678,Advanced Setting用來設(shè)置開發(fā)條件設(shè)備大下端、編譯器版本、包含的link文件及包含庫等,一般情況下默認(rèn)即可,如果需要使用SYS/BIOS則選擇Empty RTSC Project否則選擇Empty Project。如果選擇Empty Project,點(diǎn)擊finish即可,此工程建立完成;如果選擇Empty RTSC Project,則點(diǎn)擊next。最后配置BIOS,選擇需要使用的模塊庫,根據(jù)開發(fā)板芯片型號(hào)選擇合適的目標(biāo)類別,選擇合適的Platform及編譯版本,點(diǎn)擊finish即可完成新建工程的建立。
1.2.3x265算法C6678DSP移植
x265是符合HEVC標(biāo)準(zhǔn)的視頻壓縮編碼的開源自由軟件及函數(shù)庫,是現(xiàn)有實(shí)現(xiàn)HEVC標(biāo)準(zhǔn)的性能優(yōu)異的編碼器。系統(tǒng)使用x265進(jìn)行視頻編碼,x265算法移植在DSP C6678上的實(shí)現(xiàn)視頻實(shí)時(shí)編碼[13-14]。
編碼器參數(shù)設(shè)置:cliopt.parse(argc,argv)的主要功能是分析參數(shù),直接調(diào)用x265.cpp中的bool CLIOptions::parse(int argc, char**argv)函數(shù),該函數(shù)會(huì)打印輸入視頻的分辨率、幀率、視頻格式、所要編碼的幀數(shù)目以及輸出文件名稱等
cliopt.api->param_free(cliopt.param);
x265_param*param = cliopt.param;
const x265_api*api = cliopt.api;
cliopt.output->setParam(param);
打開編碼器配置:x265_encoder*encoder = api->encoder_open(param);
獲取編碼器參數(shù):api->encoder_parameters(encoder, param);
編碼一幀圖像:int numEncoded = api->encoder_encode(encoder, &p_nal, &nal, pic_in, pic_recon);
關(guān)閉編碼器:api->encoder_close(encoder);
釋放參數(shù):api->param_free(param);
1.2.4以太網(wǎng)絡(luò)傳輸
HEVC分成視頻編碼層VCL和網(wǎng)絡(luò)適配層NAL兩層。VCL是視頻編碼處理,NAL處理編碼后的數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)。NAL上的數(shù)據(jù)流由一個(gè)一個(gè)的NALU(NAL單元)構(gòu)成,NALU中的數(shù)據(jù)部分需要整字節(jié)化(因?yàn)閿?shù)據(jù)可能不足整數(shù)個(gè)字節(jié)),即在真實(shí)的數(shù)據(jù)后面添加一個(gè)比特1(稱為停止比特),如果不足整數(shù)個(gè)字節(jié),那么需要補(bǔ)充比特0,這些總稱為RBSP數(shù)據(jù)(真實(shí)數(shù)據(jù)+比特1+若干比特0)。
NALU在網(wǎng)上傳輸時(shí)先生成字節(jié)流的過程如下:①在每個(gè)NALU前面插入3字節(jié)的起始碼start_code_prefix_one_3bytes,其值為0x000001;②如果NALU的類型為:VPS_NUT,SPS_NUT,PPS_NUT或者解碼順序?yàn)橐粋€(gè)AU的第一個(gè)NALU,則在其起始碼前再插入一個(gè)zero_byte,值為0x00;③在視頻首個(gè)NALU的起始碼(可能包含zero_byte)前插入leading_zero_8bits,值是0x00;④根據(jù)需要可在每個(gè)NALU后增加trailing_zero_8 bits,值是0x00,作為填充數(shù)據(jù)。之后生成分組流使用RTP、RTMP等協(xié)議,把NALU直接作為網(wǎng)絡(luò)分組的有效載荷進(jìn)行傳輸。
TMS320C6678 DSP開發(fā)板將HEVC編碼視頻實(shí)時(shí)通過以太網(wǎng)傳輸給筆記本終端VLC HEVC軟件實(shí)時(shí)顯示,高清視頻以太網(wǎng)傳輸過程中圖像如圖3所示。
(a) 視頻采集到的圖像
圖3 高清視頻以太網(wǎng)傳輸中圖像
1 s視頻圖像文件的數(shù)據(jù)量計(jì)算公式(不壓縮):數(shù)據(jù)量 = 圖像分辨率(像素)×彩色深度(位)×幀率/(8×1 024×1 024)
視頻碼率的計(jì)算公式:[視頻碼率](Kb/s)=[文件大小](KB)×8/[時(shí)間](s)
參考文獻(xiàn)[15]和參考文獻(xiàn)[16]設(shè)計(jì)了一種采用CCD攝像頭、TMS320DM6467 DSP開發(fā)板、RTP協(xié)議、PC機(jī)VLC播放器等設(shè)計(jì)的使用H.264視頻編碼實(shí)時(shí)傳輸系統(tǒng),視頻壓縮比大于150倍,滿足視頻監(jiān)控需求。本文高清視頻HEVC編碼實(shí)時(shí)傳輸系統(tǒng),實(shí)驗(yàn)視頻采集時(shí)間為3 min,視頻的分辨率為1920×1080,幀率為30 f/s,彩色深度為8位,沒有經(jīng)過壓縮的視頻數(shù)據(jù)量為10 678.7 MB。在編碼完成的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸時(shí),設(shè)置輸出碼率為10 Mb/s,得到壓縮后的視頻數(shù)據(jù)量?jī)H為35 MB,壓縮比為305.1,比傳統(tǒng)的H.264視頻編碼大大提高了視頻壓縮率。
高清視頻HEVC編碼實(shí)時(shí)傳輸系統(tǒng)以千兆網(wǎng)相機(jī)、TMS320C6678 DSP開發(fā)板等將高清視頻實(shí)時(shí)編碼并通過以太網(wǎng)傳輸。實(shí)驗(yàn)結(jié)果表明:新一代視頻編碼HEVC全新的編碼方式,在相同的視頻質(zhì)量基準(zhǔn)下,視頻容量減少大約39%~74%,有效提升了視頻壓縮率,與傳統(tǒng)的H.264視頻編碼相比,僅用原先的一半帶寬即可播放相同質(zhì)量的視頻,而且還能獲得更好的信噪比(PSNR)效果,實(shí)時(shí)性高。系統(tǒng)的搭建、開發(fā)靈活便捷,可根據(jù)具體需要更改碼率獲得不同壓縮率的視頻,在高清視頻會(huì)議、高清視頻傳輸?shù)阮I(lǐng)域具有廣闊的發(fā)展應(yīng)用前景。