内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体






基于AVI的网络视频监控存储系统实现方法

时间:2013-10-09 来源:互联网 作者:小甜甜 点击:

  1.网络视频监控系统介绍 
  随着Internet和宽带网络技术的日益发展,具有视频和音频的多媒体内容服务即将成为主流。同时,各种高效压缩解压算法的提出,为多媒体信息在网络上进行传输提供了可能。网络视频监控以直观、方便、信息内容丰富等特点被广泛应用于许多场合。

    网络视频监控系统是一个基于客户机/服务器模型的系统,由视频服务器端和客户端组成。视频服务器是一个由SAA7113、PNX1301、RTL8139等组成的嵌入式系统,SAA7113实现视频的采集;PNX1301是系统的核心,对视频数据进行处理,如视频编码、报警检测、云镜控制等;RTL8139负责数据传输,数据通过网络与客户端交互。

    客户端是一台通用计算机,客户端有选择性地连接单个或者多个服务器,经过身份验证后可以向监控服务器发送命令,从监控服务器获取压缩视频流和其他测量数据,从而实现远程视频监控。

    系统采用XVID视频编解码器对图像数据进行压缩,因为XVID开放源码,可以将它移植到PNX1301的PSOS操作系统中,对图像数据进行编码;客户端计算机从网络接收压缩的视频数据,使用相同版本的XVID解码器解码,即可得到图像数据。

    2.XVID视频压缩格式

    2.1.XVID的特点

    XVID支持多种编码模式,除了最原始单重估定码流压缩(1-passCBR)之外,XVID提供了包括:单重质量模式动态码流压缩、单重量化(Quantization)模式动态码流压缩、和包括外部控制和内部控制的两种双重(2-pass)动态码流压缩模式。

    XVID的运动侦测(MotionSearch)特性,为需要高码流的运动画面可以分配更多空间、更高的码流、更低的量化幅度来保持画面的细节;而对于不包含太多运动信息的静态画面,则消减分配预算。这是XVID做为第二代MPEG4编码的核心内容。

    XVID支持动态关键帧距(I-frameinterval)和B帧,即双向预测帧。此外还支持心理视觉亮度修正、演员表选项。画面优化解码等。

    2.2.XVID的编解码实现方法

    XVID源码有三部分构成:xvidcore、vfw、dshow,可以用MicrosoftVisualC++和NASM编译。本文使用MicrosoftVisualC++2003.net和NASM-0.98.39编译成功,其中编译dshow项目还需要安装DirectX9.0SDK。

    xvidcore工程生成XVID编解码器的API函数库:xvidcore.dll;vfw工程生成XVID编解码器在Windows下的安装文件:xvidvfw.dll和xvid.inf;dshow生成XVID在Windows下注册文件:xvid.ax。

    由于本文的XVID编码部分在PNX1301中实现,在此只介绍XVID的解码部分。

    1)加载xvidcore.dll库函数

    使用XVID的API函数需要加载xvidcore.dll库,并包含vfw.h和xvid.h头文件,调用API函数的方法如下:

    HINSTANCEm_hdll=LoadLibrary("xvidcore.dll");

    xvid_global_func=(int(__cdecl*)(void*,int,void*,void*))GetProcAddress(m_hdll,"xvid_global");

    xvid_decore_func=(int(__cdecl*)(void*,int,void*,void*))GetProcAddress(m_hdll,"xvid_decore");

    2)初始化编解码器

    xvid_global_func(0,XVID_GBL_INIT,&init,NULL);

    3)创建解码器

    intlength=xvid_decore_func(0,XVID_DEC_CREATE,&create,NULL);

    4)结果输出设置

    xvid_dec_frame_t结构是解码的主要参数,其中输出部分需要设置输出缓冲区、步长和输出类型,在颜色深度是24位的情况下,RGB格式的数据步长为图像宽度的3倍。

    frame.output.plane[0]=ostream;

    frame.output.stride[0]=CALC_BI_STRIDE(width,24);

    frame.output.csp=XVID_CSP_VFLIP|XVID_CSP_BGR;

    5)解码

    intlength=xvid_decore_func(dhandle,XVID_DEC_DECODE,&frame,&stats);

    3.利用AVI格式存储视频

    AVI(AudioVideoInterleaved的缩写)是一种RIFF(ResourceInterchangeFileFormat的缩写)文件格式,用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),不过含有单一音频流或单一视频流的AVI文件也是合法的。AVI可以算是Windows操作系统上最基本的、也是最常用的一种媒体文件格式。

    3.1.AVI视频文件结构

    ’avih’:文件信息(AVIFILEINFO格式),’strh’:数据流信息(AVISTREAMINFO格式),’strf’:格式化信息(BITMAPINFO格式)。

    3.2.安装XVID编解码器

    在Windows下使用XVID编解码器,需要安装XVID编解码器。


222222安装需要前面提到xvidcore和vfw项目生成的三个文件xvidcore.dll、xvidvfw.dll和xvid.inf,使用方法是右键点击xvid.inf文件选择“安装”命令即可。

    3.3.存储AVI视频文件

    微软提供了一套API对AVI文件进行读写,使用这些库函数需要在程序中加载vfw32.lib库和vfw.h头文件。本文的对AVI文件的操作都使用此库中的函数。

    如果要对数据流进行压缩,可以使用AVISaveOptions和AVIMakeCompressedStream函数,选择操作系统中已经安装的视频编解码器。由于本文从视频服务器得到的是已经编码的XVID格式数据流,所以不需要这个步骤。

    3.3.1.获取原始数据

    首先获取帧数据的长度,然后获取文件中的原始数据。

    AVIStreamRead(pVideoStream,lFrames,AVISTREAMREAD_CONVENIENT,NULL,0,&lSize,NULL);

    AVIStreamRead(pVideoStream,lFrames,AVISTREAMREAD_CONVENIENT,pBuffer,lSize,NULL,NULL);
(中国集群通信网 | 责任编辑:陈晓亮)

中国集群通信网,国内首家集群通信专业网站。

Copyright © PttCn.Net, All Rights Reserved.   

联系我们 联系我们 中国集群通信网 对讲机学堂 对讲机世界