<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();