《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼
基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼
電子科技
辛長(zhǎng)春 婁小平 呂乃光
摘要: 在遠(yuǎn)程視頻監(jiān)控系統(tǒng)中視頻數(shù)據(jù)的編碼傳輸以及解碼顯示是一個(gè)重要組成部分,通過對(duì)FFmpeg的研究學(xué)習(xí),考慮采用FFmpeg來實(shí)現(xiàn)編解碼的方法。遠(yuǎn)程監(jiān)控系統(tǒng)由采集發(fā)送端和接收處理端組成,采集發(fā)送端使用S3C2440作為嵌入式硬件平臺(tái),并通過USB攝像頭OV9650采集視頻數(shù)據(jù),經(jīng)過FFmpeg編碼后傳輸給接收處理端。接收處理端接收到數(shù)據(jù)后通過FFmpeg實(shí)時(shí)解碼,采用OpenCV顯示,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
Abstract:
Key words :

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

1 系統(tǒng)方案
系統(tǒng)是在S3C2440平臺(tái)上運(yùn)行嵌入式Linux系統(tǒng),使用CMOS攝像頭OV9650獲取實(shí)時(shí)視頻圖像數(shù)據(jù),采用H264標(biāo)準(zhǔn)通過FFmpeg原始視頻進(jìn)行壓縮編碼成視頻流,通過網(wǎng)絡(luò)傳輸,用戶在接收處理端經(jīng)過FFmpeg解碼之后,使用OpenCV顯示播放即可實(shí)時(shí)查看遠(yuǎn)程視頻圖像。
系統(tǒng)由兩部分組成:采集發(fā)送端和接收處理端,采用Client/Server設(shè)計(jì)模式來實(shí)現(xiàn)兩者之間的相互通信,由接收處理端向采集發(fā)送端發(fā)送控制信號(hào),采集發(fā)送端開啟攝像頭進(jìn)行視頻數(shù)據(jù)采集,采集的原始視頻數(shù)據(jù)是yuv422格式,經(jīng)過FFmpcg編碼壓縮成H.264格式視頻流,經(jīng)通信網(wǎng)絡(luò)傳輸?shù)浇邮仗幚矶?;接收處理端接收到視頻流數(shù)據(jù)后,經(jīng)FFmpeg解碼,通過OpenCV進(jìn)行顯示。采集發(fā)送端視頻數(shù)據(jù)采集和發(fā)送采用三星公司的具有ARM920T內(nèi)核的S3C2440作為嵌入式微控制器,接收處理端采用普通電腦。系統(tǒng)方案如圖1所示。

系統(tǒng)方案

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

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)程序的移植開發(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,通過m_filev412=open(“/dev/camera” O_RDWR)打開攝像頭,通過read(fd,&inyuv422,D SIZE)讀取攝像頭的視頻數(shù)據(jù)到數(shù)組inyuv422中,通過closc(m_filev412)關(guān)閉攝像頭。有了視頻數(shù)據(jù)后,就可以通FFmpeg進(jìn)行編碼。
2. 3 FFmpeg編碼
2.3.1 FFmpeg簡(jiǎn)介
FFmpeg是一個(gè)開源免費(fèi)跨平臺(tái)的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據(jù)所你選擇的組件),是一個(gè)集錄制、轉(zhuǎn)換、音/視頻編解碼功能為一體的、完整的開源解決方案。FFmpeg的開發(fā)基于Linux操作系統(tǒng),也可在大多數(shù)操作系統(tǒng)中編譯和使用。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攝像頭輸出的數(shù)據(jù)為yuv422格式,而FFmpeg編碼需要輸入yuv420格式數(shù)據(jù),因此在編碼之前需要先將yuv422格式數(shù)據(jù)轉(zhuǎn)化為yuv 420格式。FFmpeg中的函數(shù)sws_scale()可以實(shí)現(xiàn)這個(gè)過程。
在使用FFmpeg編碼之前,首先需要對(duì)FFmpeg庫進(jìn)行初始化,注冊(cè)所有的編解碼器以及文件格式,設(shè)置編碼器碼率、幀速率、編碼像素格式等參數(shù),然后尋找編碼器并打開,打開編碼器之后才可以進(jìn)行編碼。通過設(shè)置結(jié)構(gòu)體AVCodecContext中的各個(gè)成員參數(shù)來完成參數(shù)的設(shè)置過程,例如通過設(shè)置AVCodecContext->bit_rate,AVCodecContext->width,AVCodecContcxt->height等可以設(shè)置碼率,寬度和高度等,通過設(shè)置AVCodecContext->pix_fmt=PIX_FMT_YUV420P設(shè)置YUV420像素格式。編碼核心函數(shù)是avcodec_encode_video()。系統(tǒng)每采集一幀數(shù)據(jù),就送給avcodec_encode_video()函數(shù)編碼成H.264視頻流。其編碼流程如圖2所示。

編碼流程


下面對(duì)編碼流程的各個(gè)步驟中主要函數(shù)的作用進(jìn)行詳細(xì)介紹:
1)av_register_all():注冊(cè)庫中含有所有文件格式和編解碼器,沒有這一步將無法打開編解碼器。
2)av_open_imput_file():打開攝像頭視頻文件。
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():打開編碼器。
7)av_read_frame():從視頻流中讀取一幀視頻數(shù)據(jù)。
8)avcodec_encode_video():編碼一幀視頻數(shù)據(jù)。
9)avcodec_close():關(guān)閉編碼器。
10)avformat_close_mput file():關(guān)閉視頻攝像頭文件。

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

解碼流程


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

監(jiān)控畫面



4 結(jié)束語
隨著視頻壓縮技術(shù)的發(fā)展成熟,嵌入式視頻監(jiān)控逐漸在監(jiān)控領(lǐng)域占有重要地位。以S3C2440為嵌入式硬件平臺(tái),通過攝像頭采集數(shù)據(jù),在嵌入式Linux與Windows操作系統(tǒng)相結(jié)合的跨平臺(tái)上,實(shí)現(xiàn)FFmpeg的編解碼,為實(shí)際嵌入式視頻監(jiān)控系統(tǒng)的視頻壓縮傳輸設(shè)計(jì),提供了一種可行的方法。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
在线亚洲国产精品网站| 91久久国产精品91久久性色| 国产性色一区二区| 欧美性做爰毛片| 欧美日韩免费网站| 欧美日本久久| 欧美激情一区二区三区不卡| 噜噜噜躁狠狠躁狠狠精品视频 | 一本色道婷婷久久欧美| 亚洲精品久久| 亚洲精品日韩精品| 亚洲欧洲另类国产综合| 亚洲精品美女91| 99热这里只有精品8| 一本色道久久综合亚洲精品婷婷 | 国产在线一区二区三区四区| 国产丝袜一区二区| 国产香蕉久久精品综合网| 国产一区二区三区直播精品电影| 国产在线视频欧美| 在线观看日韩国产| 亚洲黄色有码视频| 亚洲精品久久嫩草网站秘色| 日韩一区二区精品在线观看| 99re国产精品| 亚洲一区二区综合| 欧美一区二区三区成人| 久久精品日产第一区二区三区| 亚洲国产精品美女| 日韩一级免费| 亚洲欧美在线视频观看| 久久精品国产一区二区三区免费看| 久久一区二区精品| 欧美—级在线免费片| 欧美日韩国产黄| 国产精品乱人伦中文| 国产日韩精品一区二区三区| 黄色成人av网| 亚洲人久久久| 亚洲综合日本| 亚洲激精日韩激精欧美精品| 夜夜嗨av一区二区三区| 香蕉亚洲视频| 欧美www在线| 国产精品国产三级国产专播品爱网| 国产农村妇女毛片精品久久莱园子| 国产日产欧美a一级在线| 影音先锋成人资源站| 亚洲免费观看在线视频| 亚洲综合第一页| 久久精品国产在热久久| 一本色道88久久加勒比精品| 午夜在线精品| 欧美成人午夜免费视在线看片| 国产精品第三页| 在线观看亚洲视频啊啊啊啊| 一本大道久久a久久综合婷婷| 欧美亚洲综合另类| 99这里只有精品| 久久久91精品| 欧美另类69精品久久久久9999| 国产麻豆午夜三级精品| 亚洲高清在线观看| 亚洲欧美日韩久久精品 | 你懂的视频欧美| 国产精品卡一卡二| 亚洲国产成人精品女人久久久 | 午夜精品福利一区二区三区av | 亚洲手机视频| 久久免费视频一区| 国产精品超碰97尤物18| 在线高清一区| 亚洲在线日韩| 一本大道av伊人久久综合| 久久久久久久国产| 欧美午夜不卡在线观看免费 | 先锋影音国产精品| 欧美激情无毛| 国产一区二区av| 一区二区三区视频观看| 亚洲破处大片| 久久久综合网站| 国产精品一区在线观看你懂的| 亚洲精华国产欧美| 久久精品导航| 久久爱另类一区二区小说| 欧美日韩一区二区免费在线观看| 在线成人小视频| 午夜精品久久久久99热蜜桃导演| 一区二区三区免费在线观看| 免费观看日韩| 国产在线视频不卡二| 亚洲一区一卡| 亚洲一区久久| 欧美日韩美女| 亚洲精品少妇30p| 亚洲国产欧美一区二区三区同亚洲| 欧美一区二区免费| 欧美午夜国产| 亚洲免费成人av电影| 亚洲毛片播放| 欧美xxx在线观看| 亚洲盗摄视频| 亚洲国产乱码最新视频| 久久久久国产一区二区三区| 国产精品日韩在线观看| av成人老司机| 在线亚洲欧美| 欧美日韩精品免费观看视一区二区 | 欧美日韩综合| 亚洲狼人精品一区二区三区| 亚洲精品极品| 欧美高清视频一二三区| 在线观看一区二区精品视频| 亚洲国产高清在线观看视频| 久久久噜噜噜| 国产亚洲激情| 欧美一区观看| 久久婷婷国产综合国色天香| 国产一区二区三区在线观看免费视频 | 欧美中文字幕久久| 久久久精彩视频| 国精品一区二区三区| 久久国内精品自在自线400部| 久久免费高清| 精品99一区二区三区| 亚洲第一视频| 嫩草影视亚洲| 亚洲毛片视频| 亚洲女同精品视频| 国产精品一区久久| 欧美在线观看www| 久久久噜噜噜久久| 在线播放日韩欧美| 亚洲精品视频在线观看免费| 欧美精品午夜视频| 一本综合精品| 欧美在线日韩在线| 激情久久久久| 亚洲伦理中文字幕| 国产精品第13页| 欧美在线网站| 欧美国内亚洲| 夜夜夜久久久| 久久精品国产第一区二区三区| 狠狠干成人综合网| 亚洲精品网站在线播放gif| 欧美精品自拍偷拍动漫精品| 亚洲免费久久| 欧美在线观看一区二区| 影音先锋欧美精品| 一区二区日韩| 国产亚洲成精品久久| 亚洲激情网址| 国产精品草莓在线免费观看| 亚洲欧美色婷婷| 免费一级欧美片在线播放| 亚洲精选视频免费看| 午夜视频精品| 影音先锋欧美精品| 亚洲天堂av在线免费观看| 国产香蕉97碰碰久久人人| 亚洲三级影院| 国产精品av一区二区| 久久精品色图| 欧美色道久久88综合亚洲精品| 香蕉视频成人在线观看| 欧美国产精品久久| 亚洲欧美国产高清| 欧美阿v一级看视频| 亚洲综合国产精品| 欧美国产激情| 午夜精品久久久久久久白皮肤 | 欧美日韩一区二区三区| 欧美一区二区三区在线| 欧美精品激情| 欧美专区亚洲专区| 欧美日韩系列| 亚洲激情网址| 国产伦精品一区二区三区免费迷| 亚洲精品欧美日韩| 国产日韩欧美在线看| 亚洲免费电影在线观看| 国产午夜亚洲精品理论片色戒| 在线一区二区日韩| 国内精品国语自产拍在线观看| 亚洲性视频网站| 在线高清一区| 久久精品成人| 一本一本久久a久久精品牛牛影视| 久久夜色精品国产亚洲aⅴ| 亚洲先锋成人| 欧美精品七区| 亚洲国产导航| 国产女人18毛片水18精品| 宅男噜噜噜66一区二区| 在线高清一区| 久久精品国产久精国产爱| 中国成人黄色视屏| 欧美激情一区二区三区全黄|