新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于FFmpeg的遠程視頻監控系統編解碼

        基于FFmpeg的遠程視頻監控系統編解碼

        作者: 時間:2013-03-05 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/148086.htm

        d.JPG


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

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


        關鍵詞: FFmpeg 編解碼 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和平县| 南充市| 探索| 江永县| 来安县| 隆安县| 驻马店市| 晋宁县| 贵溪市| 泉州市| 台北市| 金堂县| 宁波市| 永仁县| 瓦房店市| 柳州市| 西贡区| 鄂尔多斯市| 修武县| 安岳县| 资阳市| 龙胜| 永和县| 漯河市| 太白县| 万全县| 辽宁省| 鹿邑县| 隆回县| 化州市| 江门市| 武穴市| 巫山县| 恩施市| 广元市| 明光市| 塔河县| 航空| 简阳市| 嘉荫县| 红桥区|