本站小編為你精心準(zhǔn)備了無線視頻傳輸系統(tǒng)的設(shè)計(jì)參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
《無線通信技術(shù)雜志》2014年第二期
1視頻數(shù)據(jù)的采集和編碼
1.1基于V4L2的視頻數(shù)據(jù)采集設(shè)計(jì)V4L2(VideoforLinuxTwo)是V4L的改進(jìn)版,V4L2改進(jìn)了V4L中的不足,具有更好的擴(kuò)展性和靈活性,并且支持的硬件設(shè)備更多。利用V4L2接口函數(shù)獲取視頻幀數(shù)據(jù)有3種方式:read、write方式,用戶指針方式,內(nèi)存映射mmap方式。本系統(tǒng)通過內(nèi)存映射方式采集,采用這種方法不僅讀取方便,而且省去了大量的內(nèi)存拷貝,效率較高[8]。視頻采集過程如圖3。(1)打開視頻設(shè)備文件。fd=open(Device-name,mode);第一個(gè)參數(shù)是注冊(cè)在/dev/目錄下的設(shè)備名,打開模式可分為阻塞和非阻塞模式。(2)獲取設(shè)備屬性。調(diào)用函數(shù)ioctl(fd,VIDIOC_QUERYCAP,&cp)獲取打開設(shè)備文件的相關(guān)參數(shù)并存放到cap結(jié)構(gòu)中。(3)設(shè)置視頻的制式和幀格式。調(diào)用函數(shù)ioctl(fd,VIDIOCS_FMT,&fmt)設(shè)置捕獲圖像的存儲(chǔ)格式、寬帶、高度、像素大小等。(4)申請(qǐng)幀緩沖區(qū),并進(jìn)行內(nèi)存映射。調(diào)用函數(shù)ioctl(fd,VIDIOC_REQBUFS,&req)向內(nèi)核申請(qǐng)req.count個(gè)幀緩存。通過VIDIOC_QUERBUF獲取緩存幀在內(nèi)核空間的地址,通過mmap方式將內(nèi)核空間中的內(nèi)存映射到用戶空間。(5)采集視頻數(shù)據(jù)。調(diào)用函數(shù)ioctl(fd,VIDIOC_STREAMON,&type)將數(shù)據(jù)存放到緩存中。(6)處理采集的數(shù)據(jù)。當(dāng)應(yīng)用程序?qū)⒆钕炔傻降囊粠瑪?shù)據(jù)取走時(shí),幀緩沖重新放入隊(duì)列尾,從而循環(huán)采集數(shù)據(jù)。(7)關(guān)閉視頻設(shè)備。調(diào)用close(fp)實(shí)現(xiàn)設(shè)備的關(guān)閉。
1.2基于MFC的H.264編碼設(shè)計(jì)本系統(tǒng)利用S3C6410提供的MFC硬件編解碼器實(shí)現(xiàn)了H.264標(biāo)準(zhǔn)的視頻壓縮。硬編碼具有不占用CPU資源,運(yùn)算速度快等優(yōu)點(diǎn),從而滿足視頻數(shù)據(jù)實(shí)時(shí)性的要求。H.264編碼器要求輸入數(shù)據(jù)為YUV420格式,而V4L2輸出的視頻數(shù)據(jù)是YUV422格式,因此在完成編碼工作之前,要利用函數(shù)DoConvert()將YUV422格式轉(zhuǎn)換為YUV420格式。編碼的過程如圖4。(1)創(chuàng)建H.264編碼器。調(diào)用函數(shù)Ssb-SipH264EncodeInit(width,height,frame_rate,bitrate,gop_num)實(shí)現(xiàn)。(2)設(shè)置編碼器參數(shù),初始化H.264編碼器,分別調(diào)用函數(shù)SsbSipH264EncodeSetConfig(handle,type,value)和函數(shù)SsbSipH264EncodeExe(handle)來實(shí)現(xiàn)。(3)獲取要編碼的視頻數(shù)據(jù)的輸入緩沖區(qū)地址,調(diào)用SsbSipH264EncodeGetInBuf(handle,0)來實(shí)現(xiàn),該函數(shù)返回視頻數(shù)據(jù)的輸入地址。(4)讀取要編碼的視頻數(shù)據(jù),調(diào)用函數(shù)memcpy(p_inbuf,in_addr,frame_size)將需要編碼的視頻數(shù)據(jù)復(fù)制到上一步驟的輸入緩沖區(qū)中。(5)編碼視頻數(shù)據(jù),調(diào)用函數(shù)Ssb-SipH264EncodeExe(handle)實(shí)現(xiàn)H.264編碼。(6)輸出已編碼的視頻數(shù)據(jù),調(diào)用函數(shù)Ssb-SipH264EncodeGetOutBuf(handle,size)獲取編碼后數(shù)據(jù)的輸出緩沖區(qū)和編碼數(shù)據(jù)大小。(7)關(guān)閉設(shè)備,調(diào)用函數(shù)Ssb-SipH264EncodeDeInit(handle)釋放編碼器資源,并且關(guān)閉MFC設(shè)備。圖4H.264編碼流程圖
2視頻數(shù)據(jù)的傳輸
2.1基于RTP/RTCP的流媒體實(shí)時(shí)傳輸設(shè)計(jì)為滿足視頻監(jiān)控實(shí)時(shí)性的要求,需要RTCP(實(shí)時(shí)傳輸控制協(xié)議)和RTP(實(shí)時(shí)傳輸協(xié)議)協(xié)同使用,以有效的反饋和最小的開銷使傳輸效果達(dá)到最好。RTP負(fù)責(zé)實(shí)時(shí)性傳輸,但它本身不提供QoS,需要RTCP提供視頻質(zhì)量控制的手段和方法。而控制RTP包的發(fā)送則通過RTSP協(xié)議完成。
2.1.1live555簡(jiǎn)介本系統(tǒng)利用開源Live555庫實(shí)現(xiàn)了基于RTP、RTCP的實(shí)時(shí)傳輸。Live555庫是一種為流媒體傳輸提供解決方案的跨平臺(tái)C++開源項(xiàng)目,在嵌入式環(huán)境中運(yùn)行穩(wěn)定,性能較好,支持RTP/RTCP/RTSP/SDP等協(xié)議,支持多種音視頻編碼格式(如H.264、MPEG4、JPEG、DV等)的音視頻數(shù)據(jù)的發(fā)送、接收和處理。Live555包含四個(gè)基本的庫分別是BasicUsageEnvironment&TaskScheduler、UsageEnvir-onment、GroupSock和LiveMedia。LiveMedia模塊是最重要的模塊,基類是Medium,其它所有類都派生自該類[9]。
2.1.2基于Live555的流媒體服務(wù)器的設(shè)計(jì)針對(duì)Live555開源項(xiàng)目不支持H.264實(shí)時(shí)視頻流的接收,我們繼承FramedSource類寫一個(gè)Camer-aH264StreamFramer類,這個(gè)類負(fù)責(zé)實(shí)時(shí)的采集視頻圖像,使用MFC進(jìn)行H.264硬編碼,然后覆蓋成員函數(shù)doGetNextFrame()。H.264編碼的每一幀交給VideoServerMediaSubsession處理。另外,還需要繼成OnDemandServerMediaSubses-sion類,寫一個(gè)H264LiveVideoServerMediaSubsession類,這個(gè)類負(fù)責(zé)管理Source和Sink,指示輸入和輸出。函數(shù)createNewStreamSource返回了實(shí)例化的CameraH264StreamFramer;函數(shù)createNewRTPSink返回了實(shí)例化的H264VideoRTPSink,其父類為RTP-Sink,這個(gè)類的作用是把原始的H264流封裝成RTP數(shù)據(jù)包[10-12]。類結(jié)構(gòu)圖如圖5:
2.1.3流媒體主程序設(shè)計(jì)流媒體主程序步驟如下:(1)構(gòu)造應(yīng)用程序環(huán)境類:包括任務(wù)調(diào)度器TaskScheduler,構(gòu)造UsageEnviRonment對(duì)象的時(shí)候需要TaskScheduler作參數(shù)。(2)構(gòu)造RTSPServer對(duì)象,代表整個(gè)流媒體VideoServer,配置監(jiān)聽端口,這里設(shè)置為8554,可以選擇是否使用用戶名密碼方式訪問。(3)構(gòu)造MediaSession對(duì)象和MediaSubsession對(duì)象,表示具體的輸入視頻流和輸出流。MediaSub-session就是我們構(gòu)造的H264LiveVideoServerMediaSubsession。(4)把MediaSession加入到RTSPServer,調(diào)用RTSPServer的doEventLoop進(jìn)入消息循環(huán),開始監(jiān)聽用戶請(qǐng)求接入,處理消息請(qǐng)求。圖5類結(jié)構(gòu)圖圖6視頻監(jiān)控效果圖
2.23G模塊聯(lián)網(wǎng)3G模塊與ARM是通過USB相連的。3G網(wǎng)絡(luò)的連接是通過點(diǎn)對(duì)點(diǎn)(PPP)協(xié)議來完成的,PPP是在串行連接的數(shù)據(jù)鏈路實(shí)現(xiàn)IP以及其它網(wǎng)絡(luò)協(xié)議的一種機(jī)制[13]。在Linux內(nèi)核中已經(jīng)添加了3G模塊的驅(qū)動(dòng)和PPP協(xié)議的支持,還需要移植相應(yīng)的撥號(hào)軟件實(shí)現(xiàn)撥號(hào)上網(wǎng)。本文選擇撥號(hào)軟件pppd,下載ppp-2.
2.4源碼包,進(jìn)行交叉編譯生成撥號(hào)所需的應(yīng)用程序pppd和chat,將這兩個(gè)應(yīng)用程序拷貝到開發(fā)板/usr/sbin文件夾下,更改其屬性為可執(zhí)行文件。配置好撥號(hào)的腳本文件后,通過pppdcall命令即可實(shí)現(xiàn)WCDMA無線網(wǎng)絡(luò)的接入。通過AT指令對(duì)視頻數(shù)據(jù)進(jìn)行UDP打包,最終將視頻數(shù)據(jù)包發(fā)送到3G網(wǎng)絡(luò)上。
3終端設(shè)備
在Window平臺(tái)下,用VLC播放器可以接收傳輸過來的視頻流。如果終端設(shè)備IP:221.6.52.114,在VLC的地址欄輸入rtsp://221.6.52.114:8554/live就可以播放流媒體視頻。運(yùn)行效果如圖6。
4結(jié)束語
經(jīng)測(cè)試,本系統(tǒng)采集分辨率為320*240的圖像,經(jīng)H.264硬編碼后,每幀圖像大小只有5KB左右,幀率可達(dá)25f/s。對(duì)于WCDMA無線網(wǎng)絡(luò)的傳輸率一般在2Mbit/s左右,因此,該無線網(wǎng)絡(luò)能夠滿足實(shí)時(shí)視頻傳輸?shù)男枨蟆1疚脑O(shè)計(jì)的視頻傳輸系統(tǒng)結(jié)合了嵌入式技術(shù)﹑視頻壓縮編碼技術(shù)﹑流媒體實(shí)時(shí)傳輸技術(shù)、無線通信技術(shù)等多項(xiàng)技術(shù),系統(tǒng)具有實(shí)時(shí)性好、穩(wěn)定性高、低成本、低功耗等優(yōu)點(diǎn),有很高的應(yīng)用價(jià)值和較為廣闊的市場(chǎng)前景。
作者:陳嵐 鮑可進(jìn)單位:江蘇大學(xué)計(jì)算機(jī)科學(xué)與通信工程學(xué)院