国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Linux 下基于ARM9的嵌入式視頻循環(huán)采集監(jiān)控系統(tǒng)

2010-07-25 07:16:30陳滄毅路林吉
微型電腦應(yīng)用 2010年8期
關(guān)鍵詞:視頻文件嵌入式編碼

陳滄毅,路林吉

0 引言

目前視頻監(jiān)控和錄制主要采用攝像頭、硬盤錄像機(jī)、錄像等組成視頻監(jiān)控網(wǎng),該類視頻監(jiān)控網(wǎng)絡(luò)具有工作穩(wěn)定可靠的優(yōu)點(diǎn)。但是在某些特殊工作現(xiàn)場,如無人值守的倉庫、大規(guī)模的森林,以及高速的交通工具等,當(dāng)發(fā)生事故或?yàn)?zāi)情后,往往由于現(xiàn)場的破壞和時(shí)效性,而難以分清責(zé)任和分析事故原因。因此,對事故易發(fā)點(diǎn)的連續(xù)視頻監(jiān)控就尤為重要。

比如在高速行駛的機(jī)動(dòng)車上發(fā)生車禍,絕大多數(shù)情況需要掌握的事故原因集中在事故之前很短的一段時(shí)間。因此,分清事故責(zé)任和分析事故原因,所需要的視頻信息大部分在事故時(shí)間點(diǎn)之前的幾十分鐘之內(nèi)。換句話說,除了這幾十分鐘的信息,其它幾天、幾個(gè)月,甚至幾年的視頻監(jiān)控信息都屬于冗余信息。

有鑒于此,本文提出了利用嵌入式系統(tǒng),實(shí)現(xiàn)視頻信息的循環(huán)錄制,只保留最后時(shí)刻視頻信息的便攜式連續(xù)視頻監(jiān)控系統(tǒng),并在Linux系統(tǒng)的基礎(chǔ)上得以實(shí)現(xiàn)[1]。

1 系統(tǒng)硬件組成

在本系統(tǒng)研究中,采用了目前比較常見的MINI2440開發(fā)板,是目前國內(nèi)性價(jià)比較高的一款學(xué)習(xí)板;它采用Samsung S3C2440為微處理器,并采用專業(yè)穩(wěn)定的CPU 內(nèi)核電源芯片和復(fù)位芯片來保證系統(tǒng)運(yùn)行時(shí)的穩(wěn)定性。在處理器豐富資源的基礎(chǔ)上,對系統(tǒng)硬件進(jìn)行了相關(guān)的配置和擴(kuò)展,平臺(tái)配置了64MB的Flash和64MB的SDRAM,通過USB接口外接USB攝像頭和U盤,實(shí)現(xiàn)了整個(gè)硬件平臺(tái)的搭建[2]。

2 Video4Linux視頻采集標(biāo)準(zhǔn)[3]

Video4Linux是Linux系統(tǒng)視頻采集軟件的總接口。各種網(wǎng)絡(luò)攝像頭,視頻采集卡,電視卡以及類似的設(shè)備均歸類于視頻采集領(lǐng)域,Video4Linux為此提供了一整套相應(yīng)的API接口。由于各個(gè)設(shè)備均有自己獨(dú)立的特性,Unix系統(tǒng)均在此基礎(chǔ)上進(jìn)行了抽象,本著一切均是文件的設(shè)計(jì)思想,只需要進(jìn)行 open()方法即可打開設(shè)備文件,read()/write()分別是對該設(shè)備進(jìn)行讀寫傳輸數(shù)據(jù),ioctl()則是對設(shè)備參數(shù)配置。

除了 read()/write()讀寫的方法,Video4Linux特別提供了內(nèi)存映射接口 mmap()直接將設(shè)備內(nèi)存映射到用戶進(jìn)程的地址空間中,這樣用戶可以直接在進(jìn)程中讀寫內(nèi)存來控制設(shè)備,為視頻壓縮爭取了時(shí)間,有效地提高了視頻采集速度。

3 采用FFmpeg庫實(shí)現(xiàn)視頻數(shù)據(jù)存儲(chǔ)

FFmpeg是一個(gè)集錄制、轉(zhuǎn)換、音/視頻編碼解碼功能為一體的完整的開源解決方案。FFmpeg的開發(fā)是基于 Linux操作系統(tǒng),但是可以在大多數(shù)操作系統(tǒng)中編譯和使用,包括windows系統(tǒng)等。FFmpeg支持MPEG、DivX、MPEG-4、AC3、DV、FLV等40多種編碼,AVI、MPEG、OGG、Matroska、ASF等90多種解碼。

FFmpeg庫支持多平臺(tái)運(yùn)行,包括Linux、Windows和M ac OS等系統(tǒng)。本設(shè)計(jì)將FFmpeg移植到ARM9架構(gòu)的系統(tǒng)上,通過交叉編譯生成運(yùn)行庫[4]。

3.1 基于FFmpeg的視頻處理技術(shù)

FFmpeg主目錄下主要有 libavcodec、libavformat和libavutil等子目錄。其中 libavcodec用于存放各個(gè)encode/decode模塊,libavformat用于存放 muxer/demuxer模塊,libavutil用于存放內(nèi)存操作等常用模塊。

利用ffmpeg庫生成視頻文件,需要用到兩個(gè)貫穿始終的數(shù)據(jù)結(jié)構(gòu):struct AVFormatContext和struct AVStream。

圖1 用FFmpeg庫生成視頻文件的基本流程

struct AVFormatContext包含了一個(gè)視頻流的格式內(nèi)容,如所采用的編碼器(本文采用的是MJPEG的格式)等重要信息。而struct AVStream則包含了“流”這個(gè)概念中的一些數(shù)據(jù),比如:幀率、基本時(shí)間計(jì)量單位、首幀位置、持續(xù)時(shí)間、幀數(shù)以及幀數(shù)據(jù)本身等等?;贔Fmpeg庫生成視頻文件的基本流程見圖一。

3.2 FFmpeg在嵌入式系統(tǒng)上的交叉編譯

為了編譯成 ARM 上執(zhí)行的二進(jìn)制程序,需要對configure文件和 Makefile文件進(jìn)行手動(dòng)修改,./configure–help命令可以得到有用的信息。

然后執(zhí)行make,make install。此步后,將生成所需要的二進(jìn)制工具ffmpeg和ffserver。其中ffmpeg用于對媒體文件進(jìn)行處理或視音頻設(shè)備進(jìn)行操作,ffserver是一個(gè)http的流媒體服務(wù)器。另外生成兩個(gè)庫文件 libavcodec.so和libavformat.so。這兩個(gè)庫文件將是未來設(shè)計(jì)的重點(diǎn)。

3.3 視頻循環(huán)錄制的方法

這部分的工作是整個(gè)設(shè)計(jì)的核心。一般來說對視頻信息的循環(huán)錄制均采用日志處理的方法,即通過多文件實(shí)現(xiàn)循環(huán)錄制。這種方式經(jīng)常伴隨著一個(gè)明顯的缺陷是兩個(gè)文件中間存在視頻數(shù)據(jù)丟失現(xiàn)象。另外一種方案是通過對索引塊信息進(jìn)行修改,使其達(dá)到隨機(jī)存取的能力,這種方式編程繁瑣,效果欠佳,尤其在FFmpeg體系下,時(shí)間軸控制起來涉及較底層代碼,這里不推薦采納。筆者認(rèn)為,采用第一種方案存在丟幀現(xiàn)象完全可以從軟件代碼設(shè)計(jì)有效避免,且通過該方案可以清楚記錄下每一段視頻的拍攝時(shí)間,極大方便了未來的查閱檢索。如果覺得多文件觀察起來較為繁瑣,該設(shè)計(jì)還提供了視頻自動(dòng)按照時(shí)間順序合成的腳本。

3.3.1 檢測日志文件及讀取記錄

為了達(dá)到循環(huán)錄制的功能,需要在 U盤空間吃緊時(shí)刪除早些時(shí)間錄制的文件,因而獲取當(dāng)前刪除序號(hào)數(shù)至關(guān)重要,保證了日志文件與現(xiàn)有視頻的數(shù)據(jù)同步。

3.3.2 FFmpeg重要函數(shù)解析

表1 FFmpeg基本函數(shù)功能簡介

av_write_frame(AVFormatCo ntext *s,AVPacket *pkt)件int av_write_trailer(AVFormatCo ntext *s)寫入流結(jié)尾信息到指定輸出文件并釋放內(nèi)存數(shù)據(jù)。

表1列舉了部分FFmpeg庫重要函數(shù)的功能,具體可以參見源碼。這些函數(shù)均是基于FFmpeg編程的基礎(chǔ)。

3.3.3 采用MJPEG編碼方式

Motion JPEG(MJPEG)是一種視頻壓縮格式,其中每一幀圖象都分別使用JPEG編碼。同樣格式的MJPEG視頻壓縮不同于幀間壓縮,因?yàn)閴嚎s位元率比較低,所以編碼與解碼相對比較容易,并不需要過多的運(yùn)算能力,符合ARM嵌入式的設(shè)計(jì)需求。此外,一些移動(dòng)設(shè)備,如手機(jī)、數(shù)碼相機(jī)也常使用MJPEG來進(jìn)行短片的編碼。該編碼的主要缺陷是壓縮效率不高,文件尺寸相對較大,但由于現(xiàn)在 U盤設(shè)備價(jià)格已經(jīng)十分低廉,因而在對硬件系統(tǒng)要求不高的地方應(yīng)用還是相當(dāng)廣泛的。

MPEG-4是另外一種較為成熟的編碼方式,主要針對視頻會(huì)議、可視電話的超低比特率編碼需求,一般在嵌入式系統(tǒng)中應(yīng)用需采用專用的壓縮芯片完成,成本較高,這也是本設(shè)計(jì)沒有采納的主要原因[6]。

3.3.4 實(shí)現(xiàn)循環(huán)錄制功能

文獻(xiàn)[1]中提到使用多文件錄制視頻會(huì)存在丟幀現(xiàn)象,可能是因?yàn)槟承┮曨l錄像機(jī)錄制文件時(shí),針對每一個(gè)文件均是同樣的處理流程,換句話說,就是每次錄制過程均是上一次過程的簡單重復(fù),這樣勢必導(dǎo)致在處理視頻文件結(jié)尾的時(shí)候部分幀丟失,前后文件不連續(xù)等現(xiàn)象。

本系統(tǒng)采取的方法是多線程幀控制法,即當(dāng)視頻將達(dá)到指定幀數(shù)時(shí),開辟新線程對新的文件進(jìn)行初始化;當(dāng)視頻達(dá)到指定幀數(shù)時(shí),開辟新線程作后期處理并關(guān)閉文件。如此循環(huán)往復(fù),自然將每一幀信息均完整保存下來。

3.3.5 系統(tǒng)主體設(shè)計(jì)流程概覽

圖2 主線程運(yùn)行流程圖

圖3 視頻采集線程工作流程

圖4 按鍵監(jiān)聽線程工作流程

4 程序運(yùn)行實(shí)驗(yàn)及分析

程序編寫完成后,就可以通過宿主機(jī)使用交叉編譯器編譯連接生成可執(zhí)行文件,并向目標(biāo)機(jī)移植后運(yùn)行。

軟件參數(shù)設(shè)定:

窗口大?。?40×480

幀率:15fps

單個(gè)文件幀數(shù):9000

通過長達(dá)5個(gè)多小時(shí)的視頻錄制測試,軟件工作正常,視頻質(zhì)量穩(wěn)定,從未出現(xiàn)丟幀或花屏現(xiàn)象,清晰度流暢性極佳。當(dāng)達(dá)到硬盤空間極限時(shí),系統(tǒng)自動(dòng)刪除早期文件,對視頻正常錄制過程沒有任何影響。實(shí)驗(yàn)表明,在嵌入式Linux系統(tǒng)上實(shí)現(xiàn)循環(huán)錄制是完全可行的。

5 結(jié)語

本文根據(jù)特殊工作現(xiàn)場對循環(huán)視頻監(jiān)控系統(tǒng)要求,在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)了視頻循環(huán)錄制的功能。程序運(yùn)行結(jié)果表明該設(shè)計(jì)方案運(yùn)行可靠,符合實(shí)際工程需求,其主要特點(diǎn)如下:

1. 系統(tǒng)采用一般的USB攝像頭,價(jià)格低廉,極大節(jié)約了成本。

2. 采用基于 Linux的嵌入式視頻監(jiān)控系統(tǒng)解決方案,功能擴(kuò)展性強(qiáng),能支持多種硬件接口。

3. 系統(tǒng)可進(jìn)行循環(huán)錄制,即自動(dòng)探測U盤空間,刪除早期數(shù)據(jù),實(shí)現(xiàn)滾動(dòng)更新功能。用戶可隨時(shí)選擇時(shí)間段下載數(shù)據(jù)。

4. 整個(gè)系統(tǒng)體積小巧,安裝方便,適合各種工作場合。

[1]劉少剛,王學(xué)軍.基于嵌入式Linux系統(tǒng)的單個(gè)AVI文件視頻循環(huán)錄制的研究[J].哈爾濱:林業(yè)機(jī)械與木工設(shè)備,2008.

[2]廣東友善之臂計(jì)算機(jī)科技有限公司 Mini2440用戶手冊[Z].2007.

[3]陳云鶴.基于嵌入式Linux的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)的設(shè)計(jì)[D].華中科技大學(xué)2006.

[4]吳張順,張旬.基于FFmpeg的視頻編碼存儲(chǔ)研究與實(shí)現(xiàn)[J].杭州:杭州電子科技大學(xué)學(xué)報(bào).2006.

[5]Epplin J,Linux as an Embedded Operating System[M],Embedded Systems Programming,1997.

猜你喜歡
視頻文件嵌入式編碼
流媒體視頻文件相似性識(shí)別的方法
隨心定制視頻文件的縮略圖
基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
《全元詩》未編碼疑難字考辨十五則
子帶編碼在圖像壓縮編碼中的應(yīng)用
電子制作(2019年22期)2020-01-14 03:16:24
Genome and healthcare
搭建基于Qt的嵌入式開發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
榆树市| 陆川县| 义乌市| 修文县| 临清市| 临猗县| 合作市| 高州市| 疏勒县| 昌图县| 新密市| 同德县| 冀州市| 公主岭市| 惠安县| 永安市| 南通市| 图们市| 慈溪市| 塔河县| 偏关县| 麦盖提县| 策勒县| 奉节县| 砀山县| 黔南| 长岛县| 无极县| 仁寿县| 花莲市| 阿拉善盟| 大关县| 阿尔山市| 昌吉市| 新建县| 松溪县| 清流县| 连云港市| 滁州市| 淳安县| 元朗区|