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

        ?

        基于DaVinci技術(shù)的移動(dòng)視頻服務(wù)器的軟件設(shè)計(jì)

        2012-06-06 08:14:02楊明極
        電視技術(shù) 2012年1期
        關(guān)鍵詞:數(shù)據(jù)流編碼服務(wù)器

        楊明極,陳 楠

        (哈爾濱理工大學(xué)測(cè)控技術(shù)與通信工程學(xué)院,黑龍江 哈爾濱 150080)

        數(shù)字視頻技術(shù)正在逐步進(jìn)入人們的工作和生活中,各種嵌入式應(yīng)用和電子產(chǎn)品由于增加了視頻功能而提高了價(jià)值。例如,用戶可以使用移動(dòng)視頻服務(wù)器方便地看到交通路口的實(shí)時(shí)情況,可以看到家中需要照顧的老人和小孩,家長(zhǎng)還可以隨時(shí)看到孩子在幼兒園的情況等。為了應(yīng)對(duì)這種需求,2005 年,TI推出了 DaVinci技術(shù)[1],將可編程器件的靈活性和固定功能器件的高效率結(jié)合在一起,支持各種數(shù)字視頻的設(shè)計(jì)要求。在軟件方面,由于系統(tǒng)較大并且應(yīng)用線程較多,因此有必要使用嵌入式操作系統(tǒng)。Linux操作系統(tǒng)具有開放源代碼、易于移植、資源豐富、免費(fèi)等優(yōu)點(diǎn),在嵌入式領(lǐng)域得到廣泛應(yīng)用。

        1 系統(tǒng)平臺(tái)概述

        設(shè)計(jì)的主要目標(biāo)是對(duì)視頻圖像進(jìn)行采集,然后將采集到的視頻圖像經(jīng)過壓縮編碼處理,最后通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器上,允許手機(jī)客戶端進(jìn)行實(shí)時(shí)監(jiān)控。DaVinci平臺(tái)的特點(diǎn)是基于DSP+ARM的SoC芯片。提供了軟件、開發(fā)工具、技術(shù)支持等系統(tǒng)組件,可以高效地開發(fā)數(shù)字多媒體系統(tǒng),Linux操作系統(tǒng)可以提供多種進(jìn)程間的通信機(jī)制,能夠統(tǒng)一管理系統(tǒng)資源,為用戶提供訪問硬件的接口[2],均可使設(shè)計(jì)達(dá)到要求。

        1.1 系統(tǒng)硬件平臺(tái)

        DaVinci的TMS320DM6467處理器是為了滿足嵌入式設(shè)備的圖像編/解碼的應(yīng)用而設(shè)計(jì),集成了一個(gè)ARM926EJ-S核與一個(gè)C64x+DSP核。其中ARM處理器主頻為297 MHz,內(nèi)核可嵌入Linux操作系統(tǒng),主要起控制和管理作用;DSP處理器主頻為594 MHz,其內(nèi)核相當(dāng)于一個(gè)“黑匣子”,用DSP/BIOS來處理編解碼算法。DSP與ARM之間通過引擎和服務(wù)器完成通信和交互[3]。系統(tǒng)以TMS320DM6467處理器為核心,同時(shí)包括視頻采集模塊、用于上傳視頻到互聯(lián)網(wǎng)的以太網(wǎng)模塊、用于存儲(chǔ)用戶信息的I2C接口E2PROM以及可用于系統(tǒng)升級(jí)的RS-232接口和用于存儲(chǔ)視頻的硬盤接口[4],系統(tǒng)的功能框圖如圖1所示。

        圖1 系統(tǒng)的功能框圖

        1.2 系統(tǒng)軟件平臺(tái)

        系統(tǒng)采用的是Monta Vista軟件公司的Monta Vista Linux操作系統(tǒng),它的可搶占內(nèi)核技術(shù)可以顯著降低內(nèi)核抖動(dòng)和延遲,以保證系統(tǒng)的實(shí)時(shí)響應(yīng)。Monta Vista公司提供了100多種板級(jí)硬件平臺(tái)支持和30多種處理器的通用代碼體系,有利于Linux中U-Boot移植、內(nèi)核移植及根文件系統(tǒng)的構(gòu)建[5]。軟件架構(gòu)如圖2所示。

        圖2 軟件架構(gòu)圖

        2 數(shù)據(jù)采集模塊設(shè)計(jì)

        Video4Linux是Linux內(nèi)核中支持視頻設(shè)備驅(qū)動(dòng)的編程接口。視頻圖像的采集是通過Video4Linux提供的上層API來控制視頻設(shè)備的驅(qū)動(dòng)程序,然后完成圖像實(shí)時(shí)采集。當(dāng)攝像頭驅(qū)動(dòng)程序加載后,系統(tǒng)把攝像頭映射為/dev/video設(shè)備文件,開始采集視頻信息。視頻圖像的采集用Video4Linux的API接口配合mmap()函數(shù)實(shí)現(xiàn),其流程如圖3所示。

        圖3 采集模塊流程圖

        首先系統(tǒng)函數(shù)fd=open(/dev/video,O_RDWR)打開采集設(shè)備,然后由函數(shù)ioctl(fd,VIDIOC_GCAP)來獲得采集設(shè)備信息,并且由函數(shù)ioctl(fd,VIDIOC_GPICT)設(shè)置圖像信息,并將獲得的信息存在各自的分量中。用系統(tǒng)調(diào)用函數(shù)ioctl(fd,VIDIOC_GMBUF)初始化video_mbuf得到buffer信息,包括幀數(shù)及幀的大小等信息。再用函數(shù)mmap()把設(shè)備文件信息映射到內(nèi)存中。最后用ioctl(fd,VIDIOC_SYNC)函數(shù)判斷一幀圖像是否讀取完畢,若讀取完畢則關(guān)閉設(shè)備。采集到的視頻數(shù)據(jù)存放到data地址的內(nèi)存區(qū)域內(nèi),然后交給應(yīng)用程序進(jìn)行處理。

        3 數(shù)據(jù)傳輸模塊設(shè)計(jì)

        移動(dòng)視頻服務(wù)器要求視頻數(shù)據(jù)實(shí)時(shí)傳輸,其質(zhì)量要求是端到端的時(shí)延、時(shí)延抖動(dòng)和分組丟失率[6]。針對(duì)多媒體數(shù)據(jù)流的傳輸特性,本文采用RTP/RTCP實(shí)時(shí)數(shù)據(jù)傳輸方式。通過時(shí)間戳來保持采樣和播放之間的同步,同時(shí)保證視頻信號(hào)的還原性。因此在RTP的數(shù)據(jù)包中加入了時(shí)間戳和序列號(hào)等信息。RTP通常不作為獨(dú)立的網(wǎng)絡(luò)層,而把它看作應(yīng)用層的一部分,在應(yīng)用程序之下,UDP之上。發(fā)送端將采樣到的媒體數(shù)據(jù)封裝成RTP格式,然后通過RTP底層調(diào)用相關(guān)的UDP API函數(shù)把數(shù)據(jù)發(fā)送出去。RTP有兩個(gè)鏈接組成,其中RTP是傳送實(shí)時(shí)數(shù)據(jù)的;RTCP則監(jiān)控傳送質(zhì)量并且傳送正在進(jìn)行的相關(guān)數(shù)據(jù)信息。RTP和RTCP配合使用,保證傳送和接收的可靠性并能有效提高傳輸效率。

        oRTP是實(shí)現(xiàn)庫(kù),具有包調(diào)度、自動(dòng)發(fā)送RTCP包、自適應(yīng)抖動(dòng)補(bǔ)償?shù)裙δ堋J紫纫贚inux平臺(tái)上建立oRTP協(xié)議棧,把oRTP移植到達(dá)芬奇系統(tǒng)后展開RTP/RTCP模塊編程設(shè)計(jì),本文采用全局結(jié)構(gòu)指針prtpstat開始實(shí)現(xiàn)對(duì)RTP/RTCP模塊的訪問和控制。代碼如下:

        其中,STREAMS_COUNT表示系統(tǒng)可支持的最多數(shù)據(jù)流的數(shù)目;PACKET_SIZE表示RTP的數(shù)據(jù)流的最大長(zhǎng)度;TS_INC表示RTP的數(shù)據(jù)流時(shí)間戳的遞增量;runcond變量表示RTP線程的運(yùn)行狀態(tài);channels表示RTP當(dāng)前的運(yùn)行任務(wù)數(shù)量;SessionSet表示oRTP中控制多任務(wù)的數(shù)據(jù)結(jié)構(gòu)類型;RtpSession表示控制RTP任務(wù),包含一個(gè)RTP任務(wù)的所有必要的信息,一個(gè)RtpSession代表一個(gè)RTP任務(wù),把網(wǎng)絡(luò)地址和負(fù)載類型配置好后就可以發(fā)送媒體流;STREAMS_COUNT表示最多可支持并發(fā)的RTP任務(wù)的數(shù)量;buffer指針為媒體流的數(shù)據(jù)緩沖區(qū);user_ts表示任務(wù)時(shí)間戳的增值量;connected表示任務(wù)的連接狀態(tài),當(dāng)任務(wù)連接成功后,對(duì)connected置1,否則置0。RTP在執(zhí)行過程有初始化階段、數(shù)據(jù)流的傳輸階段、任務(wù)結(jié)束階段3個(gè)階段:初始化階段就是完成prtpstat指針的初始化過程。數(shù)據(jù)流的傳輸包括RtpSession初始化,即網(wǎng)絡(luò)地址和負(fù)載的配置,還有對(duì)數(shù)據(jù)流的封裝和傳輸及RTCP信號(hào)的傳輸過程。數(shù)據(jù)包的發(fā)送是調(diào)用oRTP協(xié)議棧中的rtp_session_send_with_ts(RtpSession* session,const uint8_t* buffer,int len,uint32_t userts)函數(shù)來實(shí)現(xiàn)的,其中 Session為任務(wù)指針,buffer為數(shù)據(jù)流首地址,len為數(shù)據(jù)流的長(zhǎng)度,userts為數(shù)據(jù)流時(shí)間戳。此函數(shù)執(zhí)行后,依次把數(shù)據(jù)流加上RTP協(xié)議頭、UDP頭、IP頭。當(dāng)各個(gè)頭部信息設(shè)置好后就會(huì)得到一個(gè)完整的IP包,然后通過網(wǎng)絡(luò)發(fā)送。任務(wù)結(jié)束階段是對(duì)相關(guān)的指針回收和變量設(shè)置等操作。待發(fā)送的數(shù)據(jù)流通過DSP編碼模塊的輸出得到,將數(shù)據(jù)用rtp_session_send_with_ts()函數(shù)發(fā)送即可。

        4 移動(dòng)視頻服務(wù)器的整體設(shè)計(jì)

        本文的視頻算法選用的是H.264,并打包在一個(gè)Codec服務(wù)器里,由Codec Engine管理。DSP核運(yùn)行DSP/BIOS實(shí)時(shí)操作系統(tǒng),執(zhí)行處理算法。

        整體模塊設(shè)計(jì)包括3個(gè)部分:主模塊(main.c)、視頻模塊(video.c)和顯示模塊(display.c)。模塊的初始化均由公用模塊Rendezvous來同步,該模塊首先執(zhí)行初始化,用POSIX條件來同步各部分模塊。每個(gè)模塊執(zhí)行各自的初始化,然后向Rendezvous模塊發(fā)送信號(hào)。此時(shí)所有模塊完成初始化,然后各模塊開始執(zhí)行其各自主循環(huán)[7]。

        4.1 主模塊

        主模塊是執(zhí)行必要的初始化任務(wù),用戶可以通過應(yīng)用程序所提供的命令行參數(shù)初始化編碼運(yùn)行時(shí)間,并且根據(jù)這些參數(shù)創(chuàng)建視頻。主模塊流程如圖4所示。

        圖4 主模塊流程圖

        主模塊首先通過DaVinci上的檢測(cè)開關(guān)S3的上電默認(rèn)狀態(tài)來檢測(cè)視頻標(biāo)準(zhǔn),當(dāng)為0時(shí),表示PAL制式;當(dāng)為1時(shí),表示NTSC制式。之后解析命令行參數(shù),設(shè)置環(huán)境變量,包括啟動(dòng)方式、圖像大小、串口參數(shù)、Linux啟動(dòng)參數(shù)、文件系統(tǒng)路徑、IP地址等。Codec Engine初始化,打開同步初始化Rendezvous的目錄,主模塊開始解析與視頻相關(guān)的命令,通過調(diào)用CERuntine_init()函數(shù)開啟編碼引擎,調(diào)用Rendezvous_open(),開始視頻的創(chuàng)建,并且進(jìn)入控制線程??刂凭€程負(fù)責(zé)用戶界面上實(shí)現(xiàn)與用戶的交互接口。

        4.2 視頻模塊

        視頻模塊主要是采用視頻編碼算法對(duì)視頻前端采集到的圖像數(shù)據(jù)進(jìn)行編碼算法處理,在客戶端顯示之前對(duì)編碼處理過的數(shù)據(jù)進(jìn)行解碼。視頻模塊流程如圖5所示。

        圖5 視頻模塊流程圖

        視頻模塊首先通過FifoUtil_open()函數(shù)建立目標(biāo),打開和顯示進(jìn)程間的數(shù)據(jù)緩存并且用于建立兩進(jìn)程之間的通信交流通道。之后調(diào)用pthread_create()函數(shù)創(chuàng)建視頻模塊。用initCaptureDevice()函數(shù)初始化視頻前端的采集設(shè)備,使視頻數(shù)據(jù)輸入通道完成初始化工作。然后用VIDIOC_S_INPUT設(shè)置用戶用所選擇的輸入信號(hào),視頻標(biāo)準(zhǔn)(NTSC或PAL)由采集設(shè)備檢測(cè),對(duì)照Linux內(nèi)核命令行的視頻標(biāo)準(zhǔn)進(jìn)行驗(yàn)證,最后使用VIDIOC_STREAMON開始對(duì)采集器件驅(qū)動(dòng)器里的視頻幀進(jìn)行采集。Codec Engine_open()函數(shù)是建立一個(gè)Codec Engine。之后,VIDENC_Create()函數(shù)完成視頻的編碼任務(wù),設(shè)計(jì)支持H.264編碼格式[8]。模塊最后調(diào)用Memory_contigAlloc()函數(shù)為編碼緩沖和顯示緩沖分配連續(xù)的內(nèi)存空間。到此結(jié)束視頻模塊的初始化,然后使用Rendezvous公用模塊和其他模塊同步,此時(shí)視頻模塊進(jìn)入主循環(huán)。

        4.3 顯示模塊

        顯示模塊將視頻處理子系統(tǒng)前端采集到的視頻數(shù)據(jù)的原始幀復(fù)制到視頻子系統(tǒng)后端的幀緩存器里。在DSP進(jìn)行處理的同時(shí),復(fù)制一個(gè)獨(dú)立的顯示模塊。顯示模塊最先通過initDisplayDevice()函數(shù)來完成顯示設(shè)備的初始化,在此函數(shù)中,調(diào)用mmap()函數(shù)完成地址重映射。然后使用FBIOPUT_VSCREENINFO函數(shù),將分辨力設(shè)置為320×240格式。當(dāng)顯示模塊完成初始化以及其他模塊都完成初始化時(shí),顯示模塊通過Rendezvous_open()函數(shù)進(jìn)入主循環(huán)。

        5 小結(jié)

        本文在DaVinci平臺(tái)上實(shí)現(xiàn)了移動(dòng)視頻服務(wù)器的軟件設(shè)計(jì),主要對(duì)視頻數(shù)據(jù)采集、數(shù)據(jù)傳輸和服務(wù)器整體進(jìn)行軟件設(shè)計(jì)。所設(shè)計(jì)的移動(dòng)視頻服務(wù)器在嵌入式Linux操作系統(tǒng)下和DM6467開發(fā)板上實(shí)現(xiàn)了數(shù)據(jù)采集和傳輸?shù)裙δ?,并且穩(wěn)定運(yùn)行達(dá)到設(shè)計(jì)要求。對(duì)嵌入式應(yīng)用及視頻服務(wù)器的發(fā)展有一定的借鑒意義。

        [1] Texas Instruments.DVEVM getting started guide[EB/OL].[2011-08-25].http://www.kanecomputing.co.uk/pdfs/tmdsevm6446%20getting%20started%20guide.pdf.

        [2]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.

        [3]常國(guó)柱,何維,田增山,等.基于達(dá)芬奇技術(shù)的視頻傳輸系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2010,34(10):39-41.

        [4] Texas Instruments.TMS320DM6446 digital media system on chip[EB/OL].[2011-08-25].http://www.ti.com/lit/ds/sprs283h/sprs283h.pdf.

        [5]馮國(guó)進(jìn).嵌入式Linux驅(qū)動(dòng)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2008.

        [6]張起貴,張勝,張剛.最新DSP技術(shù)——“達(dá)芬奇”系統(tǒng)、框架和組件[M].北京:國(guó)防工業(yè)出版社,2009.

        [7]彭啟琮.達(dá)芬奇技術(shù)——數(shù)字圖像/視頻信號(hào)處理新平臺(tái)[M].北京:電子工業(yè)出版社,2008.

        [8]成嘉,張文雄,李善勁.基于達(dá)芬奇技術(shù)的H.264視頻編碼器的實(shí)現(xiàn)[J].電視技術(shù),2007,31(12):34-36.

        猜你喜歡
        數(shù)據(jù)流編碼服務(wù)器
        基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
        《全元詩(shī)》未編碼疑難字考辨十五則
        汽車維修數(shù)據(jù)流基礎(chǔ)(下)
        子帶編碼在圖像壓縮編碼中的應(yīng)用
        電子制作(2019年22期)2020-01-14 03:16:24
        通信控制服務(wù)器(CCS)維護(hù)終端的設(shè)計(jì)與實(shí)現(xiàn)
        Genome and healthcare
        一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
        得形忘意的服務(wù)器標(biāo)準(zhǔn)
        計(jì)算機(jī)網(wǎng)絡(luò)安全服務(wù)器入侵與防御
        基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
        国产激情视频高清在线免费观看 | 国产二区中文字幕在线观看| 91久久综合精品久久久综合| 18国产精品白浆在线观看免费 | 国产精品女主播福利在线| a级毛片免费观看在线播放| av潮喷大喷水系列无码| 久久久综合九色合综国产| 国产女主播福利一区在线观看| 午夜少妇高潮在线观看视频| 久久影院午夜理论片无码| 国产精品亚洲欧美大片在线看| 1000部精品久久久久久久久 | 精品一区二区三区女同免费| 色久悠悠婷婷综合在线| 伊人精品久久久久中文字幕| 少妇装睡让我滑了进去| 成年男人裸j照无遮挡无码| 亚洲精品女同在线观看| av免费在线免费观看| 99久久人妻无码精品系列| 青青青国产精品一区二区| 永久免费毛片在线播放| 国产精品一区二区久久蜜桃| 国产精品免费一区二区三区四区| 久久久久久国产精品mv| 91人妻无码成人精品一区91 | 成人免费毛片立即播放| 四虎永久在线精品免费网址| 4399理论片午午伦夜理片| 国产 中文 制服丝袜 另类| 国产美女主播福利一区| 国产亚洲精品视频一区二区三区| 国产三级av在线播放| 俺来也俺去啦久久综合网| 国产av大片在线观看| 最新国产激情视频在线观看| 亚洲国产欧美在线观看| 国产性猛交╳xxx乱大交| 亚洲国产精品第一区二区三区| 国产精品一区二区三区播放|