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

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

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






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

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

    原始数据为压缩数据,可以直接调用XVID的API函数对其进行解码得到图像数据。

    3.3.2.获得RGB格式的数据

    使用AVI的API函数可以直接自动调用XVID解码器,获得RGB格式的数据。

    1)获取格式化信息

    先获取格式的大小,可由此判断数据流是视频流还是音频流。

    AVIStreamReadFormat(pVideoStream,AVIStreamStart(pVideoStream),NULL,&lSize);

    获取格式化信息内容,如果是视频流则转化为BITMAPINFO格式,即可获取格式化的具体信息,如图像的大小,压缩方式,颜色深度,缓冲区大小等。

    AVIStreamReadFormat(pVideoStream,AVIStreamStart(pVideoStream),pChunk,&lSize);

    LPBITMAPINFOpInfo=(LPBITMAPINFO)pChunk;

    2)设置结果的信息头

    这里我们想得到RGB格式的数据流,原始数据格式为XVID格式,这里我们只需要改变原始格式的压缩方式和缓冲区大小就可以了。缓冲区的大小计算公式如下,它的大小和相同大小的BMP图像数据大小是相等的。

    LPBITMAPINFOHEADERpBmpih=GetStreamFormat();

    pBmpih->biCompression=BI_RGB;

    pBmpih->biSizeImage=((pBmpih->biWidth*pBmpih->biBitCount+31)/32*4)*pBmpih->biHeight;

    3)获取RGB格式化数据流,如果pBmpih为空,将到原始数据

    PGETFRAMEpVideoFrame=AVIStreamGetFrameOpen(pVideoStream,pBmpih);

    4)获取RGB数据,获得的RGB数据包括40字节的图像格式信息

    LPBYTEpImage=(LPBYTE)AVIStreamGetFrame(pVideoFrame,lFrames);

    pImage=pImage+sizeof(BITMAPINFOHEADER);

    3.4.AVI视频播放

    如果操作系统没有安装XVID编解码器,播放器无法识别XVID格式的AVI文件。解决的方发是使用如上文的安装方法,或者使用dshow生成的xvid.ax注册文件。

    注册方法是在命令行输入:

    “/system/regsvr32/xvid.ax”

    例如:“C:/windows/system/regsvr32C:/ProgramFiles/xvid.ax”,然后复制xvidcore.dll到“/system32”,如:“C:/windows/system32”。测试是否安装成功的方法是播放一段XVID片断,看播放器是否正常工作。

    本文使用三种方法对播放XVID视频进行测试,都工作正常。一是利用xvidcore.dll、xvidvfw.dll和xvid.inf,然后安装xvid.inf,使用WindowsMediaPlayer播放;二是xvidcore.dll和xvid.ax,注册xvid.ax,使用WindowsMediaPlayer播放;三是安装暴风影音,使用暴风影音的XVID编解码器,用暴风影音播放。

    4.结论

    利用AVI文件存储XVID格式视频流完全可行,由于大部分播放器支持A


(中国集群通信网 | 责任编辑:陈晓亮)

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

Copyright © PttCn.Net, All Rights Reserved.   

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