<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM9的視頻采集傳輸系統

基于A(yíng)RM9的視頻采集傳輸系統

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

  FFMPEG是一個(gè)音視頻數據的采集記錄、編碼及流式傳輸的完全解決方案。該項目包括下面組件:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3 測試結果及展望

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

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


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

關(guān)鍵詞: ARM9 視頻采集 傳輸系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>