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