莊俊杰,孟利民
(浙江省通信網(wǎng)應用技術研究重點實驗室,浙江杭州310023)
隨著社會的快速發(fā)展和人們生活水平的不斷提高,公眾對安防的意識逐漸加深,社會對安防的需求也隨之增長。作為安防產(chǎn)業(yè)的重要組成部分,視頻監(jiān)控產(chǎn)業(yè)得到了蓬勃發(fā)展,實時網(wǎng)絡視頻數(shù)據(jù)傳輸?shù)膶崿F(xiàn)已經(jīng)成為業(yè)界極為關注的熱點課題。通過設計具有實時性、完備性的視頻傳輸系統(tǒng)來實現(xiàn)視頻流的實時傳輸有著重要的理論意義和工程應用價值。使用H.264編碼壓縮技術[1],以及RTP實時傳輸協(xié)議[2],基于RFC3984和JRTPLIB庫實現(xiàn)在網(wǎng)絡視頻監(jiān)控系統(tǒng)中數(shù)據(jù)傳輸[3-5],本文重點介紹JRTPLIB在DM365開發(fā)板中的移植以及傳輸數(shù)據(jù)的過程,最后分3種網(wǎng)絡狀況測試。
在本項目設計中,采用支持H.264編解碼的DM365開發(fā)板來進行二次開發(fā)。攝像頭捕獲的模擬視頻信號首先由TVP5146芯片編碼成為YUV格式的視頻數(shù)據(jù),后經(jīng)過VPFE視頻前端處理之后,然后再通過TMS320DM365的H.264編碼器產(chǎn)生壓縮后的H.264視頻數(shù)據(jù),以RTP協(xié)議通過Internet進行打包發(fā)送至服務器。在客戶端,首先從服務器接收到RTP包中解析出H.264數(shù)據(jù),送至H.264播放器實時播放出來。整個系統(tǒng)由視頻設備、服務器和客戶端3大塊構成,設計方案如圖1所示:
圖1 系統(tǒng)方案設計圖
本文RTP協(xié)議實現(xiàn)使用的是JRTPLIB庫,一個實現(xiàn)了RTP/RTCP協(xié)議的開源庫,通過它可以很方便地實現(xiàn)RTP或RTCP數(shù)據(jù)的收發(fā)庫,本文使用jrtplib的版本為jrtplib-3.7.1,jthread版本為jthread-
1.2.1。本文中Jrtp數(shù)據(jù)接收方式:用jthread庫提供的線程自動在后臺執(zhí)行對數(shù)據(jù)的接收,需要安裝jthread 庫,則需安裝 jthread-1.2.1.tar.gz,而且 jthread -1.2.1 必須先與 jrtp-3.7.1 的安裝,不然會出現(xiàn)找不到xxx.的錯誤和非法的引用等的編譯或連接錯誤。因為在jrtp-3.7.1的configure中,會查找系統(tǒng)是否有編譯了jthread庫,如果有,那么編譯的jrtp庫則支持jthread。因此如果先編譯jrtp再編譯jthread,編譯出來的jrtp庫是不支持jthread的。
2.2.1 jthread 的編譯安裝
將源文件復制到工程文件夾下,這里指定/home/realtimedsp/study/RTP,執(zhí)行解壓個配置:
這里的prefix指定了安裝的路徑,host指定了目標環(huán)境,CC和CXX指定了montavista交叉編譯器的路徑。操作之后,將在當前目錄下生成Makefile。
這樣,jthread就安裝完畢了,opt/jthread_jrtplib/目錄下就生成了include和lib文件夾了,里面有Jthread的頭文件和庫文件了。
2.2.2 JRTPLIB 的安裝
安裝JRTPlib的方法和jthread相似,首先執(zhí)行解壓和配置:
這樣,JRTPlib就安裝好了,再看/opt/jthread_jrtplib文件夾下就有了jrtplib的頭文件和庫文件了。
2.2.3 基于JRTPLIB的RTP收發(fā)實現(xiàn)
JRTPLIB庫基于C++實現(xiàn),面向對象。JRTPLIB庫各模塊的功能通過各個類來實現(xiàn),如數(shù)據(jù)的傳輸、接收存儲管理、線程管理等等。開發(fā)過程中常用的類有:
RTPSession。該類實現(xiàn)了數(shù)據(jù)接收和發(fā)送相關的大部分函數(shù)。如會話創(chuàng)建函數(shù)Create,RTP分組發(fā)送函數(shù)Send-Packet以及游標定位函數(shù)GoToNextSourceWithData等。它內置的處理了RTCP部分,不需要額外的進行設計;RTPSessionParams。該類主要用來描述RTPSession實例將要使用的參數(shù)。相關的成員函數(shù)有:設置時間戳函數(shù)SetOwn-TimeStampUnit,設置RTP分組最大長度函數(shù)SetMaximumP-acketSize等;RTPUDPv4TransmissionParams。主要用于RTP發(fā)送端口設置,如函數(shù) SetPortbase;RTCPPacket。RTCPPacket類是各種RTCP包的基類,其中兩個子類 RTCPPacket和RTCPSRPacket分別用于統(tǒng)計RTCP發(fā)送報告和接收報告。JRTPLIB庫的發(fā)送和接收流程如圖2所示:
圖2 JRTPLIB庫的發(fā)送和接收流程
實驗測試主要針對客戶端,開發(fā)板,服務器之間不同的網(wǎng)絡狀況進行丟包測試。由于客戶端所在測試的網(wǎng)絡為聯(lián)通的,開發(fā)板也在該網(wǎng)絡內。根據(jù)服務器所在網(wǎng)絡的不同進行多次測試的平均結果如表1所示。
表1 測試結果
局域網(wǎng)內D1格式圖像數(shù)據(jù)測試效果對比,發(fā)送前設備SD卡上的視頻數(shù)據(jù)如圖3所示,客戶端接收播放的視頻數(shù)據(jù)如圖4所示。
圖3 SD卡視頻圖像
圖4 客戶端視頻圖像
通過數(shù)據(jù)說明JRTPLIB庫可以在DM365芯片開發(fā)板里完成編譯,并用來完成視頻數(shù)據(jù)的傳輸。具體效果依照網(wǎng)絡狀況而定。
經(jīng)過實際測試,JRTPLIB在DM365開發(fā)板中成功移植,并實現(xiàn)H.264視頻數(shù)據(jù)的傳輸,該網(wǎng)絡監(jiān)控系統(tǒng)可以實際應用于有線網(wǎng)絡中,并且具有較強的自適應性。今后的工作是保證視頻的清晰和流暢,另外添加其他的一些功能,例如云臺,告警等功能。
[1] ITU-T Rec.H.264/ISO/IEC11496-10,Advanced Video Coding[S].Final Committee Draft,Document JVT-E022,Sept 2002.
[2] 樊姍.基于RTP的H.264視頻傳輸技術的研究[D].濟南:山東大學,2008.
[3] Wenger S,Hannuksela M M,Stockhammer T,etal.RFC-3984 RTP Payload Format for H.264 Video[EB/OL].http://www.faqs.org/rfcs/rfc3984.html,2005 -03 -12.
[4] Liesenborgs J.JRTPLIB[EB/OL].http://research.edu.uhasselt.be/-jori/page/index.phpn2CS.Jrtplib,2006 - 06-12.
[5] 林冰.基于H.264的視頻監(jiān)控系統(tǒng)的設計和實現(xiàn)[D].北京:北京郵電大學,2006.