色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux的視頻循環(huán)錄制系統(tǒng)

          基于嵌入式Linux的視頻循環(huán)錄制系統(tǒng)

          作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          摘要:本文以行車視頻錄制為背景,設(shè)計(jì)了以三星公司ARM9芯片S3C2440作為主控芯片,可移植開源的系統(tǒng)。在對(duì)系統(tǒng)硬件結(jié)構(gòu)、系統(tǒng)原理和環(huán)境搭建描述后,重點(diǎn)介紹了視頻循環(huán)錄制功能和將視頻保存成跨平臺(tái)通用的avi文件的過程。測(cè)試結(jié)果表明此方案可行。
          關(guān)鍵詞:;;

          引言
          視頻采集系統(tǒng)以其直觀的視頻影像數(shù)據(jù),對(duì)現(xiàn)場(chǎng)場(chǎng)景進(jìn)行記錄,目前已經(jīng)在各行各業(yè)得到廣泛應(yīng)用。對(duì)于特定運(yùn)用場(chǎng)合,如汽車行進(jìn)過程,由于其環(huán)境的不確定性和多樣性,以及事故的突發(fā)性和偶然性,要求采集系統(tǒng)能夠穩(wěn)定、連續(xù)地實(shí)時(shí)記錄事發(fā)過程。行車過程事故發(fā)生時(shí),需要掌握的事故原因往往在事故發(fā)生前短短的一段時(shí)間內(nèi)。因此,分清事故責(zé)任和分析事故原因所需要的視頻信息,往往是在事故時(shí)間點(diǎn)之前的一小段時(shí)間內(nèi)。
          日常生活中常見的交通糾紛,往往是因?yàn)闆]有直接證據(jù)造成取證困難?;诖?,結(jié)合低功耗、低成本等優(yōu)點(diǎn),本文利用嵌入式系統(tǒng)實(shí)現(xiàn)行車視頻存儲(chǔ),存儲(chǔ)的視頻可以為交通糾紛的調(diào)解以及交通事故認(rèn)定,提供現(xiàn)場(chǎng)錄像證據(jù)。

          1 系統(tǒng)概述
          1.1 系統(tǒng)硬件結(jié)構(gòu)
          系統(tǒng)硬件結(jié)構(gòu)如圖1所示。主控制芯片為三星的ARM9芯片S3C2440,它內(nèi)部含有MMC/SD/SDIO控制器、NAND Flash控制器、USB主控制器、存儲(chǔ)器控制器、時(shí)鐘和電源管理等模塊。其中,存儲(chǔ)器控制器為訪問外部存儲(chǔ)提供必要的存儲(chǔ)控器控制信號(hào);NAND Flash控制器為外掛的NAND Flash存儲(chǔ)器提供控制信號(hào),而NANDFlash控制器由于其價(jià)格經(jīng)濟(jì),用于執(zhí)行引導(dǎo)程序;時(shí)鐘和電源管理模塊由時(shí)鐘控制、USB控制和電源控制3部分模塊組成,時(shí)鐘控制模塊用于產(chǎn)生必要的時(shí)鐘信號(hào),電源管理模塊用于提供電源管理方案,保證對(duì)給定任務(wù)的最佳功耗;USB主控制器支持2個(gè)端口的USB主機(jī)接口,支持低速及全速USB設(shè)備,在本系統(tǒng)中用于連接USB攝像頭;MMC/SD/SDIO控制器為外接SD卡提供控制和數(shù)據(jù)信號(hào),使視頻數(shù)據(jù)的存儲(chǔ)變得可能。

          本文引用地址:http://cafeforensic.com/article/201610/305965.htm

          b.JPG


          1.2 系統(tǒng)原理
          NAND Flasht大小為256 MB,用于存儲(chǔ)文件系統(tǒng),執(zhí)行必要的引導(dǎo)程序。SDRAM為64 MB內(nèi)存??紤]行車過程的震動(dòng)環(huán)境,視頻存儲(chǔ)設(shè)備采用能夠牢靠固定的SD卡。除了穩(wěn)固的優(yōu)點(diǎn)外,SD卡還有價(jià)格便宜、方便拔插的優(yōu)點(diǎn)。要實(shí)現(xiàn)行車視頻的錄制存儲(chǔ),首先需要采集視頻數(shù)據(jù)??紤]到嵌入式存儲(chǔ)器的資源相對(duì)有限,本設(shè)計(jì)使用中星微電子公司ZC301芯片的攝像頭,此類攝像頭的視頻數(shù)據(jù)經(jīng)過攝像頭內(nèi)部專用DSP芯片處理過,輸出的信號(hào)是JPEG格式的。移植Linux系統(tǒng)后,利用Linux下視頻采集和輸出驅(qū)動(dòng)的內(nèi)核接口V4L2對(duì)視頻進(jìn)行采集,然后對(duì)采集到的視頻數(shù)據(jù)按照avi標(biāo)準(zhǔn)格式進(jìn)行封裝,添加必要的幀頭信息后,將其一幀一幀存入插在SD卡座上的SD卡內(nèi),采用特定方法對(duì)視頻文件進(jìn)行管理,實(shí)現(xiàn)視頻的,以節(jié)約存儲(chǔ)空間。將采集存儲(chǔ)到SD卡的視頻文件拷貝到任意的帶視頻播放器的平臺(tái)上,即可查看錄制的視頻信息。
          由于ZC301攝像頭輸出的每幀是JPEG格式數(shù)據(jù),因而存儲(chǔ)的文件是MJPEG壓縮,其中,每一幀圖像都分別使用JPEG編碼。MJPEG視頻壓縮僅采用幀內(nèi)壓縮,不需要過多的運(yùn)算能力,無需為視頻壓縮浪費(fèi)大量的計(jì)算效率,適合用于嵌入式設(shè)備中。雖然其壓縮率不是很高,造成視頻文件尺寸較大,但是由于該行車視頻錄制系統(tǒng)只需保存事故發(fā)生前一段時(shí)間內(nèi)的現(xiàn)場(chǎng)視頻,綜合考慮MJPEG壓縮可以滿足要求。

          2 嵌入式環(huán)境搭建
          要在嵌入式平臺(tái)實(shí)現(xiàn)系統(tǒng)功能,需要通過主機(jī)構(gòu)建基本的軟件系統(tǒng),并燒寫到設(shè)備中。采用交叉開發(fā)模式以適應(yīng)嵌入式設(shè)備的資源不足。首先,在主機(jī)編譯Bootloader,將編譯出的鏡像文件燒入設(shè)備;然后在主機(jī)編譯嵌入式Linux內(nèi)核,通過Bootloader燒入板子;最后,在主機(jī)上編譯實(shí)現(xiàn)相關(guān)功能的應(yīng)用程序,通過NFS運(yùn)行,經(jīng)過驗(yàn)證成功后再燒入板子,過程如圖2所示。該部分內(nèi)容不作詳細(xì)闡述,具體的搭建過程可參考相應(yīng)的資料。

          c.JPG



          3 軟件設(shè)計(jì)
          系統(tǒng)的軟件設(shè)計(jì)主要包括視頻圖像的采集、使用特定方法實(shí)現(xiàn)視頻數(shù)據(jù)的,其中重點(diǎn)在于,按照avi格式將采集的數(shù)據(jù)進(jìn)行封裝,并且實(shí)現(xiàn)視頻文件循環(huán)存儲(chǔ)。
          3.1 avi文件格式
          avi(audio video interleaved)格式即音頻視頻交錯(cuò)格式,1992年由Microsoft公司推出。所謂“音頻視頻交錯(cuò)”,就是可以將視頻格式和音頻格式交織在一起進(jìn)行同步播放。
          RIFF文件使用4字符碼FOURCC(Four—Character Code)來表示數(shù)據(jù)類型,例如“RIFF”表示這是一個(gè)RIFF文件,“AVI”表示文件的具體類型,“LIST”表示用列表的形式來組織數(shù)據(jù)。其結(jié)構(gòu)如圖3所示。作為一種多媒體文件的存儲(chǔ)方式,不同編碼的音頻、視頻文件,都可以按照RIFF定義的存儲(chǔ)規(guī)則保存、記錄各自不同的數(shù)據(jù),如數(shù)據(jù)內(nèi)容、采集信息、顯示尺寸、編碼方式等。播放器播放這些文件時(shí),會(huì)根據(jù)RIFF的規(guī)則分析文件,正確解析出音視頻信息進(jìn)行播放。

          d.JPG


          avi文件是目前使用的最復(fù)雜的RIFF文件,它包含信息塊、數(shù)據(jù)塊和索引塊3個(gè)子塊,每個(gè)子塊都按照RIFF文件結(jié)構(gòu)來填充各字段。其總體結(jié)構(gòu)如圖4所示。

          e.JPG


          avi文件有兩種基本的數(shù)據(jù)結(jié)構(gòu)CHUNK和LIST,其形式如圖5所示。

          f.JPG


          其中,信息塊是一個(gè)以“hdrl”為標(biāo)識(shí)的LIST塊,定義avi文件的數(shù)據(jù)格式;數(shù)據(jù)塊是一個(gè)以“movi”為標(biāo)識(shí)的LIST塊,它保存真正的音視頻數(shù)據(jù);索引塊是一個(gè)以“idxl”為標(biāo)識(shí)的LIST塊,為avi文件中的媒體數(shù)據(jù)塊進(jìn)行索引,不是必需的。詳細(xì)的avi文件格式見參考文獻(xiàn)。
          3.2 視頻采集
          嵌入式Linux下視頻采集的實(shí)現(xiàn)使用Linux視頻驅(qū)動(dòng)接口V4L2。它的操作流程如下:打開視頻設(shè)備、設(shè)置視頻設(shè)備屬性和采集方式、處理視頻數(shù)據(jù)、關(guān)閉視頻設(shè)備。把視頻設(shè)備當(dāng)作普通文件來打開關(guān)閉,并進(jìn)行數(shù)據(jù)的讀寫。視頻設(shè)備屬性的設(shè)置是通過ioctl函數(shù)來進(jìn)行的,V4L2
          驅(qū)動(dòng)接口包含很多控制命令,對(duì)視頻采集進(jìn)行控制。
          3.3 視頻循環(huán)錄制的實(shí)現(xiàn)
          視頻的循環(huán)存儲(chǔ)是很有必要的。一方面,因本系統(tǒng)特點(diǎn),對(duì)于事故前很長(zhǎng)時(shí)間的視頻信息沒有保存下來的必要,因而可以在保存必要視頻信息的前提下,當(dāng)SD卡存儲(chǔ)滿的時(shí)候?qū)ψ钕蠕浿频囊曨l進(jìn)行覆蓋,以充分利用存儲(chǔ)空間。
          循環(huán)錄制可以只在單個(gè)文件中進(jìn)行,參考文獻(xiàn)采用此方法。該方法通過修改位置指針,對(duì)存儲(chǔ)幀數(shù)和預(yù)定義的最大幀常量進(jìn)行判斷,以實(shí)現(xiàn)循環(huán)存儲(chǔ)。該方法實(shí)現(xiàn)較為繁瑣,而且由于采用avi文件存儲(chǔ),其單個(gè)文件最大只有2G,保存的視頻數(shù)據(jù)有限。本系統(tǒng)采用多個(gè)文件循環(huán)存儲(chǔ)的方法。每次錄制以開始錄制的時(shí)間作為avi的文件名,格式為“年月日-時(shí)分秒”形式,這樣便于以后查閱檢索。
          3.3.1 循環(huán)存儲(chǔ)原理
          循環(huán)存儲(chǔ)的原理簡(jiǎn)單直觀,首先創(chuàng)建一個(gè)avi文件對(duì)視頻數(shù)據(jù)進(jìn)行錄制,當(dāng)錄制到文件預(yù)定義大小時(shí),新建一個(gè)avi文件繼續(xù)存儲(chǔ)。如此一直下去,直到SD卡存儲(chǔ)已滿。當(dāng)系統(tǒng)檢測(cè)到SD卡剩余容量小于預(yù)定義的閾值時(shí),則查找最先錄制的avi文件并刪除,這樣便有空閑容量繼續(xù)存儲(chǔ)視頻,如此往復(fù)便可實(shí)現(xiàn)視頻的循環(huán)錄制。
          3.3.2 循環(huán)存儲(chǔ)方法
          根據(jù)上面的循環(huán)存儲(chǔ)原理,按照循環(huán)存儲(chǔ)流程可以清楚地實(shí)現(xiàn)循環(huán)存儲(chǔ),如圖6所示。

          h.JPG


          系統(tǒng)初始化主要是對(duì)視頻采集的初始化,設(shè)定采集視頻的相關(guān)信息,通過init_videoIn()函數(shù)將參數(shù)傳入相應(yīng)的結(jié)構(gòu)體,主要代碼如下;
          g.JPG
          接著創(chuàng)建一個(gè)avi文件,以當(dāng)前日期加時(shí)間作為文件名,這樣便于將來對(duì)視頻文件查詢檢索。然后就進(jìn)入程序大循環(huán),對(duì)SD卡剩余容量判斷,可以保證即使更換不同容量的SD卡也能充分利用存儲(chǔ)空間。對(duì)于SD卡剩余容量小于預(yù)定義的RESTSIZE情況,則說明SD卡剩余容量不足,這樣就需要?jiǎng)h除最早保存的視頻文件。為了獲取SD卡目錄里的文件信息,使用了dirent結(jié)構(gòu)體,查找SD卡里最早保存的avi文件是關(guān)鍵,其核心代碼如下:
          j.jpg
          i.JPG
          找到最早創(chuàng)建的avi文件后,刪除它即獲得足夠的容量保存新的視頻。對(duì)于SD卡剩余容量足夠的情況,直接往avi文件寫入一幀視頻,這也是本設(shè)計(jì)的一個(gè)重點(diǎn),在下一節(jié)介紹。若寫入視頻數(shù)據(jù)失敗,直接跳出大循環(huán),系統(tǒng)結(jié)束工作。否則,使用stat()函數(shù)對(duì)當(dāng)前視頻文件大小進(jìn)行判斷,看該avi文件是否達(dá)到預(yù)定大小。若是,則要新建一個(gè)avi文件以保證SD卡的每個(gè)avi文件大小固定且存儲(chǔ)多個(gè)avi文件;不是,則avi文件還未達(dá)到預(yù)定大小,繼續(xù)往avi文件寫入一幀視頻數(shù)據(jù)。如此往復(fù),即實(shí)現(xiàn)視頻的循環(huán)存儲(chǔ)功能。
          3.3.3 寫一幀avi視頻數(shù)據(jù)
          向SD卡中創(chuàng)建的avi文件寫入一幀視頻,就是按照3.1節(jié)介紹的avi文件的格式,把從攝像頭采集到的一幀圖像保存到相應(yīng)位置,同時(shí)填寫必要的avi文件頭信息。
          打開以日期時(shí)間命名的avi文件后,設(shè)置視頻相關(guān)信息,主要是視頻壓縮方式、視頻幀大小和幀率等,然后便是填充avi文件的頭信息。avi文件的頭信息是其區(qū)別于其他視頻文件一個(gè)重要標(biāo)志,根據(jù)參考文獻(xiàn),頭部信息主要包括2個(gè)LIST基本結(jié)構(gòu),第一個(gè)“hdrl”LIST嵌套一個(gè)“strl”LIST,其中“hdrl”是主avi信息頭數(shù)據(jù),“strl”LIST是流的頭信息數(shù)據(jù)(strl可以有多個(gè),對(duì)應(yīng)多個(gè)流),它們用于保存視頻流的詳細(xì)信息。每個(gè)“strl”至少包含一個(gè)“strh”塊(用于說明該流的頭信息)和一個(gè)“strf”塊(說明該流是視頻流還是音頻流)。第二個(gè)LIST是“movi”列表,它用來保存真正的視頻音頻流數(shù)據(jù),它以4字符碼“00db”(非壓縮視頻流)或“00wb”(非壓縮音頻流)等開始作為標(biāo)記,接下來存儲(chǔ)流數(shù)據(jù)。“movi”列表后是avi文件的索引塊,這部分是可選的,主要是為avi文件每個(gè)數(shù)據(jù)塊進(jìn)行索引。填寫完avi文件頭部信息后,即可將采集的視頻數(shù)據(jù)保存下來。
          寫一幀視頻數(shù)據(jù)時(shí),首先將寫指針指向avi文件頭的尾部,接著調(diào)用一個(gè)write_avi_data(avi_t*AVI,char*data,unsigned long length)函數(shù),將length長(zhǎng)度的由指針data指向的數(shù)據(jù)寫入到avi指向的文件。在寫真正的流媒體數(shù)據(jù)之前,先寫入4字符碼“00db”指示要寫的是視頻數(shù)據(jù),然后是要寫入的一幀數(shù)據(jù)的長(zhǎng)度字段,最后寫入一幀視頻數(shù)據(jù)。
          一個(gè)avi文件只有一個(gè)頭部信息,即填充完avi文件頭部信息后,便不斷地向文件寫入一幀視頻數(shù)據(jù),直到文件大小達(dá)到預(yù)定大小時(shí),按照循環(huán)存儲(chǔ)規(guī)則新建avi文件。

          4 系統(tǒng)功能測(cè)試
          用Linux C實(shí)現(xiàn)了視頻采集功能、循環(huán)存儲(chǔ)功能,將交叉編譯成功后的應(yīng)用程序下載到板子的根文件系統(tǒng)。自動(dòng)掛載SD卡后執(zhí)行應(yīng)用程序,功能實(shí)現(xiàn)正常,連續(xù)長(zhǎng)時(shí)間運(yùn)行能夠?qū)崿F(xiàn)視頻的循環(huán)錄制。取下SD卡,把視頻復(fù)制到計(jì)算機(jī)上使用視頻播放器播放,視頻清晰流暢。

          結(jié)語(yǔ)
          本文用嵌入式Linux實(shí)現(xiàn)了行車視頻錄制的功能。詳細(xì)介紹了視頻循環(huán)存儲(chǔ)的實(shí)現(xiàn)和視頻文件的保存。作為獨(dú)立的功能部件,本系統(tǒng)可以方便地安裝到汽車上。經(jīng)過軟硬件聯(lián)合測(cè)試,系統(tǒng)工作穩(wěn)定可靠,有一定的實(shí)用價(jià)值。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉