劉文亮,夏克文,華 中
(1.河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300130;2.天津鉑創(chuàng)國(guó)茂電子科技發(fā)展有限公司,天津 300384)
?
基于Linphone的海思H.264硬件編碼器移植
劉文亮1,夏克文1,華中2
(1.河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300130;2.天津鉑創(chuàng)國(guó)茂電子科技發(fā)展有限公司,天津 300384)
為了縮短H.264編碼時(shí)間、提高H.264編碼效率,提出基于AndroidLinphone的Hi3716MV400H.264硬件編碼器移植。對(duì)硬件編碼器的移植方法進(jìn)行詳細(xì)說明,包括搭建Linphone開發(fā)環(huán)境、添加Hi3716MV400H.264硬件編碼庫(kù)、編寫H.264硬件編碼函數(shù)。經(jīng)程序測(cè)試,移植了海思H.264硬件編碼器的Linphone能夠在Hi3716MV400機(jī)頂盒進(jìn)行正常的視頻通信,并且減少CPU資源占用,降低Linphone視頻通話死機(jī)頻率。
Hi3716MV400;H.264硬件編碼器;AndroidLinphone
隨著智能手機(jī)與智能機(jī)頂盒等終端設(shè)備的普及,VoIP(VoiceoverInternetProtocol)技術(shù)研發(fā)的產(chǎn)品得到了越來越多用戶的青睞,如何使視頻通話更流暢、更清晰也成為各芯片廠商和軟件開發(fā)公司研究的焦點(diǎn)[1]。Android是2007年谷歌開發(fā)的一款基于Linux平臺(tái)的開放操作系統(tǒng),其開發(fā)的第三方軟件完全免費(fèi),由于搭載Android系統(tǒng)的智能手機(jī)和平板設(shè)備占有的大量用戶市場(chǎng)[2],因此,Android應(yīng)用的開發(fā)在市場(chǎng)的份額越來越大,研究在Android平臺(tái)上的VoIP技術(shù)具有很大應(yīng)用價(jià)值[3]。Linphone就是一款基于Android開發(fā)的VoIP軟件,能夠進(jìn)行H.264視頻編解碼,但是Linphone的H.264軟件編碼器占用較多CPU資源,存在視頻畫面顯示卡頓、不流暢以及死機(jī)問題,本文采用華為海思Hi3716MV400機(jī)頂盒作為硬件平臺(tái),移植Hi3716MV400硬件H.264編碼器到AndroidLinphone,提高了H.264編碼速率,減少了處理器資源的占用,取得了較好的效果。
海思Hi3716芯片方案是由國(guó)產(chǎn)品牌海思自主研發(fā)的一種芯片方案,具體型號(hào)有三種,分別是Hi3716M、Hi3716H以及Hi3716C,本文采用的就是搭載在銀河安卓高清機(jī)頂盒的Hi3716MV400芯片。該芯片采用ARM公司的CortexA9架構(gòu)處理器,主頻率800MHz,浮點(diǎn)運(yùn)算速率達(dá)到1 500MI/s,集成高性能GPU,支持OpenGLES2.0/1.1/1.0OpenVG1.1,內(nèi)置NEON,高速處理能力可以滿足未來業(yè)務(wù)需求[4-5],集成高性能2D/3D加速引擎,可為客戶提供流暢的人機(jī)交互界面和豐富游戲體驗(yàn)。支持MPEG2/H.264/AVS+/VP6/VP8等多種格式的高清視頻解碼和H.264編碼,可以滿足多媒體播放、轉(zhuǎn)碼、可視通信的要求。內(nèi)置2路以太網(wǎng)和2路USB接口,提供靈活的連接方案。
Hi3716MV400機(jī)頂盒使用12V直流電壓供電,1GbyteDDR3內(nèi)存,1GbyteNANDFlash,提供10組GPIO接口,提供單個(gè)LED和KeyPAD控制接口,單個(gè)IR接收處理器,外擴(kuò)單路USB口用于高清攝像頭數(shù)據(jù)傳入,提供RS-232調(diào)試串口用于程序的燒寫、打印信息的輸出與命令調(diào)試,最大支持100MbitRJ-45網(wǎng)口數(shù)據(jù)傳輸[6]。為圖像輸出提供高清晰度多媒體接口HDMI,模擬視頻接口支持1路CVBS接口、1路YPrPb接口,輸出接口可以選擇配置,提供LineOut接口輸出到音頻設(shè)備,提供高頻頭。機(jī)頂盒系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 基于ARM的無線嵌入式Web服務(wù)器系統(tǒng)結(jié)構(gòu)圖
Linphone為開發(fā)人員提供了Android版本的源碼,生成apk需要使用NDK工具,以及Androidsdk和相關(guān)的adt插件、apt安裝工具。統(tǒng)計(jì)所需工具包如表1所示。
表1Linphone開發(fā)工具包
工具列表工具包文件安裝方式NDK工具android-ndk-r9-linux-x86_64.tar.bz2解壓使用AndroidLinuxSDKandroid-sdk_r21.1-linux.tgz解壓使用AndroidLinux開發(fā)插件包adt-bundle-linux-x86-20130219.zip解壓使用autoconfautoconf.debapt-getinstallautomakeautomake.debapt-getinstalllibtoollibtool.debapt-getinstallpkg-configpkg-config.debapt-getinstallant1.8ant1.8.debapt-getinstall
在64位Ubuntu10.04系統(tǒng)安裝了上述源碼包之后,解壓Linphone源碼包、進(jìn)入Linphone的主目錄,輸入如下命令編譯Linphone:
#makeBUILD_X264=1BUILD_AMRNB=0BUILD_AMRWB=0BUILD_GPLV3_ZRTP=0BUILD_SILK=0BUILD_G729=1BUILD_TUNNEL=0BUILD_WEBRTC_AECM=1USE_JAVAH=1BUILD_FOR_X86=0
“BUILD_X264=1”添加視頻X264編碼的支持;“BUILD_G729=1”添加對(duì)音頻G729編碼的支持,“BUILD_WEBRTC_AECM=1”編譯回音消除,“BUILD_FOR_X86=0”不編譯X86架構(gòu)的liblinphone庫(kù)。“BUILD_AMRNB=0”與“BUILD_AMRWB=0”表示不編譯amrnb和amrwb編譯碼器。
編譯完成后會(huì)在linphone的bin目錄下生成linphone-debug.apk文件,通過adbinstall命令將apk安裝到Hi3716MV400Android機(jī)頂盒,按照向?qū)渲猛曩~號(hào)、音視頻參數(shù)即可使用Linphone。
3.1Linphone視頻數(shù)據(jù)處理
可視電話軟件Linphone支持多種平臺(tái)(Android,iOS,WindowsPhone8,Linux),支持H.264,VP8,MPEG-4視頻軟件編解碼,為用戶開發(fā)提供API函數(shù)。Linphone主要依賴的3個(gè)軟件開發(fā)包均支持用戶的二次開發(fā):Mediastreamer2,處理音視頻流的SDK,是音視頻工作的引擎,具有音視頻編碼,聲卡資源訪問,視頻捕獲與顯示,回聲消除的功能。oRTP,支持RTP以及RFC3550協(xié)議的C語(yǔ)言開發(fā)庫(kù),為基于RTP協(xié)議傳輸語(yǔ)音和視頻數(shù)據(jù)提供保障。belle-sip,是Linphone的新版belleSIP協(xié)議棧,純C語(yǔ)言編寫的SIP(RFC3261)實(shí)現(xiàn),belle-sip提供面向?qū)ο蟮慕涌诤瘮?shù),是一種在UDP、TCP、TLS等網(wǎng)絡(luò)層上層的用戶代理[7]。
以Mediastreamer2為核心開發(fā)的Linphone,其各種操作都是通過MSFilter(多個(gè)MSFilter組成Graph)實(shí)現(xiàn)的,Mediastreamer2的總體邏輯關(guān)系非常簡(jiǎn)單,它利用函數(shù)指針將若干MSFilter組合起來,通過線程來調(diào)度這些MSFilter上的函數(shù)指針[8]。圖2就是由Linphone工作時(shí)視頻MSFilter之間數(shù)據(jù)傳遞的模塊圖。其中source用來獲得來自攝像頭的視頻數(shù)據(jù);pixconv用來處理視頻格式;tee用于分流,一部分到output直接顯示(當(dāng)前視頻預(yù)覽功能),另一部分輸出后通過編碼與rtp發(fā)送,被另一端Linphone接收并顯示。其中視頻encoderMSFilter主要有H.264、MPEG4和VP8三種。
圖2 MSFilter組成模塊圖
Linphone的video_stream_start函數(shù)詳細(xì)實(shí)現(xiàn)了圖2所示的Graph,并描述了各個(gè)MSFilter之間的關(guān)系。另外,video_stream_start函數(shù)通過檢測(cè)視頻流的VideoStreamRecvOnly標(biāo)志,判斷是否組建接受視頻流數(shù)據(jù)的Graph,該Graph主要包括:decoderMSFilter,rtprecvMSFilter,displayMSFilter,pixconvMSFilter。video_stream_start是在Linphone打電話時(shí)后臺(tái)調(diào)用視頻流線程開始執(zhí)行,同樣音頻流也有相應(yīng)的Graph,具體實(shí)現(xiàn)在audio_stream_start函數(shù),通過調(diào)用音頻流線程開始數(shù)據(jù)傳遞。
3.2Linphone H.264 MSFilter
Linphone的H.264軟件編碼MSFilter源碼在msx264.c文件,H.264MSFilter的編寫同樣符合Mediastreamer2擴(kuò)展開發(fā)標(biāo)準(zhǔn),主要由兩部分構(gòu)成,即編碼結(jié)構(gòu)體EncData和編碼函數(shù)x264_enc_desc。EncData存放H.264軟件編碼的相關(guān)屬性操作,編碼函數(shù)包括enc_init,enc_preprocess,enc_process等等。EncData結(jié)構(gòu)體成員參數(shù)需要使用enc_init()初始化。EncData結(jié)構(gòu)體成員及其功能如表2所示。
表2EncData結(jié)構(gòu)體成員
結(jié)構(gòu)體成員參數(shù)功能x264_t*encx264_param_tparamsH.264編碼器句柄H.264編碼器的屬性參數(shù)vsize;bitrate;fps;mode;Rfc3984Contex*packer;keyframe_intVideoStarterstartergenerate_keyframe分辨率,比特率,幀率,編碼模式rfc3984協(xié)議包容器關(guān)鍵幀數(shù)目關(guān)鍵幀時(shí)間記錄關(guān)鍵幀標(biāo)志
初始化完成后運(yùn)行H.264的軟件編碼預(yù)處理函數(shù)enc_preprocess()和處理函數(shù)enc_process(),兩者分別完成如下功能:
enc_preprocess(),H.264編碼的預(yù)處理函數(shù),新建一個(gè)rfc3984容器包,rfc3984_set_mode()設(shè)置當(dāng)前包的模式為0,rfc3984_enable_stap_a()設(shè)置當(dāng)前包為非單時(shí)間聚合包。創(chuàng)建x264_param_t指針變量params,初始化該編碼參數(shù),調(diào)用apply_bitrate()并將params各參數(shù)應(yīng)用到H.264編碼器,使用x264_encoder_open()打開該編碼器。
enc_process(),通過while循環(huán),利用ms_queue_get()不斷從MSFilter的input緩沖隊(duì)列中獲取視頻的幀圖像數(shù)據(jù),執(zhí)行ms_yuv_buf_init_from_mblk()將接受的數(shù)據(jù)轉(zhuǎn)換成yuv格式,再將yuv格式數(shù)據(jù)轉(zhuǎn)化為x264_picture_t,準(zhǔn)備在發(fā)送初始幀數(shù)據(jù)2s或者4s之后發(fā)送I幀,x264_encoder_encode()將輸入的x264_picture_t型數(shù)據(jù)轉(zhuǎn)碼成x264_nal_t型編碼數(shù)據(jù),x264_nals_to_msgb()將視頻數(shù)據(jù)依次放入到mblk_t類型變量的隊(duì)列中,使用rfc3984_pack()對(duì)編碼后的數(shù)據(jù)進(jìn)行RTP打包傳給rtpsendMSFilter。
4.1sample_venc程序的改進(jìn)
Hi3716MV400的H.264硬件編碼模塊為VENC(VideoEncoder),VENC模塊對(duì)接收前端模塊或客戶發(fā)送的視頻、圖形數(shù)據(jù),通過做幀率控制、碼率控制、幀間預(yù)測(cè)、幀內(nèi)預(yù)測(cè)、變換、量化等協(xié)議/算法處理,按照客戶需求的輸出幀率、目標(biāo)碼率、分辨率等生成碼流返回給客戶使用。
VENC視頻數(shù)據(jù)推送支持綁定模式和外部用戶送幀模式,其中綁定模式需要前級(jí)模塊(VI)自動(dòng)將待編碼數(shù)據(jù)送入VENC,而外部用戶送幀模式需要用戶態(tài)線程一直給VENC送幀編碼,用戶需要自行循環(huán)調(diào)用HI_UNF_VENC_QueueFrame()和HI_UNF_VENC_DequeueFrame()來給編碼器送幀并回收編碼完成的幀數(shù)據(jù),保存或者網(wǎng)絡(luò)傳輸。
VENC例程sample_venc采用用戶送幀模式讀取yuv文件,進(jìn)行H.264硬件轉(zhuǎn)碼之后保存成.h264文件。但在可視電話實(shí)時(shí)H.264編碼中,需要不斷地從已經(jīng)分配好的內(nèi)存空間讀取yuv數(shù)據(jù),進(jìn)行H.264硬件轉(zhuǎn)碼之后將轉(zhuǎn)碼后的數(shù)據(jù)保存在一段分配了空間的內(nèi)存區(qū)域以便其他函數(shù)對(duì)編碼后的數(shù)據(jù)進(jìn)行處理,于是修改sample_venc.c的源程序,編寫函數(shù)HI_S32venc(HI_U8*yuv,nal_s*nal)。程序流程圖如圖3所示。
執(zhí)行函數(shù)HI_SYS_Init()對(duì)模塊進(jìn)行初始化,通過HI_UNF_VENC_GetDefaultAttr()獲取編碼通道默認(rèn)屬性stVeAttr,設(shè)置stVeAttr的各個(gè)成員變量,包括編碼協(xié)議類型、編碼輸出寬度和高度、輸入幀率、目標(biāo)碼率和目標(biāo)幀率、圖像組長(zhǎng)度,根據(jù)HI_ADP_VENC_Create
圖3venc程序流程圖
(stVeAttr)創(chuàng)建VENC通道,執(zhí)行HI_ADP_VENC_Start()開始硬件轉(zhuǎn)碼,新建線程SampleSendFrameRoutine讀取數(shù)據(jù)并進(jìn)行硬件轉(zhuǎn)碼,新建線程SampleVencRoutine獲取硬件編碼后的數(shù)據(jù)。最后等待兩個(gè)線程的結(jié)束與執(zhí)行系統(tǒng)去初始化操作。
線程SampleVencRoutine的說明:使用HI_UNF_VENC_AcquireStream()獲取視頻編碼碼流,將碼流數(shù)據(jù)保存在pArgs→out_nal→nal_data開始的pArgs→out_nal→nals_size長(zhǎng)空間中,然后使用HI_UNF_VENC_ReleaseStream()釋放視頻編碼碼流。
線程SampleSendFrameRoutine的說明:為變量u32TmpData分配空間用于保存輸入硬件編碼器的數(shù)據(jù),通過stFrameinfo設(shè)置幀信息屬性參數(shù),將u32TmpData與stFrameinfo的stVideoFrameAddr成員關(guān)聯(lián),將輸入的視頻幀數(shù)據(jù)從YUV422格式轉(zhuǎn)換為YUV420格式,通過HI_UNF_VENC_QueueFrame()向編碼器送幀,HI_UNF_VENC_DequeueFrame()向編碼器索取還幀,完成整個(gè)H.264硬件編碼的流程。
海思H.264硬件編碼函數(shù)為HI_S32venc(HI_U8*yuv,nal_s*nal),輸入?yún)?shù)為HI_U8*yuv,輸出參數(shù)為HI_U8*nal,函數(shù)返回值類型為HI_S32,其中yuv為YUV420P數(shù)據(jù),分別保存在AVFrame類型變量的data[0]、data[1]和data[2]中,nal_s結(jié)構(gòu)體聲明如下:
typedefstruct_nal_s{
HI_U8*nal_data;//naldata
HI_S32nal_num;//everynalnum
HI_S32nals_size;//nalstotal
}nal_s;
其中,nal_data為進(jìn)行H.264硬件編碼后存儲(chǔ)數(shù)據(jù)的首地址,nal_num為nals的個(gè)數(shù),nals_size為H.264硬件編碼后數(shù)據(jù)總量。
4.2硬件編碼模塊venc使用
Linphone的H.264軟件編碼函數(shù)為msx264.c文件的x264_encoder_encode(),因此可以直接將其替換為函數(shù)venc()。在enc_process()中利用avcodec_get_frame_defaults()獲取幀數(shù)據(jù)到pict(AVFrame類型),通過avpicture_fill()填充數(shù)據(jù),將x264_encoder_encode()替換為硬件編碼函數(shù)venc(),修改x264_nals_to_msgb()函數(shù),計(jì)算轉(zhuǎn)碼后的H.264數(shù)據(jù)nals個(gè)數(shù),跳過nals頭起始碼“00 00 00 01”或者“00 00 01”,將有效的幀數(shù)據(jù)通過ms_queue_put()放到MSFilter的隊(duì)列中,之后依次通過SETBITRATEMSFilter和ADDFMTPMSFilter進(jìn)行數(shù)據(jù)傳遞。
x264_nals_to_msgb未修改之前的格式如下:
staticvoidx264_nals_to_msgb(x264_nal_t*xnals,intnum_nals,MSQueue*nalus)
xnals用于存儲(chǔ)H.264編碼后的數(shù)據(jù),num_nals表示nals的個(gè)數(shù),nalus用于MSQueue隊(duì)列傳遞數(shù)據(jù)。
修改之后的x264_nals_to_msgb函數(shù)如下:
staticvoidx264_nals_to_msgb(nal_s*xnals,MSQueue*nalus)
xnals同樣用于存儲(chǔ)H.264編碼后的數(shù)據(jù),同時(shí)存儲(chǔ)nals的個(gè)數(shù)和數(shù)據(jù)總量,nalus用于MSQueue隊(duì)別傳遞數(shù)據(jù)。但是函數(shù)的具體實(shí)現(xiàn)發(fā)生改變。由于在實(shí)際的H.264數(shù)據(jù)幀中往往幀前帶有00 00 00 01分隔符,所以程序首先檢測(cè)00 00 00 01標(biāo)志字,移動(dòng)m→b_wptr指針跳過四位標(biāo)志字,直接指向H.264幀數(shù)據(jù),最后通過ms_queue_put將數(shù)據(jù)放到nalus。實(shí)際上修改后的x264_nals_to_msgb()函數(shù)將能夠自動(dòng)計(jì)算nals的個(gè)數(shù)。
4.3Linphone添加venc模塊支持
若使Linphone能夠支持Hi3716MV400SDK的開發(fā)例程sample_venc以及改進(jìn)的編碼函數(shù)venc,需要將sample_venc依賴的頭文件和庫(kù)文件分別拷貝到NDK的include和lib文件夾,修改Linphone各個(gè)模塊編譯的Android.mk文件,利用NDK重新編譯并生成apk。修改的內(nèi)容分為以下3個(gè)步驟:
1)修改submoduleslinphoneuildandroid目錄下的Android-no-neon.mk、Android.mk以及Common.mk,修改submoduleslinphonemediastreamer2uildandroid目錄下的Android.mk,分別在上述4個(gè)文件中添加對(duì)海思庫(kù)的支持,通過標(biāo)志字LOCAL_LDLIBS指定附加的系統(tǒng)庫(kù)文件,添加的內(nèi)容如下:
LOCAL_LDLIBS+=-llog-ldl-lcutils-lhi_common-lhi_msp-lhi_sample_common
2)在AndroidLinphone源碼的根目錄執(zhí)行第2節(jié)編譯命令,生成apk。需要注意的是每次修改c源碼均需要輸入編譯命令重新生成apk進(jìn)行安裝與調(diào)試。
本測(cè)試系統(tǒng)由SIP服務(wù)器miniSipServer和2個(gè)Linphone可視電話終端組成(Windows版Linphone和移植H.264硬件編碼器Android版Linphone)。miniSipServer是一款采用標(biāo)準(zhǔn)SIP協(xié)議的軟件,能接入各種采用SIP協(xié)議的軟終端,為搭建局域網(wǎng)可視電話通信系統(tǒng),以miniSipServer作為主SIP軟件,2個(gè)Linphone分別經(jīng)過miniSipServer的SIP控制進(jìn)行RTP流的傳輸。
局域網(wǎng)內(nèi)視頻通話的各項(xiàng)參數(shù)測(cè)試結(jié)果:視頻通話采用H.264圖像編碼格式,碼率300kbit/s左右,幀速率17f/s(幀/秒),上傳圖像速度400kbit/s,下載速度100kbit/s,圖像分辨率CIF(352×288),本地顯示分辨率為(352×288),語(yǔ)音編碼格式為GSM,編碼速率25kbit/s左右。測(cè)試結(jié)果表明視頻傳輸與視頻顯示各項(xiàng)參數(shù)達(dá)到了預(yù)期的效果。2個(gè)可視電話客戶端在局域網(wǎng)內(nèi)的視頻截圖如圖4和圖5所示。
圖4 機(jī)頂盒Linphone視頻畫面(截圖)
圖5 Windows版Linphone視頻畫面(截圖)
測(cè)試Linphone視頻通話方式分為局域網(wǎng)內(nèi)通話和互聯(lián)網(wǎng)遠(yuǎn)程通話,局域網(wǎng)內(nèi)直接運(yùn)行miniSipServer充當(dāng)SIP服務(wù)器進(jìn)行音視頻數(shù)據(jù)傳輸(需要在miniSipServer建立2個(gè)SIP賬號(hào),兩個(gè)客戶端分別用賬號(hào)登錄),互聯(lián)網(wǎng)則采用Linphone內(nèi)部的SIP服務(wù)器進(jìn)行通信(需要2個(gè)客戶端分別在Linphone官網(wǎng)注冊(cè)linphone.orgSIP賬號(hào),客戶端登錄)。測(cè)試結(jié)果表明,移植了H.264硬件編碼的機(jī)頂盒在局域網(wǎng)或者互聯(lián)網(wǎng)下占用的CPU資源均較少,且使用率波動(dòng)較小,比較穩(wěn)定。表3是對(duì)移植H.264硬件編碼器的機(jī)頂盒畫面情況、CPU資源占用、死機(jī)次數(shù)的統(tǒng)計(jì)情況。
表3不同網(wǎng)絡(luò)條件下參數(shù)對(duì)比
網(wǎng)絡(luò)環(huán)境畫面情況CPU資源使用率/%視頻通話中死機(jī)頻率局域網(wǎng)、H.264軟件編碼局域網(wǎng)、H.264硬件編碼清晰、流暢清晰、流暢5.84.7~5.03/501/50互聯(lián)網(wǎng)、H.264軟件編碼互聯(lián)網(wǎng)、H.264硬件編碼清晰、有卡頓清晰、有卡頓6.0~9.05.6~7.76/501/50
本文介紹了基于Hi3716MV400的高清多媒體處理芯片,在Ubuntu10.04搭建AndroidLinphone開發(fā)環(huán)境,實(shí)現(xiàn)Hi3716MV400H.264硬件編碼函數(shù)venc在AndroidLinphone的移植,移植完成后對(duì)Linphone進(jìn)行視頻通信實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,移植了H.264硬件編碼器的Linphone系統(tǒng)能夠?qū)崟r(shí)、清晰地進(jìn)行視頻通話并顯示,而且相比軟件H.264軟件編碼占用CPU資源更少,更穩(wěn)定。但是在視頻畫面?zhèn)鬏斔俾?、視頻分辨率的設(shè)置方面仍然有待提高,視頻畫面有卡頓的問題也需要解決。
[1]賀丹丹,施展.基于Android的VoIP系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(6):28-31.
[2]邵長(zhǎng)彬,張重陽(yáng),鄭世寶.基于Android的可視IP電話多媒體終端設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2011, 35(6):62-65.
[3]楊瑞.基于協(xié)議棧數(shù)字機(jī)頂盒VoIP終端的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2011,35(23):71-74.
[4]張寶柱,范自來.基于海思Hi3716C平臺(tái)的安卓DVB—T2機(jī)頂盒設(shè)計(jì)方案研究[J].有線電視技術(shù), 2014,1(2): 46-48.
[5]趙宇峰.基于嵌入式Linux的實(shí)時(shí)視頻通信的實(shí)現(xiàn)[J].電視技術(shù),2012,36(19):189-192.
[6]王東東.基于Hi3716C的Android機(jī)頂盒軟件設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津大學(xué),2012.
[7]趙明.基于SIP的軍事車載VOIP語(yǔ)音終端軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].火力與指揮控制,2014,39(z1): 113-115.
[8]沙愛軍,沈衛(wèi)康,毛其林.基于LINPHONE的嵌入式VoIP終端實(shí)現(xiàn)[J].信息通信,2013(8):77-79.
劉文亮(1990— ),碩士生,主研智能信息處理;
夏克文(1965— ),博士生導(dǎo)師,主要研究方向?yàn)橹悄苄畔⑻幚?,壓縮感知,半定規(guī)劃,支持向量機(jī);
華中(1970— ),博士,主要研究方向?yàn)槲㈦娮优c固體電子學(xué)。
責(zé)任編輯:閆雯雯
HisiliconH.264hardwareencodertransplantationbasedonLinphone
LIUWenliang,XIAKewen,HUAZhong
(1.School of Information Engineering, Hebei University of Technology, Tianjin 300130,China;2.Tianjin Botro Electronical Science and Tech. Co., Ltd., Tianjin 300384,China)
InordertoshortenH.264encodingtimeandimproveencodingefficiency,anideaabouttranslatingHi3716MV400H.264hardwareencodertoAndroidLinphonecomeup.Inthispaper,thetransplantationmethodofthehardwareencoderisdescribedindetailwhichincludesbuildingLinphonedevelopmentenvironment,addingH.264hardwareencodinglibrary,correctingH.264hardwareencodingfunction.ExperimentaltestsshowthattheLinphonecancommunicatewithanotherclientnormallyinHi3716MV400STB,makingthevideocommunicationoccupieslessCPUresourcesandcrashesrarely.
Hi3716MV400;H.264hardwareencoder;AndroidLinphone
TN915;TP393
ADOI:10.16280/j.videoe.2016.08.025
河北省引進(jìn)留學(xué)人員基金項(xiàng)目(C2012003038)
2015-10-19
文獻(xiàn)引用格式:劉文亮,夏克文,華中. 基于Linphone的海思H.264硬件編碼器移植[J].電視技術(shù),2016,40(8):126-131.
LIUWL,XIAKW,HUAZ.HisiliconH.264hardwareencodertransplantationbasedonLinphone[J].Videoengineering,2016,40(8):126-131.