您好,欢迎来到世旅网。
搜索
您的当前位置:首页基于嵌入式Linux系统的单个AVI文件视频循环录制的研究

基于嵌入式Linux系统的单个AVI文件视频循环录制的研究

来源:世旅网
维普资讯 http://www.cqvip.com

第36卷第8期 林业机械与木工设备 Vo1 36 No.8 2008年8月 FORESTRY MACHINERY&WOODWORKING EQUIPMENT Aug.2008 刘少刚 -2'王学军 (1.哈尔滨工程大学机电工程学院,黑龙江哈尔滨150001;2.国家林业局哈尔滨林业机械研究所, 黑龙江哈尔滨150086) 摘要:根据某些特殊作业现场对视频监控的要求,对视频文件循环录制在监控中的重要性进行了分析和讨 论。针对当前视频文件循环录制中一般所采用的多文件录制存在的问题,提出了一种在嵌入式Linux系统下采用单 个AVI文件进行循环录制的方法。在研究中,重点解决了如何写入帧数据和关闭文件以保证数据完整等问题。实验 结果表明,采用单个AVI文件进行视频循环录制方法可行,且能很好地解决采用多个文件时的繁琐和前后文件之 间视频信息丢失等问题。 关键词:视频监控;循环录制;AVI;嵌入式系统;Linux 中图分类号:TN946,9 文献标识码:A 文章编号:1001—4462(2008)08—0048—04 Research of Cyclic Recording of a Single AVI File Based on Embedded Linux System LIU Shao-gang‘2 WANG Xue-jun (1.College of Mechanical and Electrical Engineering,Harbin Engineering University,Harbin Heilongifang 150001,China; 2.Harbin Research Institute of Forestry Machinery,the State Forestyr Administration,Harbin Heilong,iiang 150086,China) Abstract:Based on the demand of video surveillance in certain special workplaces,the importance of cyclic recording of video files in the monitoring operation is analyzed and discussed.In view of hte serious problems with multi——file recording htat is commonly used for the cyclic recording of video files currently,a cyclic recording method based on embedded Linux system, using a single AVI file,is presented.In the research,great importance has been attached to the solution to the problems about how to write frame data and how to close a ifle to ensure data integrity.The experiments show that ii is feasible to use a single AVI file for cyclic recording of video files and that it can avoid the complexity of multi——ifle method and the loss of video information in two consecutive ifles. Key words:video surveillance;cyclic recording;AVI;embedded system;Linux 在某些特殊作业现场,尤其是一些危险作业、无人 目前视频监控和录制主要采用摄像头、硬盘录像 值守的场合,如化工厂、红外成像森林火灾监测站、自 机、录像带等组成视频监控网。该类视频监控网络具有 动检测线、高速交通工具等,当发生事故或灾情后,往 工作稳定可靠的优点,但由于事故的突发性和偶然性, 往由于现场的破坏和时效性,而难以分清责任和分析 以及需要监控的危险地点经常变动,使固定视频监控 事故原因。因此,对事故易发点的连续视频监控就尤为 网络的安装调整、运行管理和维护等方面的问题显得 重要。 比较突出。 收稿日期:2008一o6—19 当发生事故时,绝大多数需要掌握的事故原因集 基金项目:国家科技部社会公益研究专项(2002DIB50121); 中在事故之前很短的一段时间。因此,分清事故责任和 国家“948”专项资助(2003—4—29) 分析事故原因所需要的视频信息大部分在事故时间点 维普资讯 http://www.cqvip.com 第8期 刘少刚,等:基于嵌入式Linux系统的单个AVI文件视频循环录制的研究49 之前的几十分钟之内。换句话说,除了这几十分钟的信 息,其它几天、几个月,甚至几年的视频监控信息都属 于冗余信息。 有鉴于此,本文提出了利用嵌入式系统实现视 字视频文件格式,它于1992年初被Microsoft公司推 出,随Windows3.1一起被人们所认知和熟识。由于它 的图像质量好以及可以跨多个平台使用,已经成为目 前最常用的文件格式。在AVI文件中,运动图像和伴 音数据以交织方式存储,并独立于硬件设备。这种交 替组织方式与电影相似,所有的图像信息都是以帧的 频信息的循环录制,只保留最后时段视频信息的便 携式连续视频监控系统,并在Linux系统的基础上得 以实现。 1系统简介 目前,国内外视频监控的最显著趋势是监控的数 字化和网络化。数字监控系统通常分为两类:一类是基 于PC机组合的计算机多媒体工作方式;另一类是嵌入 式数字监控系统。由于后者在实时性、稳定性和成本上 都有较大优势,因此我们采用的是嵌入式数字监控系 统。为了便于监控多个随机点,本系统采用了分散存 储,即信息存贮于本机的方法。 当前视频信息的循环录制应用已比较广泛,但都 是采用了日志处理的方法,即通过多个文件实现循环 录制。如每10min产生一个文件,通过覆盖最早产生的 文件达到循环录制的目的。这种方式在实现上比较简 单,但产生的文件较多,比较繁琐。另外,这种方式有一 个最明显的缺陷,即在前后两个文件中间存在视频数 据丢失现象。有鉴于此,本文研究了采用单个AVI(Audio Video Interleave)文件进行视频循环录制的方法,并在嵌 入式Linux系统中得以实现。 1.1 系统硬件 在本系统研究中,采用了目前比较常见的ARM920T 核心¥3C2410处理器口],其具有丰富的功能和很高的性 价比。在处理器丰富资源的基础上,对系统硬件进行了 相关的配置和扩展,平台配置了16MB16位的Flash和 64MB32位的SDRAM,另外引出了1个串行接口和1 个HOST USB接口。通过USB接口外接USB摄像头和 U盘,实现了整个硬件平台的搭建 ]。 1.2系统软件 由于MIZI对¥3C2410进行了较完善的Linux平台 开发,以及Linux系统具有开放和稳定等优点,本研究 采用了Linux操作系统。就整个研究过程来说,软件部 分主要包括操作系统的下载和应用程序的移植。操作 系统的下载这部分又包括交叉编译环境的建立和内核 的配置。由于建立交叉编译环境和内核配置这方面的 资料比较详细,在此不再进行详细说明。 2 AVI文件格式 AVI是一种音频和视频两种数据流交错记录的数 形式显示…。 2.1 AVI文件结构 AVI文件由文件头、数据块和索引块3部分组成。 文件头包括文件的通用信息、定义数据格式及所 有的压缩算法等参数;数据块包含实际数据流,即图像 和声音序列数据,为文件的主体,直接决定文件的大 小;索引块包括数据块列表和它们在文件中的位置,以 提供文件内数据随机存取的能力。 在本课题研究中,根据实际需要,在数据块的录制 部分仅保留了视频部分。 2.2 AVI文件的主要参数 AVI文件的主要参数包括视窗参数、压缩参数和伴 音参数等。 视窗参数主要包括视窗尺寸和帧率。视窗尺寸参 数包含设定视窗的大小和分辨率。视窗尺寸越大、分辨 率越高,数据量越大。帧率则直接关系到画面的流畅程 度,其值越高,数据量越大,本研究中将窗口尺寸设为 320 ̄240。压缩参数是指文件中所采用的压缩标准。伴 音参数主要是协调声音和图像的同步问题,由于CPU 处理能力等原因,有可能出现声音和图像不同步的现 象。因为在研究中去掉了音频部分,所以并没有考虑不 同步问题。 3循环录制的方法 对于在Linux系统下如何用摄像头进行采集,现有 的研究成果较多,因此,这里不再赘述。以下介绍如何 进行循环录制。 图1所示为循环录制的软件部分函数结构[ 。 I  open—output_file() J sd—vide0() 』 write_frame() I close_output_file() 图1函数结构 维普资讯 http://www.cqvip.com 50 林业机械与木工设备、 第36卷 3.1打开或新建文件 首先通过open_output_file()打开或创建文件,把文 件头部分赋值为0,把状态定为可写,移动指针到文件 头尾部,为后面写入视频数据做准备[6]。部分代码 如 下: AVI->fdes-- open(filename,O—RDWRIO_CREAT,0600); ,/文件标志符指向创建文件 for(i:0;i<HEADERBYTES;i++) AVI_header【i]=0; i= write(AVI一>fdes,AVI—header,HEADERBYTES);//文件 头部分填充0 if(i!=HEADERBYTES) { close(AVI一>fdes); //关闭文件描述符 AVI_errno=AVI_ERR—WRITE; Free(AVI);//释放空间 return 0: } AVI一>pos=HEADERBYTES; //位置指针 AVI一>mode=AVI—MODE—WRITE; //文件可写 3.2设置视频信息 通过set_video()函数设置视频参数,需要注意的 是文件状态可写时才能进行设置隅]。部分代码如下: if(AVI一>mode==AVI_MODE_READ)return; ,/状态必须可写 AVI一>width=width;//窗口尺寸设置 AVI一>height=height; AVI一>fps=fps; //帧率 memcpy(AVI一>c0mpress0r,compressor,4); //写入压缩方式 AVI一>compressor【4]=0; 3.3写入帧数据 写入帧数据这个环节是最重要的一步,因为就整 个循环录制来说,主要指的是帧数据的循环,这个环节 主要考虑文件在未写满和写满两种情况下如何写入。 对于前一种情况比较好处理,只需要在文件状态为写 入和写入帧数据正确时,文件位置后移和帧数增加1 即可。对于后面一种情况,即文件达到预期大/J,0 ̄ ̄u何 进行覆盖则比较烦琐。实验证明仅通过移动位置指针 到前面要覆盖处是不行的,那样会使先前写入的帧数 据无法保存,造成帧数据丢失。 为了解决这个问题,我们在研究过程中新定义了 一个最大帧数常量MaxFrames,通过判定最大帧数作为 开始循环的标志,而不以通常的最大文件尺寸 Max_File—Size作为开始循环的标志。当AVI一> video_frames等于MaxFrames时,通过lseek()移动位置 指针到HEADBYTE,令AVI一>video_frames重新为0。 另外在该环节中采用了函数write_data()和函数 add_chunk()l9]。write_data()的主要功能是判定写入帧 数据是否正确。add chunk()的主要功能是增加数据块 并移动位置指针。 ’ writeframe()代码如下: write_frame(avi_t AVI,char data,long bytes) {long pos; if(AVI一>mode==AVI—MODE—READ) { AVI—errno=AVI—ERR—NOT_PERM; return一1; }//文件状态只读时错误,必须可写状态 if(AVI一>video_frames==MaxFrames) { lseek(AVI一>fdes,HEADERBYTES,SEEK_SET); AVI一>pos=HEADERBYTES;//移动位置 AVI一>video_frames=0;//帧数返回零 } pos=AVI一>pos; if(avi write_data(AVI,data,bytes,0))return一1; AVI一>last_pos=pos; //last_pos为上一帧位置 AVI一>lastlen=bytes; //last_len为上一帧长度 AVI一>videoframes++; return 0; } . add_chunk()[10J部分代码如下: if(write(AVI一>fdes,data,length)!=length) {,/写人数据长度不等则失败 lseek(AVI一>fdes,AVI一>pos,SEEK,SET);AVI_errno= AVI_ERR_WRITE; return一1; } AVI->pos+:8+length; , 入成功,则移动位置指针 3.4关闭文件 维普资讯 http://www.cqvip.com 第8期 刘少刚,等:基于嵌入式Linux系统的单个AVI文件视频循环录制的研究 51 关闭文件这个环节是任务最繁重的一个环节,因 上的一个固定或移动式存贮器内。本系统运行时,可以 根据自己的需要设置循环时间的长短,以满足不同的 为在这一部分不仅要写入文件头信息和索引块的内 容,而且要对写入位置进行判定,即当前文件是否循环 过。如果没有循环过,则直接增加索引块即可;反之,需 移动位置指针到HEADERBYTEs+MaxFramesxbytes并 令AVI一>video_frames为MaxFrames,其中bytes为每帧 数据的大小。为了能更好地进行判定,我们在上面部分 AVI一>videoframes==MaxFrames时增加状态变量 _需求和存贮器的容量限制。 5小结 本文根据特殊工作现场对循环视频监控系统的要 求,分析了当前国内外视频监控的现状及发展趋势,针 对当前多文件视频循环录制中存在的问题,在嵌入式 Linux系统中利用单个AVI文件实现了视频循环录制。 AVI一>t=1,最后判定AVI一>t的值即可,若为零,则没有 进行过循环;反之,则进行过循环。由于写入文件头信 程序运行实验表明该方法可行,与多个文件实现循环 息和索引块的源代码比较多,因此不再列出。 录制相比其更加可靠、稳定和简捷,解决了多文件系统 运行时的视频数据丢失问题。 4程序运行实验及分析 参考文献: 程序编写完成后,就可以通过在宿主机上使用交 [1]陈义钦,覃团发,陈俊江,等.基于ARM9的视频采集传输系统 叉编译器编译连接使之生成可执行文件,并向目标机 [J].电子工程师,2007,33(5):21—23. 移植,成功移植后就可以在目标机上运行。另外,我们 [2]龚璞,王德生.Linux平台高速雷达视频采集与显示[J].微计算机 在程序实验中加入了图像显示部分,以便于更加直观 信息,2006,22(12—2):47—49. 地观察采集效果。下面是采用的实验设备和软件部分 [3]广州友善之臂计算机科技有限公司.Nano2410 A V2.0用户手册 [z].2007. 的设定: [4] 吕四化,史萍.视频文件格式研究[J].北京广播学院学报(自然科 实验设备:宿主机:PIV1.8G; 学版),2004,11(4):39—46. 目标机:ARM9内核为2.4.18; [5]李明,王库.远程嵌入式农作物视频采集系统[C].2005年中国农 摄像头:ov511芯片; 业工程学会学术年会论文集,2005. 显示器:2-5英寸液晶屏; [6]anonymous.http://aviifle.sourceforge.net/.2007. 存贮器:清华紫光u盘,容量为1G; [7]Dan Frakes,Be a Player[J].Macworld,2004. USB HUB。 [8] M.Ruiz,E.Barrera.Real—time data acquisition and processing 软件设定:窗口尺寸:320x240; platform for fusion experiments lJ].Fusion Engineering and Design,2004. 帧率:80s; [9]James Walton,Peter Hodgson,Karen Hallamasek,Jake Palmer. 循环帧数:3000。 “4DCAFFURE’’A generla purpose software package for capturing 我们分别录制了1min和15min以观察效果,并在 nad analyzing two——and——three—-dimensional motion data acquired 每分钟对摄像头拍摄的物体进行变更,最后,通过对2 from video sequences[C].25th International Congress on High— 个录制文件进行分析,第一个没有进行过循环,第二个 Speed Photography nad Photonics,2003. 则很好的进行了循环,图像比较清晰,效果也比较好。 [10]Steve Maguire.Writing Clean Code[M].1992. 图2为录制过程中采集到的一幅图像。 作者简介:刘少刚(1962一),男,教授,博士生导师,E—mail: liushaogang@hrbeu.edu.cn;王学军(1980一),男,硕士研究生,E— mail:cilvin123@16 3.com。 图2采集的图像 实验表明,完全可以在嵌入式Linux系统下利用单 个AVI文件实现视频循环录制,结果可保存在目标机 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- esig.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务