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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼

          基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼

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

          2.1 建立Linux平臺(tái)
          建立Linux系統(tǒng)的基本流程:首先在宿主機(jī)上建立交叉編譯環(huán)境,然后移植Linux的引導(dǎo)程序到目標(biāo)板,最后構(gòu)建Linux系統(tǒng)并移植到目標(biāo)板。構(gòu)建嵌入式Linux系統(tǒng)主要包括對(duì)內(nèi)核進(jìn)行裁剪和配置,根據(jù)實(shí)際的硬件系統(tǒng)進(jìn)行內(nèi)核和外設(shè)驅(qū)動(dòng)程序的移植開(kāi)發(fā),以及構(gòu)建Linux的根文件系統(tǒng)。
          2.2 攝像頭驅(qū)動(dòng)配置
          CMOS攝像頭驅(qū)動(dòng)以MODULES的形式編寫,因?yàn)镸ODULES形式的驅(qū)動(dòng)可動(dòng)態(tài)加載到Linux內(nèi)核。
          加載驅(qū)動(dòng)程序后,就可以像操作普通文件一樣對(duì)攝像頭進(jìn)行操作。如:定義intm_filev412,通過(guò)m_filev412=open(“/dev/camera” O_RDWR)打開(kāi)攝像頭,通過(guò)read(fd,inyuv422,D SIZE)讀取攝像頭的視頻數(shù)據(jù)到數(shù)組inyuv422中,通過(guò)closc(m_filev412)關(guān)閉攝像頭。有了視頻數(shù)據(jù)后,就可以通進(jìn)行編碼。
          2. 3 編碼
          2.3.1 簡(jiǎn)介
          FFmpeg是一個(gè)開(kāi)源免費(fèi)跨平臺(tái)的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據(jù)所你選擇的組件),是一個(gè)集錄制、轉(zhuǎn)換、音/視頻功能為一體的、完整的開(kāi)源解決方案。FFmpeg的開(kāi)發(fā)基于Linux操作系統(tǒng),也可在大多數(shù)操作系統(tǒng)中編譯和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼,AVI、MPEG、OGG、Matroska、ASF等90多種解碼;TCPMP、VLC、MPlayer等開(kāi)源播放器都用到了FFmpeg。
          FFmpeg中FF是指Fast Forward。
          2.3.2 編碼
          OV9650攝像頭輸出的數(shù)據(jù)為yuv422格式,而FFmpeg編碼需要輸入yuv420格式數(shù)據(jù),因此在編碼之前需要先將yuv422格式數(shù)據(jù)轉(zhuǎn)化為yuv 420格式。FFmpeg中的函數(shù)sws_scale()可以實(shí)現(xiàn)這個(gè)過(guò)程。
          在使用FFmpeg編碼之前,首先需要對(duì)FFmpeg庫(kù)進(jìn)行初始化,注冊(cè)所有的器以及文件格式,設(shè)置編碼器碼率、幀速率、編碼像素格式等參數(shù),然后尋找編碼器并打開(kāi),打開(kāi)編碼器之后才可以進(jìn)行編碼。通過(guò)設(shè)置結(jié)構(gòu)體AVCodecContext中的各個(gè)成員參數(shù)來(lái)完成參數(shù)的設(shè)置過(guò)程,例如通過(guò)設(shè)置AVCodecContext->bit_rate,AVCodecContext->width,AVCodecContcxt->height等可以設(shè)置碼率,寬度和高度等,通過(guò)設(shè)置AVCodecContext->pix_fmt=PIX_FMT_YUV420P設(shè)置YUV420像素格式。編碼核心函數(shù)是avcodec_encode_video()。系統(tǒng)每采集一幀數(shù)據(jù),就送給avcodec_encode_video()函數(shù)編碼成H.264視頻流。其編碼流程如圖2所示。

          本文引用地址:http://www.ex-cimer.com/article/148086.htm

          d.JPG


          下面對(duì)編碼流程的各個(gè)步驟中主要函數(shù)的作用進(jìn)行詳細(xì)介紹:
          1)av_register_all():注冊(cè)庫(kù)中含有所有文件格式和器,沒(méi)有這一步將無(wú)法打開(kāi)編解碼器。
          2)av_open_imput_file():打開(kāi)攝像頭視頻文件。
          3)av_find_stream_info():尋找視頻流。
          4)av_find_encoder():尋找編碼器,編碼器參數(shù)需在pCodec中初始化,參數(shù)的初始化很重要,對(duì)編碼的圖像質(zhì)量有很大影響。
          pCodec=avcodec_find_encoder (CODEC_ID_H264);//尋找H.264格式編碼器
          5)avcodec_alloc_frame():為編碼幀分配內(nèi)存。
          pFrame=avcodec_alloc_frame();//pFrame為AVFrame格式
          6)avcodec_open():打開(kāi)編碼器。
          7)av_read_frame():從視頻流中讀取一幀視頻數(shù)據(jù)。
          8)avcodec_encode_video():編碼一幀視頻數(shù)據(jù)。
          9)avcodec_close():關(guān)閉編碼器。
          10)avformat_close_mput file():關(guān)閉視頻攝像頭文件。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
          攝像頭相關(guān)文章:攝像頭原理


          關(guān)鍵詞: FFmpeg 編解碼 嵌入式

          評(píng)論


          相關(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); })();