《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于FFmpeg的遠程視頻監控系統編解碼
基于FFmpeg的遠程視頻監控系統編解碼
電子科技
辛長春 婁小平 呂乃光
摘要: 在遠程視頻監控系統中視頻數據的編碼傳輸以及解碼顯示是一個重要組成部分,通過對FFmpeg的研究學習,考慮采用FFmpeg來實現編解碼的方法。遠程監控系統由采集發送端和接收處理端組成,采集發送端使用S3C2440作為嵌入式硬件平臺,并通過USB攝像頭OV9650采集視頻數據,經過FFmpeg編碼后傳輸給接收處理端。接收處理端接收到數據后通過FFmpeg實時解碼,采用OpenCV顯示,實現遠程監控。
Abstract:
Key words :

0 引言
隨著視頻編解碼技術、計算機網絡技術、數字信號處理技術和嵌入式系統的發展,以嵌入式網絡視頻服務器為核心的遠程視頻監控系統開始在市場上嶄露頭角。該系統把攝像機輸出的模擬視頻信號通過內置的嵌入式視頻編碼器直接轉換成視頻流,通過計算機網絡傳輸出去。嵌入式網絡視頻服務器具備視頻編碼處理、網絡通信、系統控制等強大功能,直接支持網絡視頻傳輸和網絡管理,使得監控范圍達到前所未有的廣度。在遠程視頻監控系統中,攝像頭獲取的原始視頻流在傳輸之前需要壓縮,而FFmpeg可以將原始視頻壓縮為H264格式視頻流,H264是一種被廣泛使用的高精度視頻的錄制、壓縮和發布格式,因此采用FFmpeg來實現。

1 系統方案
系統是在S3C2440平臺上運行嵌入式Linux系統,使用CMOS攝像頭OV9650獲取實時視頻圖像數據,采用H264標準通過FFmpeg原始視頻進行壓縮編碼成視頻流,通過網絡傳輸,用戶在接收處理端經過FFmpeg解碼之后,使用OpenCV顯示播放即可實時查看遠程視頻圖像。
系統由兩部分組成:采集發送端和接收處理端,采用Client/Server設計模式來實現兩者之間的相互通信,由接收處理端向采集發送端發送控制信號,采集發送端開啟攝像頭進行視頻數據采集,采集的原始視頻數據是yuv422格式,經過FFmpcg編碼壓縮成H.264格式視頻流,經通信網絡傳輸到接收處理端;接收處理端接收到視頻流數據后,經FFmpeg解碼,通過OpenCV進行顯示。采集發送端視頻數據采集和發送采用三星公司的具有ARM920T內核的S3C2440作為嵌入式微控制器,接收處理端采用普通電腦。系統方案如圖1所示。

系統方案

2 采集發送端
采集發送端主要包括嵌入式Linux平臺和攝像頭兩部分,嵌入式Linux平臺需要搭建交叉編譯環境,而攝像頭需要驅動程序才能正常工作。
嵌入式Linux平臺采用三星公司的S3C2440A處理器為硬件平臺,S3C2440A處理器是一款基于ARM920T內核的16/32bit嵌入式處理器,主頻
400MHz,最高可達533MHz,支持30/130/200萬像素CMOS攝像頭,支持linux2.4和Wince4.2雙操作系統,適合應用于對功率和成本都較敏感的嵌入式系統場合。
攝像頭采用Omni Visio公司生產的CMOS攝像頭OV9650,具有高敏感度、低功耗,高分辨率(最高1300X1028 pixels),支持大量常用的圖像格式、支持自動圖像控制等優點。在接口上能夠保持與S3C2440的一致性。輸出圖像最大為130萬像素,輸出圖像格式包括SXGA,VGA,QVG A,CIF,QCIF等,并可以輸出不同尺寸的圖像。對于不同的輸出圖像格式,最高幀率可以不同,最高可達120f/s,輸出的8位數據格式包括YUV/YCbCr(4:2:2)、GRB(4:2:2)、原始RGB數據3種。

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)關閉攝像頭。有了視頻數據后,就可以通FFmpeg進行編碼。
2. 3 FFmpeg編碼
2.3.1 FFmpeg簡介
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所示。

編碼流程


下面對編碼流程的各個步驟中主要函數的作用進行詳細介紹:
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():關閉視頻攝像頭文件。

3 接收處理端
接收處理端可以與任意一個采集發送端進行連接通信。連接后可以接收采集發送端發送的視頻數據,經過FFmpeg解碼后顯示。
3.1 FFmpeg解碼
用FFmpeg解碼的流程與編碼的流程大致相同,只是解碼的核心函數為avcodec_decode_video()。接收處理端接收到一幀數據后,通過avpicture_fill()存儲到AVFrame格式的內存空間中,然后再使用avcodec_decode_video()函數進行解碼。其解碼流程如圖3所示:

解碼流程


3.2.視頻顯示
FFmpeg對H.264解碼出來格式是YUV(.i420)格式,需要轉換成RGB(.rgb24)格式顯示,使用FFMPEG中的sws_scalc()函數可以實現格式轉換。
顯示視頻采用的是OpenCV。顯示的核心函數是cVShowImage(char* name,lpllmage* dst),將得到的RGB(.rgb24)格式數據轉換為OpenCV格式的lpllmage數據,然后顯示在監控窗口上,如圖4所示:

監控畫面



4 結束語
隨著視頻壓縮技術的發展成熟,嵌入式視頻監控逐漸在監控領域占有重要地位。以S3C2440為嵌入式硬件平臺,通過攝像頭采集數據,在嵌入式Linux與Windows操作系統相結合的跨平臺上,實現FFmpeg的編解碼,為實際嵌入式視頻監控系統的視頻壓縮傳輸設計,提供了一種可行的方法。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产三区精品| 99精品欧美一区二区三区综合在线| 免费不卡视频| 久久精品亚洲一区二区三区浴池 | 久久精品一二三| 亚洲免费视频网站| 亚洲尤物在线视频观看| 一区二区三区四区在线| 一区二区三区日韩精品视频| 99视频热这里只有精品免费| 99国产精品久久久久老师| 亚洲美女电影在线| 9久草视频在线视频精品| 99国产一区| 一区二区三区欧美日韩| 亚洲视频观看| 午夜精品久久久久久久久 | 国产精品一区二区三区免费观看| 国产精品久线观看视频| 国产精品九九久久久久久久| 国产精品免费福利| 国产亚洲欧美一区二区| 黄色工厂这里只有精品| 在线日韩视频| 亚洲精选91| 中文一区二区在线观看| 亚洲一区国产一区| 欧美在线亚洲在线| 亚洲精品免费在线播放| 一区二区三区视频在线观看| 亚洲在线电影| 久久九九免费| 欧美成人免费播放| 欧美日韩一区二区三区免费看| 国产精品h在线观看| 国产欧美午夜| 亚洲第一天堂无码专区| 日韩亚洲欧美在线观看| 亚洲伊人一本大道中文字幕| 久久大综合网| 99亚洲视频| 欧美夜福利tv在线| 免费观看一区| 欧美性色aⅴ视频一区日韩精品| 国产酒店精品激情| 在线观看视频日韩| 宅男在线国产精品| 久久激情网站| 亚洲视频欧美在线| 久久久久久久波多野高潮日日| 欧美福利视频在线观看| 国产精品久99| 亚洲电影免费观看高清完整版在线| 99国产精品| 久久精品国产99| 中文亚洲字幕| 久久久精品久久久久| 欧美日本免费| 国内久久视频| 99精品99| 亚洲国产高清在线观看视频| 亚洲午夜女主播在线直播| 久久久久久久综合| 欧美视频日韩| 韩国精品在线观看| 一区二区三区av| 亚洲国产欧美一区二区三区丁香婷| 国产精品99久久99久久久二8| 久久久久91| 欧美亚洲成人免费| 亚洲成人直播| 欧美一区二区精美| 中文久久乱码一区二区| 久久资源av| 国产精品一级在线| 日韩写真视频在线观看| 亚洲国产高清在线| 欧美在线国产精品| 欧美色图五月天| 在线观看欧美日韩国产| 亚洲欧美中文在线视频| 一区二区av在线| 免播放器亚洲一区| 国产日韩免费| 亚洲图片欧洲图片日韩av| 亚洲精品之草原avav久久| 久久免费精品日本久久中文字幕| 欧美性猛交视频| 亚洲精品国久久99热| 久久黄金**| 欧美在线观看视频| 国产精品videosex极品| 亚洲精品乱码久久久久久蜜桃91 | 亚洲视频电影图片偷拍一区| 亚洲精品久久| 久久伊人一区二区| 国产欧美一级| 亚洲在线观看| 亚洲在线中文字幕| 欧美日韩成人网| 亚洲国产精品视频一区| 亚洲成在人线av| 久久久久久久综合| 国产一区二区三区直播精品电影| 亚洲小少妇裸体bbw| 亚洲香蕉在线观看| 欧美女同在线视频| 亚洲欧洲一区二区三区| 亚洲福利国产| 免费久久99精品国产自在现线| 国产视频一区在线观看一区免费| 亚洲深夜激情| 亚洲一区www| 国产精品精品视频| 亚洲线精品一区二区三区八戒| 亚洲一区二区三区高清| 欧美日韩在线视频一区| 99国产精品视频免费观看一公开 | 一本在线高清不卡dvd | 国产精品视频1区| 亚洲影视中文字幕| 欧美影院成人| 国产欧美精品一区二区色综合| 亚洲自拍都市欧美小说| 欧美在线视频不卡| 国产一区二区三区成人欧美日韩在线观看| 亚洲欧美激情四射在线日| 欧美中文字幕视频在线观看| 国产亚洲精品久| 久久精品视频在线播放| 另类春色校园亚洲| 亚洲激精日韩激精欧美精品| 日韩午夜av电影| 欧美日韩成人网| 亚洲视频播放| 久久成人av少妇免费| 国产综合自拍| 亚洲精品一区在线观看| 欧美人与性动交a欧美精品| 亚洲最新色图| 欧美一区二区三区免费观看视频| 国产午夜精品久久| 亚洲人成7777| 欧美日韩一区二| 亚洲欧美影院| 久久色中文字幕| 亚洲人妖在线| 亚洲影院污污.| 国产日韩在线看| 亚洲精品国产精品国自产观看浪潮 | 亚洲伦伦在线| 国产精品久久久免费| 欧美一区午夜视频在线观看| 鲁大师成人一区二区三区| 亚洲精品三级| 欧美亚洲免费高清在线观看| 激情国产一区| 一区二区三区三区在线| 国产日产欧美精品| 亚洲欧洲一区二区在线播放| 欧美视频在线观看视频极品| 亚洲欧美色婷婷| 欧美成人一区二区在线| 亚洲视频 欧洲视频| 久久躁狠狠躁夜夜爽| 99国产精品视频免费观看一公开 | 亚洲国产婷婷| 国产精品hd| 亚洲国产精品高清久久久| 欧美日韩四区| 久久精品毛片| 国产精品福利网| 亚洲欧洲在线视频| 国产精品天天摸av网| 亚洲精品韩国| 国产日韩一区| 亚洲视频在线看| 伊人久久大香线蕉综合热线| 亚洲午夜一级| 亚洲电影av| 久久国产精品黑丝| 亚洲麻豆视频| 久久人人爽人人爽| 亚洲视频1区2区| 欧美激情影音先锋| 午夜国产精品影院在线观看| 欧美精品一区二区在线观看| 欧美淫片网站| 国产精品国码视频| 日韩视频一区二区三区| 国产一区二区三区久久精品| 亚洲综合清纯丝袜自拍| 亚洲高清电影| 久久精品夜色噜噜亚洲a∨| 日韩亚洲精品电影| 欧美1区免费| 欧美专区第一页| 国产精品亚发布| 一区二区三区三区在线| 亚洲国产高清在线|