亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Mjpg-streamer的跨平臺(tái)無(wú)線視頻傳輸系統(tǒng)

        2016-03-25 06:13:43祝朝政張毅偉程禹嘉嚴(yán)錫君
        微型電腦應(yīng)用 2016年1期
        關(guān)鍵詞:跨平臺(tái)

        祝朝政,張毅偉,程禹嘉,嚴(yán)錫君

        ?

        基于Mjpg-streamer的跨平臺(tái)無(wú)線視頻傳輸系統(tǒng)

        祝朝政,張毅偉,程禹嘉,嚴(yán)錫君

        摘 要:為了解決基于Mjpg-streamer的遠(yuǎn)程視頻系統(tǒng)只能通過(guò)特定瀏覽器查看與,可移植性差的問(wèn)題,開(kāi)發(fā)了采用QT框架的視頻解碼客戶端,實(shí)現(xiàn)了跨平臺(tái)的實(shí)時(shí)觀測(cè),改變了原系統(tǒng)對(duì)于瀏覽器的依賴性,提高了Mjpg-streamer遠(yuǎn)程視頻系統(tǒng)的可移植性,使得系統(tǒng)的適用范圍及使用方式更加寬泛及大眾化。

        關(guān)鍵詞:視頻解碼;QT;跨平臺(tái);Mjpg-streamer

        0 引言

        近年來(lái),基于Mjpg-streamer的遠(yuǎn)程視頻系統(tǒng)隨著嵌入式技術(shù),多媒體技術(shù),計(jì)算機(jī)網(wǎng)絡(luò)安全技術(shù)的快速發(fā)展也在不斷的更新與發(fā)展。但在某些特定的需求下,這個(gè)工程并不能達(dá)到我們的要求,隨著技術(shù)的不斷進(jìn)步,人們對(duì)簡(jiǎn)單、快捷、方便的追求日益提高,這就對(duì)項(xiàng)目的可移植性要求越來(lái)越高。

        本文提出了一種基于ARM11+linux嵌入式的跨平臺(tái)的遠(yuǎn)程視頻系統(tǒng),鑒于QT框架強(qiáng)大的移植性,研究人員決定為基于Mjpeg-streamer的遠(yuǎn)程視頻系統(tǒng)開(kāi)發(fā)視頻解碼客戶端并采用QT開(kāi)發(fā)框架,實(shí)現(xiàn)跨平臺(tái)的實(shí)時(shí)觀測(cè),改變了對(duì)原系統(tǒng)依賴于瀏覽器的狹隘性,以便于在各個(gè)系統(tǒng)下更簡(jiǎn)便的使用視頻監(jiān)控系統(tǒng)。

        1 系統(tǒng)總體設(shè)計(jì)

        整個(gè)無(wú)線視頻傳輸系統(tǒng)包括客戶端和服務(wù)器端兩個(gè)部分。服務(wù)器端(嵌入式Linux系統(tǒng)平臺(tái)上基于Mjpg-streamer設(shè)計(jì)的服務(wù)器軟件)實(shí)現(xiàn)視頻數(shù)據(jù)的采集、處理以及發(fā)送;客戶端(基于Qt開(kāi)發(fā)框架的視頻解碼程序)負(fù)責(zé)數(shù)據(jù)的接受以及顯示。首先服務(wù)器端通過(guò)攝像頭采集視頻數(shù)據(jù),進(jìn)行壓縮處理后通過(guò)無(wú)線wifi將數(shù)據(jù)發(fā)送到客戶端,客戶端對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)解碼并顯示視頻畫面。

        該系統(tǒng)以S3C6410處理器為核心,外圍器件有Flash 、SDRAM、以太網(wǎng)卡DM9000以及USB接口的S608攝像頭,在Linux環(huán)境下對(duì)攝像頭采集到的原始圖像幀進(jìn)行處理以及壓縮,通過(guò)網(wǎng)絡(luò)協(xié)議傳輸?shù)缴衔粰C(jī)進(jìn)行顯示,硬件平臺(tái)結(jié)構(gòu)如圖1所示:

        圖1 系統(tǒng)硬件平臺(tái)結(jié)構(gòu)圖

        2 系統(tǒng)軟件設(shè)計(jì)

        系統(tǒng)采用C/S架構(gòu),服務(wù)器端采用嵌入式Linux系統(tǒng)作為軟件平臺(tái),在該平臺(tái)上基于Mjpg-streamer設(shè)計(jì)服務(wù)器軟件??蛻舳塑浖腔赒t開(kāi)發(fā)框架的視頻解碼程序??傮w工作流程是由USB攝像頭采集視頻數(shù)據(jù),服務(wù)器端通過(guò)無(wú)線wifi將數(shù)據(jù)發(fā)送到其他平臺(tái)的客戶端上進(jìn)行顯示,同時(shí)服務(wù)器端采用了多線程機(jī)制,實(shí)現(xiàn)了多個(gè)客戶端可同時(shí)顯示視頻畫面。

        2.1構(gòu)建ARM+Linux嵌入式平臺(tái)

        在系統(tǒng)硬件平臺(tái)上構(gòu)建嵌入式Linux系統(tǒng),需要引導(dǎo)程序BootLoader和Linux源碼,本系統(tǒng)一直BootLoader源碼,然后用MiniUSB接口將其燒寫到Flash中,從Flash中啟動(dòng),引導(dǎo)在PC機(jī)上交叉編譯后的Linux鏡像及根文件系統(tǒng),之后啟動(dòng)Linux系統(tǒng)[1]。

        1)編譯NAND啟動(dòng)方式的uboot.bin

        本系統(tǒng)的BootLoader采用開(kāi)源的uboot軟件,首先解壓源碼到虛擬機(jī),然后進(jìn)入源碼目錄執(zhí)行編譯nand flash的啟動(dòng)鏡像文件的命令,生成uboot.bin即為啟動(dòng)文件。

        2)編譯Linux2.6.28內(nèi)核鏡像文件

        Kernel文件采用linux-2.6.28,首先解壓內(nèi)核源碼到虛擬機(jī),然后,進(jìn)入源碼目錄執(zhí)行make menuconfig命令,按系統(tǒng)需求配置裁剪內(nèi)核,最后,執(zhí)行make命令生成zImage即為L(zhǎng)inux內(nèi)核文件。

        3)使用BusyBox生成基本根文件系統(tǒng)

        本系統(tǒng)使用BusyBox-1.13.4生成根文件系統(tǒng),首先,解壓內(nèi)核源碼到虛擬機(jī),然后進(jìn)入源碼目錄執(zhí)行make menuconfig命令,按系統(tǒng)需求配置BusyBox,執(zhí)行make;make install會(huì)得到相應(yīng)的bin,linuxrc,sbin目錄文件,基于以上文件建立自己的根文件系統(tǒng),最后通過(guò)mkyaffs2image工具生成根文件系統(tǒng)的鏡像文件[2]。

        4)驅(qū)動(dòng)的配置,將所有USB攝像頭驅(qū)動(dòng)編譯進(jìn)內(nèi)核。

        # make menuconfig

        Device Drivers

        Multimedia support

        [*]Video capture adapters --->

        [*] V4L USB devices --->

        將上面兩個(gè)配置選項(xiàng)下的子選項(xiàng)全部選上,這樣本系統(tǒng)基本上可以支持市面上大多數(shù)的攝像頭,而不僅僅局限于采用OV511,ZC03控制器的攝像頭了。

        2.2視頻服務(wù)器軟件的設(shè)計(jì)

        Mjpg-streamer是一款免費(fèi)的視頻流服務(wù)器軟件,采用的是V4L2視頻設(shè)備開(kāi)發(fā)框架,它能從攝像頭采集圖像以JPEG格式通過(guò)TCP/IP網(wǎng)絡(luò)協(xié)議傳輸?shù)缴衔粰C(jī)進(jìn)行顯示。

        Mjpg-streamer移植

        由于開(kāi)發(fā)板采用的是ARM11架構(gòu)的S3C6410處理器,所以在進(jìn)行交叉編譯的候需要將Mjpg-streamer源碼目錄中,所有Makefile文件的CC=gcc改成CC=arm-linux-gcc,然后進(jìn)行編譯,生成input_uvc.so、input_control.so、output_http.so、output_file.so組件。

        服務(wù)器軟件工作流程

        首先是初始化,包括輸入初始化和輸出初始化。輸入初始化,主要是調(diào)用V4L2對(duì)攝像頭初始化,包括捕獲視頻尺寸等設(shè)置。輸出初始化,主要是根據(jù)啟動(dòng)參數(shù)配置輸出,比如主頁(yè)文件的目錄,使用的端口號(hào)等。接下來(lái)運(yùn)行輸入和輸出函數(shù),二者都會(huì)創(chuàng)建線程,并且會(huì)將線程從進(jìn)程中獨(dú)立出來(lái)。輸入線程會(huì)創(chuàng)建抓圖線程cam_thread。這個(gè)線程就是輸入線程的主體,它是一個(gè)循環(huán),只要用戶沒(méi)有按下Ctrl+C循環(huán)就會(huì)永遠(yuǎn)繼續(xù)下去。抓圖函數(shù)uvcGrab以阻塞方式等待圖像數(shù)據(jù),當(dāng)有一幀數(shù)據(jù)到達(dá)后先處理為JPEG文件,對(duì)于YUYV格式的圖像數(shù)據(jù)先要轉(zhuǎn)換成RGB格式,再調(diào)用libjpeg庫(kù)壓縮為JPEG文件,對(duì)于MJPEG格式的輸入需要插入Huffman數(shù)據(jù)表。捕獲并處理了一幀視頻之后再通知所有等待數(shù)據(jù)的客戶端線程。輸出線程分為兩大部分:并發(fā)服務(wù)器線程和客戶端處理線程。并發(fā)服務(wù)器線程server_thread負(fù)責(zé)監(jiān)聽(tīng)客戶端請(qǐng)求,一旦有請(qǐng)求就創(chuàng)建一個(gè)新的客戶端線程專門負(fù)責(zé)來(lái)自此客戶端的HTTP請(qǐng)求。這樣服務(wù)器線程就可以一直監(jiān)聽(tīng)客戶端請(qǐng)求,本系統(tǒng)設(shè)置的最大可以處理的客戶端數(shù)為10。一個(gè)客戶端線程client_thread只負(fù)責(zé)處理一個(gè)客戶端響應(yīng),也就是只響應(yīng)一個(gè)IP地址的請(qǐng)求。進(jìn)入client_thread之后,將會(huì)發(fā)送HTTP響應(yīng)頭。通過(guò)設(shè)置了一些響應(yīng)頭,使得服務(wù)器可以不斷地發(fā)送JPEG數(shù)據(jù)給客戶端。pthread_cond_wait以阻塞方式等待一幀數(shù)據(jù)的到來(lái),一旦有JPEG數(shù)據(jù)就馬上把數(shù)據(jù)從全局緩沖區(qū)中取出,發(fā)送給客戶端。整個(gè)工作流程如圖2所示:

        圖2 服務(wù)器端的工作流程圖

        2.3視頻客戶端軟件的設(shè)計(jì)

        為了能夠?qū)崿F(xiàn)跨平臺(tái)的實(shí)時(shí)查看視頻,鑒于Qt開(kāi)發(fā)框架強(qiáng)大的移植性,我們開(kāi)發(fā)了Qt版的視頻解碼程序,并編譯了各個(gè)主流平臺(tái)的版本,實(shí)現(xiàn)了真正意義上的跨平臺(tái)??蛻舳说目傮w框架結(jié)構(gòu)如圖3所示[3]:

        圖3 客戶端總體框架結(jié)構(gòu)

        從Mjpg-Streamer源碼中的send_stream()函數(shù)可以看出,當(dāng)客戶端向服務(wù)器端發(fā)送請(qǐng)求之后,服務(wù)器端會(huì)返回以http作為響應(yīng)頭的視頻數(shù)據(jù)流。另外為了避免不斷的發(fā)送請(qǐng)求,響應(yīng),采用了服務(wù)器推送技術(shù)。即將content-type指定為:content-type:multipart/x-mixed-replace;bound

        ary=BOUNDARY。由于jpeg圖片有固定的幀格式,我們只需將接收到的數(shù)據(jù)流按位分析,找到0xff 0xd8開(kāi)頭,0xff 0xd9結(jié)尾的這個(gè)數(shù)據(jù)段,將其保存在字符數(shù)組中,并轉(zhuǎn)換成jpeg圖片,在label控件上顯示,就是一幀圖像的顯示了,依次循環(huán),就完成了視頻流的解碼。具體的是解碼算法流程圖如圖4所示[4]:

        圖4 視頻解碼算法

        3 跨平臺(tái)的測(cè)試

        為了測(cè)試跨平臺(tái)的視頻顯示效果,我們分別在ARM-Linux開(kāi)發(fā)板、Fedora9系統(tǒng)和Android4.4系統(tǒng)下進(jìn)行測(cè)試。

        定制化手持式控制終端,采用ARM-Linux架構(gòu),通過(guò)無(wú)線網(wǎng)卡與服務(wù)器端進(jìn)行ad-hoc連接,將視頻接收并顯示在TFT液晶屏上,如圖5所示:

        圖5 在ARM-Linux開(kāi)發(fā)板上測(cè)試客戶端的程序

        在VMware虛擬機(jī)中安裝Fedora9,通過(guò)無(wú)線路由器做中介,使服務(wù)器端與Fedora9系統(tǒng)的客戶端進(jìn)行連接,并將視頻顯示在客戶端中,如圖6所示:

        圖6 在Fedora9系統(tǒng)上測(cè)試客戶端程序

        小米4手機(jī)自建熱點(diǎn)網(wǎng)絡(luò),服務(wù)器端通過(guò)無(wú)線網(wǎng)卡連接到熱點(diǎn),與Android4.4系統(tǒng)的客戶端進(jìn)行通信,點(diǎn)擊圖7中的紅點(diǎn)即可開(kāi)始接收顯示視頻,如圖7所示[5]:

        圖7 在Android4.4系統(tǒng)上測(cè)試客戶端程序

        4 總結(jié)

        該系統(tǒng)突破了以往只能通過(guò)特定瀏覽器查看的限定,實(shí)現(xiàn)了用戶在各個(gè)版本中觀看視頻的功能,使得操作簡(jiǎn)單,攜帶設(shè)備更方便,解決了以往運(yùn)行時(shí)必須使用某幾類瀏覽器的問(wèn)題,讓該系統(tǒng)更加整體化。同時(shí)客戶端的圖像可以實(shí)時(shí)顯示,沒(méi)有延時(shí),圖像清晰。該系統(tǒng)的用戶界面窗口簡(jiǎn)潔大方,設(shè)計(jì)美觀,操作人員容易學(xué)習(xí)操作,任何人都可以輕易實(shí)現(xiàn)功能,解決了只有專業(yè)人員才能使用的限制。

        參考文獻(xiàn)

        [1] 肖兒良,毛海軍,鞠軍平,等.基于開(kāi)源軟件MJPG_Streamer的智能視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2013,6(6):84-87.

        [2] 李亞?wèn)|.基于ARM的履帶式目標(biāo)檢測(cè)機(jī)器人研究與實(shí)現(xiàn) [M].南京:河海大學(xué),2013.

        [3] 陳恒鑫,林 威,張欽宇.基于Mjpg-streamer的移動(dòng)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制2014.22(11):3597-3599.

        [4] 陳金輝.基于Mjpg-streamer的遠(yuǎn)程視頻監(jiān)控系統(tǒng) [M].衡陽(yáng):湖南工學(xué)院,2012.

        [5] 郭加貝.基于Android智能手機(jī)視頻監(jiān)控的應(yīng)用軟件開(kāi)發(fā)[M].杭州:杭州電子科技大學(xué),2011.

        Cross-platform Wireless Video Transmition System Based on Mjpeg-streamer

        Zhu Chaozheng, Zhang Yiwei, Cheng Yujia, Yan Xijun
        (College of Computer and Information, Hohai University, Nanjing 210098, China)

        Abstract:In order to solve the problems that remote video system based on Mjpg-streamer only can be viewed through a particular browser and has poor portability, video decoding using QT framework is developed in the client side to realize the real-time observation of cross-platform. It changes the dependence on browsers of original system, and enhances the portability of Mjpg-streamer remote video system, which makes the usage scope and mode of the system wider and more popular.

        Key words:Video Decoding; QT ;Cross-platform;Mjpg-streamer

        收稿日期:(2015.04.28)

        作者簡(jiǎn)介:祝朝政(1995-),男,信陽(yáng),河海大學(xué)計(jì)算機(jī)與信息學(xué)院,研究方向:計(jì)算機(jī)科學(xué)與技術(shù),嵌入式系統(tǒng),南京,210098;張毅偉(1993-),男,南通,河海大學(xué)計(jì)算機(jī)與信息學(xué)院,研究方向:計(jì)算機(jī)科學(xué)與技術(shù),南京,210098;程禹嘉(1996-),女,吉林,河海大學(xué)計(jì)算機(jī)與信息學(xué)院,研究方向:計(jì)算機(jī)科學(xué)與技術(shù),南京,210098;嚴(yán)錫君(1963-),男,南通,河海大學(xué)計(jì)算機(jī)與信息學(xué)院,副教授,研究方向:無(wú)線傳感器網(wǎng)絡(luò)、嵌入式系統(tǒng),南京,210098;

        文章編號(hào):1007-757X(2016)01-0057-03

        中圖分類號(hào):TP393

        文獻(xiàn)標(biāo)志碼:A

        猜你喜歡
        跨平臺(tái)
        跨層級(jí)網(wǎng)絡(luò)、跨架構(gòu)、跨平臺(tái)的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
        一款游戲怎么掙到全平臺(tái)的錢?
        潛力雙跨平臺(tái):進(jìn)階:誰(shuí)將跨入下一個(gè)“十大”?
        跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
        基于C++語(yǔ)言的跨平臺(tái)軟件開(kāi)發(fā)的設(shè)計(jì)
        基于C++語(yǔ)言的跨平臺(tái)軟件開(kāi)發(fā)
        移動(dòng)互聯(lián)網(wǎng)應(yīng)用跨平臺(tái)開(kāi)發(fā)
        一種虛擬現(xiàn)實(shí)應(yīng)用程序跨平臺(tái)方法的研究
        基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
        基于OPC跨平臺(tái)通信的電機(jī)監(jiān)測(cè)與診斷系統(tǒng)
        国产午夜亚洲精品理论片不卡| 日本熟妇美熟bbw| 久久久av精品波多野结衣| 亚洲人成综合网站在线| 台湾佬中文偷拍亚洲综合| 在线国产激情视频观看| 久久天天躁狠狠躁夜夜躁2014| 久久免费看少妇高潮v片特黄 | 亚洲中文字幕精品一区二区| 国产精品毛片极品久久| 永久免费人禽av在线观看 | 亚洲av久久久噜噜噜噜| 国产成人无码一二三区视频| 一本色道久久综合亚洲精品蜜臀| 久久亚洲精品国产av| 人妻哺乳奶头奶水| 女同亚洲女同精品| 性一交一乱一乱一视频亚洲熟妇| 成人性生交大片免费入口| 羞羞视频在线观看| 久久久久亚洲AV无码专区喷| 女同在线视频一区二区| 98色婷婷在线| 97影院在线午夜| 国产aⅴ丝袜旗袍无码麻豆 | 日本人妻免费在线播放| 国产真人性做爰久久网站| 国产va免费精品高清在线观看| 日产一区一区三区区别| 久久精品国产亚洲av久| 狠狠躁夜夜躁人人爽天天天天97| 亚洲AV成人综合五月天在线观看| 国产女优一区在线观看| 美女把尿囗扒开让男人添| 在线播放国产女同闺蜜| 精品一区二区三区牛牛| 全黄性性激高免费视频| 日本一区二区不卡视频| 中文字幕中文字幕人妻黑丝| 丰满少妇高潮惨叫久久久| 精品久久久久久中文字幕|