国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM9的視頻采集傳輸系統(tǒng)

基于ARM9的視頻采集傳輸系統(tǒng)

作者: 時(shí)間:2012-11-10 來(lái)源:網(wǎng)絡(luò) 收藏

  FFMPEG是一個(gè)音視頻數(shù)據(jù)的采集記錄、編碼及流式傳輸?shù)耐耆鉀Q方案。該項(xiàng)目包括下面組件:

  a) FFMPEG是音視頻文件格式轉(zhuǎn)換的命令行方式的工具,同時(shí)支持實(shí)時(shí)的采集編碼TV card數(shù)據(jù)。

  b) FFserver可以通過(guò)HTTP/RTSP方式進(jìn)行多媒體數(shù)據(jù)的流式播放。

  c) FFplayer是基于FFMPEG庫(kù)和SDL的播放器。

  d) libavcodec包括了全部FFMPEG音視頻的編解碼庫(kù),libavformat包括了全部支持的音視頻格式的語(yǔ)法和生成庫(kù)。

  FFMPEG庫(kù)支持的編解碼支持格式非常豐富,而且編解碼速度很快;支持指定音視頻捕捉設(shè)備實(shí)時(shí)處理數(shù)據(jù)源并將其保存;FFMEPG能夠通過(guò)命令行參數(shù)指定視頻編解碼、格式轉(zhuǎn)換的幀頻、幀大小及比特率、碼率控制緩沖區(qū)的大??;并且,F(xiàn)FMPEG可以通過(guò)激活視頻的高級(jí)選項(xiàng)來(lái)對(duì)編解碼的方式進(jìn)行控制,包括設(shè)置幀內(nèi)編碼、視頻量化標(biāo)度的設(shè)置、設(shè)定p幀以及b與i幀間的qp因子和偏差、運(yùn)動(dòng)估計(jì)及DCT/IDCT算法的選擇,b幀和運(yùn)動(dòng)矢量以及交織編碼方式的使用。對(duì)于視頻捕捉設(shè)備的選擇也可以通過(guò)參數(shù)來(lái)選定,如/dex/video0或DV1394專用通道等。

  FFMPEG庫(kù)能夠在多種平臺(tái)上運(yùn)行,包括Linux、Windows和Mac OS等系統(tǒng),在嵌入式系統(tǒng)中,由于嵌入式Linux具有源代碼完全開(kāi)放、可移植性強(qiáng)和對(duì)網(wǎng)絡(luò)的支持好等特點(diǎn),所以選用了ARM-Linux系統(tǒng),該系統(tǒng)支持這次選用的架構(gòu)的CPU,而FFMPEG是針對(duì)通用PC的X86架構(gòu)的CPU設(shè)計(jì)的,因此要將FFMPEG移植到架構(gòu)的系統(tǒng)上。首先需要通過(guò)將其交叉編譯成可在ARM-linux上運(yùn)行的庫(kù)。具體步驟如下。

  將下載的最新的FFMPEG源代碼包解壓縮再生成FFMPEG目錄,然后針對(duì)所開(kāi)發(fā)系統(tǒng)的交叉編譯鏈,通過(guò)修改configure文件來(lái)生成Makefile文件,

  然后用make命令通過(guò)讀取生成的Makefile文件來(lái)自動(dòng)編譯生成所需要的FFMPEG庫(kù)文件和可以在ARM開(kāi)發(fā)板上運(yùn)行的二進(jìn)制可執(zhí)行文件。編譯成功以后就可以通過(guò)宿主機(jī)的NFS服務(wù)將宿主機(jī)安裝到開(kāi)發(fā)板上,這樣就可以到相關(guān)目錄下測(cè)試所編譯的FFMPEG能否正常地工作:

  即將對(duì)音頻文件cat.wav和原始的yuv視頻文件編碼生成cat.mpg,如果沒(méi)有輸入數(shù)據(jù)文件,則音視頻捕捉設(shè)備就將起作用,說(shuō)明所需要的交叉編譯生成的FFM-PEG庫(kù)可以正確地運(yùn)行。

2.4 編碼程序的關(guān)鍵技術(shù)

  在設(shè)計(jì)程序時(shí)主要使用FFMPEG的libavformat和libavcodec這兩個(gè)函數(shù)庫(kù),許多視頻文件格式一般只是定義如何將音視頻流編碼進(jìn)一個(gè)獨(dú)立的文件,而不明確指出其使用的編碼工具,libavformat庫(kù)的功能主要是分析視頻文件的語(yǔ)法格式,并將它從流中分離出原始的音視頻流,libavcodec庫(kù)的功能則是按照流格式處理原始的音視頻流編解碼。

  在使用libavformat/libavcodec庫(kù)函數(shù)對(duì)視頻文件進(jìn)行處理時(shí),首先通過(guò)調(diào)用av_register_all()函數(shù)對(duì)其初始化,這個(gè)函數(shù)中定義了所有庫(kù)所能支持的文件格式和編碼器,因此當(dāng)讀取一個(gè)文件時(shí),通過(guò)調(diào)用此函數(shù)來(lái)自動(dòng)使用所對(duì)應(yīng)的格式或者編碼庫(kù)。視頻文件打開(kāi)則通過(guò)av_open_input_file函數(shù)來(lái)實(shí)現(xiàn):

  這個(gè)函數(shù)的最后3個(gè)參數(shù)分別定義了文件的格式、緩沖區(qū)的大小和格式的參數(shù);在這里賦值NULL和0來(lái)指定libavformat庫(kù)函數(shù)自動(dòng)檢測(cè)格式和使用默認(rèn)的緩沖區(qū)的大小。然后就可以讀取文件的流信息:

  來(lái)填充AVFormatContext中關(guān)于流區(qū)域的內(nèi)容,接著通過(guò)一個(gè)循環(huán)尋找到第1段視頻流:

  這樣就可以讀取視頻流的內(nèi)容來(lái)指定選用的編解碼器并將編解碼器打開(kāi):

  這里的定義CODEC_CAP_TRUNCATED是指當(dāng)視頻流被分割成小的數(shù)據(jù)包以后,由于每一幀視頻的數(shù)據(jù)量會(huì)發(fā)生變化,這就需要兩個(gè)視頻幀的邊緣與數(shù)據(jù)包的邊緣匹配,因此在這里定義這個(gè)宏來(lái)告訴編碼器該如何處理它。最后調(diào)用avcodec_alloc_frame()函數(shù)來(lái)分配幀緩沖。

  在編碼端需要使用libavformat庫(kù)函數(shù)來(lái)讀取這些數(shù)據(jù)包,濾除掉不需要的非視頻流數(shù)據(jù),然后循環(huán)調(diào)用libavcodec庫(kù)函數(shù)GetNextFrame(AVFormatContext *pFormatCtx,AVCodecContext * pCodecCtx,int video-Stream,AVFrame * pFrame)來(lái)處理每幀數(shù)據(jù)進(jìn)行編解碼。

  端采用從Video4Linux視頻設(shè)備源中捕捉視頻幀,Video4Linux是Linux下用于獲取音頻和視頻的API接口,現(xiàn)有的Video4Linux有v41和v412兩個(gè)版本,我們采用v4l進(jìn)行編程,在Linux下,將所有外沒(méi)都看做一種特殊的文件,稱之為設(shè)備文件,因此利用v4l API獲取視頻圖像可以通過(guò)調(diào)用open、ioctl等函數(shù),像對(duì)普通文件一樣對(duì)硬件進(jìn)行初始化、設(shè)置硬件屬性和調(diào)用硬件中斷等操作。在打開(kāi)視頻采集設(shè)備后,分別通過(guò)ioctl(vd->fd,VIDIOCGCAP,(vd->ca-pability))函數(shù)的VIDIOCGCAP控制命令,來(lái)獲取關(guān)于視頻采集設(shè)備所能顯示的最大圖像大小,信號(hào)源的通道數(shù)和通過(guò)ioctl(vd->fd,VIDIOCGPICT,(vd->picture))的VIDIOCGPICT來(lái)獲取一些關(guān)于圖像的亮度、對(duì)比度等信息。Video4Linux方式獲取視頻圖像的方式有overlay和mmap兩種,在這里采用了MMAP方式,MMAP方式允許直接將設(shè)備內(nèi)存映射到用戶進(jìn)程的地址空間中,這樣就可以直接在進(jìn)程中讀寫(xiě)內(nèi)存來(lái)控制設(shè)備。在使用libavformat/libavcodec庫(kù)從Vide-o4Linux視頻設(shè)備源中捕捉視頻幀時(shí)需要調(diào)用av_open_input_file()函數(shù),因此,最后還需要修改此函數(shù)中的設(shè)備屬性配置,使之與我們所選用的沒(méi)備相對(duì)應(yīng)。

3 測(cè)試結(jié)果及展望

  在這里使用了ffserver流媒體服務(wù)端組件來(lái)實(shí)現(xiàn)流媒體傳輸,首先需要配置ffserver.conf文件中關(guān)于服務(wù)端主機(jī)的端口號(hào)、傳輸帶寬、延遲,流媒體文件屬性等信息。然后啟動(dòng)ffserver讀取配置文件,就可以在接收端通過(guò)WMP(Windows Media Player)輸入服務(wù)端URL看到實(shí)時(shí)采集的視頻圖像。經(jīng)測(cè)試,目前該嵌入式流媒體服務(wù)器在傳輸MPEG-4視頻時(shí)的幀率可以達(dá)到20幀/s,接收端觀察圖像流暢,畫(huà)面清晰。

  本文提出了一種基于架構(gòu)MC9328MX21的嵌入式系統(tǒng)上實(shí)現(xiàn)MPEG-4流媒體視頻采集,通過(guò)在ARM-Linux操作系統(tǒng)下移植libavformat/libavcode庫(kù),利用該函數(shù)庫(kù)良好的可移植性和Video4Linux完成了本地視頻圖像的采集、編碼等功能,并向網(wǎng)絡(luò)發(fā)送流媒體打包數(shù)據(jù)。該系統(tǒng)具有實(shí)時(shí)性好、可移植性強(qiáng)、低功耗和可遠(yuǎn)程移動(dòng)控制嵌入式系統(tǒng)的特點(diǎn),并且采用軟件實(shí)現(xiàn)其主要功能,有利于系統(tǒng)的二次開(kāi)發(fā)及升級(jí),其應(yīng)用范圍和前景將非常廣闊。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉