魯 云,韓 賓,程錦發(fā),李 岳(西南科技大學(xué) 信息工程學(xué)院,四川 綿陽(yáng) 621010)
基于Hi3516A的H265碼流實(shí)時(shí)傳輸系統(tǒng)設(shè)計(jì)
魯 云,韓 賓,程錦發(fā),李 岳
(西南科技大學(xué) 信息工程學(xué)院,四川 綿陽(yáng) 621010)
介紹了在海思Hi3616A開(kāi)發(fā)平臺(tái)下實(shí)現(xiàn)的一種H265碼流實(shí)時(shí)傳輸系統(tǒng)。利用海思提供的媒體處理平臺(tái)(MPP)采集高清攝像頭感應(yīng)到的視頻圖像并進(jìn)行H265壓縮編碼,然后對(duì)LIVE555開(kāi)源代碼進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)播放H265實(shí)時(shí)碼流的功能,將壓縮編碼后的數(shù)據(jù)發(fā)送出去。設(shè)計(jì)結(jié)果表明,系統(tǒng)傳輸高清視頻圖像延遲短,播放流暢,滿足智能監(jiān)控領(lǐng)域應(yīng)用的要求。
MPP;LIVE555;H265;實(shí)時(shí)碼流
隨著社會(huì)的發(fā)展以及人們生活質(zhì)量的提高,安全問(wèn)題越來(lái)越受到重視。在這樣的形式之下,網(wǎng)絡(luò)視頻監(jiān)控技術(shù)占領(lǐng)著越來(lái)越大的市場(chǎng),廣泛應(yīng)用在交通、商場(chǎng)等領(lǐng)域。然而,技術(shù)應(yīng)用對(duì)視頻的質(zhì)量、傳輸?shù)膶?shí)時(shí)性和數(shù)據(jù)的壓縮效率等提出了要求[1],對(duì)項(xiàng)目開(kāi)發(fā)構(gòu)成了巨大挑戰(zhàn)。本文設(shè)計(jì)并實(shí)現(xiàn)了一套實(shí)時(shí)流媒體傳輸系統(tǒng),以Hi3516A開(kāi)發(fā)平臺(tái)作為基礎(chǔ),以高壓縮效率的H265編碼算法作為編碼技術(shù),通過(guò)對(duì)LIVE555開(kāi)源代碼二次開(kāi)發(fā)實(shí)現(xiàn)H265碼流實(shí)時(shí)傳輸從而構(gòu)成了整個(gè)系統(tǒng)。該系統(tǒng)在視頻質(zhì)量、壓縮效率、實(shí)時(shí)性上都滿足了當(dāng)前市場(chǎng)應(yīng)用的要求,對(duì)實(shí)際項(xiàng)目開(kāi)發(fā)具有一定的借鑒意義。
如圖1所示,系統(tǒng)以Hi3516A開(kāi)發(fā)平臺(tái)(由高分辨率1 080p的AR0330攝像頭模塊和帶千兆以太網(wǎng)功能的Hi3516A控制器模塊組成硬件平臺(tái),并在硬件平臺(tái)上燒寫(xiě)了U-Boot、Linux內(nèi)核和加載了相關(guān)驅(qū)動(dòng))作為基礎(chǔ),在該平臺(tái)上開(kāi)發(fā)應(yīng)用程序。首先,進(jìn)程A獲取來(lái)自AR0330攝像頭模塊的YUV原始視頻圖像,并使用H265壓縮編碼算法進(jìn)行壓縮編碼獲得H265格式碼流,該過(guò)程通過(guò)使用海思提供的媒體處理平臺(tái)(MPP)實(shí)現(xiàn);其次,進(jìn)程B負(fù)責(zé)響應(yīng)網(wǎng)絡(luò)客戶端的請(qǐng)求,將進(jìn)程A的輸出碼流通過(guò)千兆以太網(wǎng)接口實(shí)時(shí)地發(fā)送出去,該過(guò)程通過(guò)對(duì)LIVE555開(kāi)源代碼(該代碼原本只支持文件發(fā)送功能,而不支持內(nèi)存實(shí)時(shí)數(shù)據(jù)發(fā)送功能)二次開(kāi)發(fā)實(shí)現(xiàn);此外,進(jìn)程A與進(jìn)程B之間的數(shù)據(jù)交換使用共享內(nèi)存進(jìn)程通信方式,節(jié)約了CPU資源和時(shí)間成本。
2.1 視頻捕捉與編碼
選擇在Hi3516A開(kāi)發(fā)平臺(tái)上開(kāi)發(fā)體現(xiàn)了在視頻捕捉和編碼過(guò)程中的很多優(yōu)勢(shì)。Hi3516A是專用于HD IP攝像機(jī)的多媒體芯片,具有高性能Cortex-A7處理器和內(nèi)部集成的硬件H265視頻標(biāo)準(zhǔn)編碼器[2];此外,海思提供的MPP對(duì)應(yīng)用軟件屏蔽了芯片相關(guān)的復(fù)雜的底層處理,提供給應(yīng)用程序方便的接口,這樣不僅大大縮短了開(kāi)發(fā)周期,還降低了開(kāi)發(fā)難度。對(duì)于應(yīng)用程序開(kāi)發(fā)者,只需要使用MPP所提供的接口實(shí)現(xiàn)特定功能,滿足應(yīng)用。
圖1 系統(tǒng)整體結(jié)構(gòu)框圖
MPP主要由視頻輸入(VI)、視頻處理(VPSS)、視頻編碼(VENC)、視頻解碼(VDEC)、視頻輸出(VO)、視頻偵測(cè)分析(VDA)、區(qū)域管理(REGION)等模塊組成。本系統(tǒng)用到VI、VPSS、VENC和REGION模塊完成視頻采集、處理、信息疊加和壓縮編碼工作,最終得到目標(biāo)碼流。
如圖2所示,首先,調(diào)用系統(tǒng)控制模塊的媒體處理平臺(tái)編程接口(MPI)完成硬件和MPP初始化,它實(shí)現(xiàn)的重要功能是分配視頻緩存池;其次,調(diào)用VI模塊的MPI創(chuàng)建視頻輸入設(shè)備和視頻物理通道并設(shè)置參數(shù);然后,調(diào)用VPSS模塊的MPI創(chuàng)建組和通道,并設(shè)置組和通道參數(shù),輸出期望分辨率的視頻數(shù)據(jù);最后,調(diào)用REGION模塊的MPI,在原始圖像上疊加用戶信息,并調(diào)用VENC模塊的MPI對(duì)YUV原始圖像進(jìn)行H265壓縮編碼,得到H265格式碼流[3]。完成以上工作后,創(chuàng)建一個(gè)線程不斷從編碼通道獲取實(shí)時(shí)H265碼流。整個(gè)過(guò)程都通過(guò)調(diào)用各模塊的MPI實(shí)現(xiàn),難度較低。
圖2 視頻捕捉和編碼流程框圖
2.2 H265實(shí)時(shí)碼流傳輸
本系統(tǒng)中,H265實(shí)時(shí)流媒體數(shù)據(jù)的傳輸在LIVE555C++開(kāi)源項(xiàng)目的基礎(chǔ)上實(shí)現(xiàn)。LIVE555是跨平臺(tái)的流媒體解決方案,使用RTSP、RTCP/RTP等標(biāo)準(zhǔn)流媒體傳輸協(xié)議,支持H265、H264、MPEG等視頻格式和多種音頻格式的流化、發(fā)送、接收等處理。此外,由于良好的代碼框架設(shè)計(jì),很容易擴(kuò)展出對(duì)其他媒體格式的支持,所以大量應(yīng)用在流媒體傳輸方案中,比如網(wǎng)絡(luò)視頻監(jiān)控應(yīng)用、流媒體播放器等。
LIVE555默認(rèn)只支持發(fā)送音視頻文件,而不支持從媒體設(shè)備獲取的實(shí)時(shí)碼流。在本系統(tǒng)中,需要修改LIVE555源代碼以實(shí)現(xiàn)H265碼流實(shí)時(shí)發(fā)送功能。
一種方法是通過(guò)有名管道(FIFO)實(shí)現(xiàn),這種方法不需要修改LIVE555源代碼,只需在視頻捕捉與編碼源進(jìn)程中創(chuàng)建一個(gè)FIFO,并不斷把實(shí)時(shí)H265碼流寫(xiě)入FIFO中即可。LIVE555服務(wù)器端用發(fā)送音視頻文件的方式獲取FIFO中數(shù)據(jù),完成實(shí)時(shí)直播[4]。這種方法容易實(shí)現(xiàn),使用較多,但是當(dāng)視頻碼流率較大時(shí)監(jiān)控端的延時(shí)較大,并存在卡頓、馬賽克等現(xiàn)象,效果較差。另一種方法是通過(guò)修改LIVE555源代碼,從實(shí)現(xiàn)RTSP服務(wù)的相關(guān)基類派生出H265碼流直播的類,重寫(xiě)類的成員方法來(lái)實(shí)現(xiàn)。該方法通過(guò)共享內(nèi)存進(jìn)程通信方式實(shí)現(xiàn)與視頻捕捉和編碼進(jìn)程的碼流交互。這種方法的實(shí)現(xiàn)比較復(fù)雜,但在數(shù)據(jù)處理過(guò)程中比第一種方式少了多次數(shù)據(jù)寫(xiě)入和拷貝工作,如圖3所示(其中實(shí)線部分為第一種方法數(shù)據(jù)流向,虛線部分為第二種方法數(shù)據(jù)流向),從而監(jiān)控端能夠以較大碼流率實(shí)時(shí)、流暢地播放高清視頻圖像。本文主要針對(duì)第二種方法的設(shè)計(jì)實(shí)現(xiàn),而不討論第一種方法。
圖3 兩種方法的數(shù)據(jù)流向?qū)Ρ瓤驁D
LIVE555主要通過(guò)任務(wù)調(diào)度機(jī)制和 RTSP服務(wù)機(jī)制兩個(gè)部分實(shí)現(xiàn)流媒體服務(wù)器功能[5]。其中任務(wù)調(diào)度機(jī)制主要通過(guò)TaskScheduler類庫(kù)實(shí)現(xiàn),它完成網(wǎng)絡(luò)套接字任務(wù)、延時(shí)任務(wù)和觸發(fā)事件三種任務(wù)的循環(huán)調(diào)度,從而構(gòu)成了系統(tǒng)運(yùn)行框架。而RTSP服務(wù)機(jī)制通過(guò)工程的live-Media目錄下的類庫(kù)實(shí)現(xiàn),通過(guò)把RTSP協(xié)議加入到運(yùn)行框架中,實(shí)現(xiàn)了流媒體服務(wù)器。下面具體分析RTSP服務(wù)機(jī)制的實(shí)現(xiàn)過(guò)程。
首先,建立RTSPServer,監(jiān)聽(tīng)客戶端的連接請(qǐng)求,響應(yīng)客戶端請(qǐng)求建立連接后,創(chuàng)建RTSPClientSession,RTSP協(xié)議就是在RTSPClientSession中實(shí)現(xiàn)的。然后是RTSP協(xié)議的實(shí)現(xiàn)過(guò)程,客戶端向服務(wù)器端發(fā)送RTSP描述命令(DESCRIBE),服務(wù)器查找到對(duì)應(yīng)的ServerMediaSession(對(duì)應(yīng)某個(gè)媒體設(shè)備或某種格式文件),并生成會(huì)話描述協(xié)議(SDP)信息進(jìn)行回應(yīng);接著,客戶端發(fā)送RTSP建立命令(SETUP),服務(wù)器端建立RTP/RTCP套接字,并建立特定的Source和Sink,為數(shù)據(jù)的獲取、封包和發(fā)送做準(zhǔn)備;完成以上步驟后,客戶端發(fā)送播放命令(PLAY),服務(wù)器端響應(yīng)請(qǐng)求,循環(huán)調(diào)用Source對(duì)象的成員方法獲取數(shù)據(jù)并通過(guò)Sink對(duì)象的成員方法進(jìn)行封包和發(fā)送,實(shí)現(xiàn)流媒體服務(wù)器的功能;在播放過(guò)程中,客戶端可以發(fā)送終止命令(TERADOWN)結(jié)束流媒體會(huì)話。
從RTSP協(xié)議實(shí)現(xiàn)過(guò)程可知,為了支持H265實(shí)時(shí)流媒體數(shù)據(jù)傳輸,需要實(shí)現(xiàn)用戶自定義類ServerMediaSubssion、Source和Sink[6]。自定義的類可以繼承H265VideoFileServer MediaSubsession、H265VideoRTPSink和H265VideoStream-Framer中能共用的方法,重寫(xiě)H265實(shí)時(shí)流媒體處理特有的方法。具體實(shí)現(xiàn)方法是添加H265LiveVideoServer-MediaSubssion:public H265VideoFileServerMediaSubsession類,并重寫(xiě)createNewStreamSource成員方法。該成員方法的關(guān)鍵段代碼段如下:
該代碼段的主要工作是把ByteStreamFileSource替換為用戶自定義的H265FramedLiveSource,用于獲取高清攝像頭上的實(shí)時(shí)視頻數(shù)據(jù)。H265FramedLiveSource的成員方法H265FramedLiveSource::doGetNextFrame()就實(shí)現(xiàn)了從H265編碼輸出端獲取H265格式視頻數(shù)據(jù)并送到H265VideoRTPSink端的過(guò)程。其中,進(jìn)程之間數(shù)據(jù)交換采用共享內(nèi)存方式,用有名信號(hào)量實(shí)現(xiàn)進(jìn)程對(duì)共享內(nèi)存的同步訪問(wèn)。該成員方法的關(guān)鍵代碼段如下:
這樣,當(dāng)服務(wù)器端收到客戶端PLAY命令時(shí),不斷調(diào)用H265FramedLiveSource::doGetNextFrame()讀取H265格式視頻數(shù)據(jù),封包和發(fā)送出去,實(shí)現(xiàn)H265碼流實(shí)時(shí)傳輸功能。
在主函數(shù)中,只需在創(chuàng)建ServerMediaSession時(shí)加入H265LiveVideoServerMediaSubssion,并向RTSPServer中注冊(cè)該ServerMediaSession即可[7]。
H265碼流實(shí)時(shí)傳輸?shù)某绦蛲ㄟ^(guò)海思平臺(tái)的交叉編譯工具鏈編譯,生成可執(zhí)行文件,并在海思Hi3516A開(kāi)發(fā)平臺(tái)下運(yùn)行,完成服務(wù)器搭建工作。服務(wù)器正常運(yùn)行后的終端輸出如圖4所示。
圖4 服務(wù)器正常運(yùn)行后的終端輸出
客戶端通過(guò)安裝Windows系統(tǒng)下的VLC播放器實(shí)現(xiàn)。打開(kāi)VLC播放器,在“打開(kāi)網(wǎng)絡(luò)串流”選項(xiàng)中輸入rtsp://192.168.1.116:8554/H265LiveVideo,點(diǎn)擊播放,就可以看到來(lái)自高清攝像頭的視頻圖像,并長(zhǎng)期穩(wěn)定工作。與常用的FIFO方式作效果對(duì)比,當(dāng)碼流率較大時(shí),視頻圖像延遲更短,視頻畫(huà)面更加完整和流暢。
在海思Hi3516A開(kāi)發(fā)平臺(tái)上,通過(guò)調(diào)用MPP進(jìn)行編程和修改LIVE555流媒體服務(wù)器源代碼,實(shí)現(xiàn)了H265實(shí)時(shí)碼流獲取和網(wǎng)絡(luò)直播功能,且具有良好的效果,可以應(yīng)用在項(xiàng)目開(kāi)發(fā)中。由于系統(tǒng)還處在測(cè)試階段,不夠完善,實(shí)際項(xiàng)目開(kāi)發(fā)中,要根據(jù)實(shí)際情況進(jìn)一步優(yōu)化,以達(dá)到更好的性能。
[1]瞿洪桂.網(wǎng)絡(luò)視頻監(jiān)控的市場(chǎng)現(xiàn)狀及發(fā)展方向[J].中國(guó)安防,2015(5):32-35.
[2]季健佼.解析海思H.265超高清IP視頻監(jiān)控解決方案[J].中國(guó)公共安全(綜合版),2014(22):198-200,202.
[3]王峰.基于Hi3516的音視頻采集及網(wǎng)絡(luò)傳輸技術(shù)研究[D].西安:西安電子科技大學(xué),2013.
[4]曾金,毛燕琴,沈蘇彬,等.嵌入式流媒體服務(wù)器的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011,21(7):81-84,89.
[5]許華濱,謝維波,黃奕,等.基于Live555的流媒體服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2014,33(18):48-50.
[6]呂少君,周淵平.基于Live555的實(shí)時(shí)流媒體傳輸系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(1):56-59.
[7]彭宏,吳海巍,葉敏展,等.基于流媒體的移動(dòng)視頻直播系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2014,40(9):111-113,117.
Design of H265 real-time stream transmission system based on Hi3516A
Lu Yun,Han Bin,Cheng Jinfa,Li Yue
(School of Information Engineering,Southwest University of Science and Technology,Mianyang 621010,China)
This paper introduces a H265 real-time stream transmission system achieved on the Hi3516A development platform of hisilicon.It captures video image from HD camera and encodes it as H265 format by Media Process Platform(MPP)provided by hisilicon,then does the LIVE555 open source a secondary development to live H265 real-time stream.The design result indicates that the system meets the requirement of applications in the intelligent monitor field,with low latency on the transmission of HD video image and fluency on playing.
MPP;LIVE555;H265;real-time stream
TP37
A
1674-7720(2015)20-0042-03
魯云,韓賓,程錦發(fā),等.基于Hi3516A的 H265碼流實(shí)時(shí)傳輸系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2015,34 (20):42-44.
2015-07-19)
魯云(1990-),通信作者,男,碩士研究生,主要研究方向:嵌入式技術(shù)。E-mail:luyun9003@sina.cn。
韓賓(1974-),男,碩士,副研究員,主要研究方向:嵌入式技術(shù),測(cè)控技術(shù)。
程錦發(fā)(1990-),男,碩士研究生,主要研究方向:測(cè)控技術(shù),嵌入式技術(shù)。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2015年20期