閆 軍,代豐羽,王紹雷
(中國(guó)電子科技集團(tuán)公司第三十四研究所,廣西 桂林 541004)
近年來隨著視頻技術(shù)、網(wǎng)絡(luò)技術(shù)以及終端處理技術(shù)的不斷發(fā)展,人們對(duì)多媒體業(yè)務(wù)的需求呈現(xiàn)日益增長(zhǎng)的趨勢(shì),據(jù)調(diào)查顯示,目前網(wǎng)絡(luò)視頻數(shù)據(jù)量占據(jù)了整個(gè)互聯(lián)網(wǎng)流量的90%,其中高清視頻正在逐漸成為未來應(yīng)用和發(fā)展的重點(diǎn)[1-3]。然而,在不斷提升視頻質(zhì)量的同時(shí)也導(dǎo)致圖像數(shù)據(jù)量呈現(xiàn)幾何式的增長(zhǎng),這也使得視頻編解碼技術(shù)成為目前多媒體研究領(lǐng)域的熱門技術(shù)之一。
目前,傳統(tǒng)的視頻編解碼器由于性能的限制并不具備高清視頻數(shù)據(jù)的處理能力[4,5],HI3531A是海思半導(dǎo)體針對(duì)多路D1和高清DVR、NVR產(chǎn)品應(yīng)用開發(fā)推出的一款專業(yè)高端SOC芯片,具有高集成、高性能、多協(xié)議編解碼和專用網(wǎng)絡(luò)加速等優(yōu)點(diǎn),可輕松應(yīng)對(duì)越來越高的高清應(yīng)用和網(wǎng)絡(luò)需求[6,7]。本文基于HI3531A芯片,結(jié)合H264視頻壓縮技術(shù)、嵌入式技術(shù)和網(wǎng)絡(luò)技術(shù),提出了網(wǎng)絡(luò)高清視頻編解碼系統(tǒng)的設(shè)計(jì)方案。
高清視頻編解碼器同時(shí)具備編碼、解碼、傳輸、存儲(chǔ)等功能,圖1為該高清視頻編解碼器的硬件組成框圖。
圖1 高清視頻編解碼器硬件組成框圖
各個(gè)模塊的功能如表1所示。
表1 硬件模塊功能表
編碼模塊的設(shè)計(jì)需要調(diào)用海思媒體處理函數(shù)庫(kù)和Linux系統(tǒng)函數(shù),完成編碼器視頻輸入、編碼、網(wǎng)絡(luò)傳輸、本地回顯等功能,軟件設(shè)計(jì)的流程如圖2所示。
圖2 編碼器軟件設(shè)計(jì)流程圖
在該處理流程中視頻信號(hào)由輸入設(shè)備(VI)接收進(jìn)入輸入通道,輸入通道與視頻前處理單元(VPSS)的通道組連接,在VPSS通道組中對(duì)視頻信號(hào)進(jìn)行去噪、縮放、銳化等統(tǒng)一預(yù)處理,形成多種不同分辨率的圖像輸出。輸出的圖像信號(hào)分別輸送到兩個(gè)方向:
一是經(jīng)過輸出(VO)通道傳輸給輸出設(shè)備進(jìn)行本地回顯;二是經(jīng)過編碼(VENC)通道進(jìn)入編碼器進(jìn)行視頻編碼,如圖3所示。
編碼模塊的軟件設(shè)計(jì)中涉及到三個(gè)關(guān)鍵線程,編碼線程、數(shù)據(jù)發(fā)送線程和存儲(chǔ)線程。其中,編碼線程由碼率控制器和編碼器協(xié)同完成圖像信號(hào)到碼流的轉(zhuǎn)換;數(shù)據(jù)發(fā)送線程對(duì)碼流數(shù)據(jù)進(jìn)行IP包封裝(TCP/UDP數(shù)據(jù)包)和傳輸,采用嵌入式系統(tǒng)自帶的socket套接字完成;存儲(chǔ)線程完成碼流數(shù)據(jù)的本地存儲(chǔ),可以按照自定義存儲(chǔ)協(xié)議執(zhí)行。三個(gè)線程之間相互協(xié)作,利用各自的緩存片區(qū)來完成整個(gè)編碼、傳輸、存儲(chǔ)過程,具體的流程如圖4所示。
圖3 視頻信號(hào)處理過程
圖4 編碼器三線程協(xié)作圖
解碼模塊同樣由三個(gè)線程組成:一個(gè)主線程和兩個(gè)子線程。主線程完成解碼程序環(huán)境參數(shù)的配置并對(duì)整個(gè)解碼過程進(jìn)行控制;子線程1負(fù)責(zé)從網(wǎng)絡(luò)中接收碼流數(shù)據(jù)包;子線程2負(fù)責(zé)對(duì)碼流數(shù)據(jù)包進(jìn)行解碼并將解碼后的數(shù)據(jù)發(fā)送給輸出設(shè)備。
在解碼器的設(shè)計(jì)過程中采用“流式發(fā)送”的方式,每次將任意長(zhǎng)度的碼流發(fā)送給解碼器,由解碼器內(nèi)部完成一幀碼流的識(shí)別過程,這樣可以降低因?yàn)椴粔蛞粠霈F(xiàn)解碼錯(cuò)誤的概率,從而加快解碼的速度,提高解碼的正確性。此外,本設(shè)計(jì)還將解碼過程和網(wǎng)絡(luò)接收功能獨(dú)立開來,采用雙線程處理的方式來避免碼流數(shù)據(jù)的激增造成數(shù)據(jù)大量溢出,從而導(dǎo)致解碼后圖像質(zhì)量下降的情況。
網(wǎng)絡(luò)接收線程與視頻解碼線程之間采用環(huán)形緩存區(qū)的方式進(jìn)行數(shù)據(jù)的交換。在環(huán)形緩存區(qū)中又分成若干個(gè)鏈表隊(duì)列,每個(gè)隊(duì)列可以存放數(shù)幀圖像數(shù)據(jù),該環(huán)形緩存區(qū)對(duì)數(shù)據(jù)交換的執(zhí)行算法如下所述。
定義1.環(huán)形緩存區(qū)由鏈表數(shù)量、鏈表項(xiàng)、出鏈、入鏈組成,可表示為一個(gè)四元組:Z=(n,list,ar,aw),其中l(wèi)ist=(id,len,mem)是鏈表項(xiàng)list的編號(hào)id,緩存數(shù)據(jù)長(zhǎng)度len(len≤maximum)和緩存數(shù)據(jù)值mem,ar=(id,ex)是出鏈ar的編號(hào)id和動(dòng)作ex,aw=(id,len)是入鏈aw的編號(hào)id和長(zhǎng)度len。
定義2.如果環(huán)形緩存區(qū)Z的出鏈編號(hào)ar(id)等于入鏈編號(hào)aw(id),則出鏈動(dòng)作ar(ex)停止,否則繼續(xù),即
Z:ar(id)=aw(id)→ar(ex)=false
ar(id)≠aw(id)→ar(ex)=true
定義3.如果出入鏈ar/aw的當(dāng)前編號(hào)id等于list(n),則出入鏈的下一編號(hào)為list(1)。
圖5 環(huán)形緩存數(shù)據(jù)交換圖
假設(shè)當(dāng)前環(huán)形緩存區(qū)在鏈表j,當(dāng)前數(shù)據(jù)項(xiàng)為data(len,buf),其中l(wèi)en為數(shù)據(jù)長(zhǎng)度,buf為數(shù)據(jù)緩存,則入鏈的執(zhí)行過程如下:
init:aw(id)=j
aw(len)=0
whiletrue
ifaw(len)+data(len)≤maximum
copydata(buf)tolistj(mem)
aw(len)=aw(len)+data(len)
else
listj(len)=aw(len)
break
endif
假設(shè)當(dāng)前環(huán)形緩存區(qū)在鏈表i,每次拷貝到網(wǎng)絡(luò)包packet中的長(zhǎng)度為length,則出鏈的執(zhí)行過程如下:
init:ar(id)=i
ifaw(ex)=true
whiletrue
iflisti(len)>0
copylistj(mem)topacket
listj(len) =listj(len)-length
else
break
endif
為了測(cè)試編解碼器的有效性、可靠性和實(shí)時(shí)性,首先搭建了視頻編解碼器的工作環(huán)境,通過設(shè)置配置文件中的各種運(yùn)行參數(shù),來測(cè)試在不同應(yīng)用環(huán)境中編解碼器的性能。本設(shè)計(jì)選取分辨率為1920*1080、1280*720的圖像,以VGA和SDI作為輸入,解碼輸出選取VGA和HDMI接口。
其次,為了測(cè)試存儲(chǔ)日志的質(zhì)量,系統(tǒng)還移植了FTP和WEB服務(wù)器,利用VLC進(jìn)行遠(yuǎn)程播放。通過設(shè)置配置文件的的輸出地址和網(wǎng)絡(luò)協(xié)議,可以將編碼后的碼流傳輸給上位機(jī),在PC端利用VLC播放軟件直接進(jìn)行解碼輸出。
為增加測(cè)試用例的難度,VGA輸入接口的測(cè)試視頻選取了運(yùn)動(dòng)性很強(qiáng)且背景復(fù)雜的MTV,測(cè)試結(jié)果如表2所示。
表2 測(cè)試結(jié)果
測(cè)試結(jié)果表明,該高清視頻編解碼器針對(duì)不同的場(chǎng)景,能夠保證畫面清晰流暢,實(shí)時(shí)性能良好,延遲在預(yù)定的范圍內(nèi)。
本文提出了一種網(wǎng)絡(luò)高清視頻編解碼解決方案,能夠?qū)?080p/720p等高清分辨率的視頻進(jìn)行采集、編解碼、存儲(chǔ)、傳輸和播放,其具有實(shí)時(shí)性好,清晰度高,延遲低等優(yōu)點(diǎn),目前該設(shè)計(jì)方案已被應(yīng)用到某設(shè)備的視頻編解碼存儲(chǔ)矩陣中,運(yùn)行效果良好。下一步希望能夠在此基礎(chǔ)上對(duì)視頻流進(jìn)行實(shí)時(shí)分析和遠(yuǎn)程傳輸,實(shí)現(xiàn)智能監(jiān)控和遠(yuǎn)程播放的功能。