视频信息的作业2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

视频信息处理与传输题目:AVI、MPG、WMV、ASF、RM等视频文件格式和相应的结构体函数文件(C语言格式)摘要:视频是利用人的视觉暂留特性产生的动感可视媒体。根据视觉暂留原理,当静止图像以每秒25~30帧的速度按一定顺序播放时,人眼是无法辨别单独的静态画面的,看上去是平滑连续的视觉效果。专门包含影像及同步声音信息等视频内容的文件叫视频文件,它一般分为影像文件(VideoForma)。随着计算机技术的迅猛发展和互联网的普及,多媒体信息的传播日益显示其重要的地位。大量的音频、视频、动画等多媒体文件的编码及播放成为人们研究的热点。虽然视频文件的格式有许多种,但从上面的简单说明里我们可以知道,这些格式文件的应用都有着两大使用环境,即本地播放和网络播放,因此根据这两大使用环境我们可以将视频格式分为影像文件格式(VideoFormat)和流式视频文件格式(StreamVideoFormat)这么两大类。本文介绍常用的视频文件格式,包括AVI、MPG、WMV、ASF、RM等视频文件格式及其C语言格式的结构体函数文件。关键字:视频文件格式、AVI、MPG、WMV、ASF、RM、结构体函数前言:从早期的幕布电影,发展到现在的高清晰数字影片,从媒体格式以前的WMV、WMA等也发展到如今RMVB、RM、AVI等主流媒体格式在IT领域,我们常说的“格式”通常指文件的格式、数据的输入输出格式、数据的传送格式等。科学技术的发展使得这些视频信息处理的应用日益广泛且向多元化发展。正文:一、AVI格式(AudioVideoInterleaved,即音频视频交错格式):所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放,在AVI文件中,其便是将运动图像和伴音数据以交织的方式来进行存储地,并且这种存储完全独立于硬件设备,这就保证了它在不同平台下均可以获得较好的支持。AVI文件包含三部分:文件头、数据块和索引块。①数据块:包含实际数据流,即图像和声音序列数据。这是文件的主体,也是决定文件容量的主要部分。视频文件的容量等于该文件的数据率乘以该视频播放的时间长度。②索引块:包括数据块列表和他们在文件中的位置,以提供文件内数据随机存取能力。③文件头:包括文件的通用信息,定义数据格式,所用的压缩算法等参数。只要遵循这个标准,任何视频编码方案都可以使用在AVI文件中。这意味着AVI有着非常好的扩充性。AVI文件是一种RIFF(ResourceInterchangeFileFormat,资源交换文件格式)格式文件。1、信息块,一个ID为hdrl的LIST块,定义AVI文件的数据格式。2、数据块,一个ID为movi的LIST块,包含AVI的音视频序列数据。3、索引块,ID为idxl的子块,定义moviLIST块的索引数据,是可选块。avih子块的内容可由如下的结构定义:typedefstruct{DWORDdwMicroSecPerFrame;//显示每桢所需的时间ns,定义avi的显示速率DWORDdwMaxBytesPerSec;//最大的数据传输率DWORDdwPaddingGranularity;//记录块的长度需为此值的倍数,通常是2048DWORDdwFlages;//AVI文件的特殊属性,如是否包含索引块,音视频数据是否交叉存储DWORDdwTotalFrame;//文件中的总桢数DWORDdwInitialFrames;//说明在开始播放前需要多少桢DWORDdwStreams;//文件中包含的数据流种类DWORDdwSuggestedBufferSize;//建议使用的缓冲区的大小,//通常为存储一桢图像以及同步声音所需要的数据之和DWORDdwWidth;//图像宽DWORDdwHeight;//图像高DWORDdwReserved[4];//保留值}MainAVIHeader;strlLIST块用于记录AVI数据流,每一种数据流都在该LIST块中占有3个子块,他们的ID分别是strh,strf,strd;strh子块由如下结构定义。typedefstruct{FOURCCfccType;//4字节,表示数据流的种类vids表示视频数据流//auds音频数据流FOURCCfccHandler;//4字节,表示数据流解压缩的驱动程序代号DWORDdwFlags;//数据流属性WORDwPriority;//此数据流的播放优先级WORDwLanguage;//音频的语言代号DWORDdwInitalFrames;//说明在开始播放前需要多少桢DWORDdwScale;//数据量,视频每桢的大小或者音频的采样大小DWORDdwRate;//dwScale/dwRate=每秒的采样数DWORDdwStart;//数据流开始播放的位置,以dwScale为单位DWORDdwLength;//数据流的数据量,以dwScale为单位DWORDdwSuggestedBufferSize;//建议缓冲区的大小DWORDdwQuality;//解压缩质量参数,值越大,质量越好DWORDdwSampleSize;//音频的采样大小RECTrcFrame;//视频图像所占的矩形}AVIStreamHeader;strf子块紧跟在strh子块之后,其结构视strh子块的类型而定,如下所述;如果strh子块是视频数据流,则strf子块的内容是一个与windows设备无关位图的BIMAPINFO结构,如下:typedefstructtagBITMAPINFO{BITMAPINFOHEADERbmiHeader;RGBQUADbmiColors[1];//颜色表}BITMAPINFO;typedefstructtagBITMAPINFOHEADER{DWORDbiSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes;WORDbiBitCount;DWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER;如果strh子块是音频数据流,则strf子块的内容是一个WAVEFORMAT结构,如下:typedefstruct{WORDwFormatTag;WORDnChannels;//声道数DWORDnSamplesPerSec;//采样率DWORDnAvgBytesPerSec;//WAVE声音中每秒的数据量WORDnBlockAlign;//数据块的对齐标志WORDbiSize;//此结构的大小}WAVEFORMATstrd子块紧跟在strf子块后,存储供压缩驱动程序使用的参数,不一定存在,也没有固定的结构。strlLIST块定义的AVI数据流依次将hdrlLIST块中的数据流头结构与moviLIST块中的数据联系在一起,第一个数据流头结构用于数据流0,第二个用于数据流1,依次类推。数据块中存储视频和音频数据流,数据可直接存于moviLIST块中。数据块中音视频数据按不同的字块存放,其结构如下所述,音频字块##wbWave数据流视频子块中存储DIB数据,又分为压缩或者未压缩DIB,##dbRGB数据流##dc压缩的图像数据流(如果第一个流是音频,则4字符码为‘00wb’;第二个流是视频,则4字符码为‘00db’或‘00dc’).....(网上原话,可能是01db或01dc)看到了吧,avi文件的图像数据可以是压缩的,和非压缩格式的。对于压缩格式来说,也可采用不同的编码,也许你曾经遇到有些avi没法识别,就是因为编码方式不一样,如果没有相应的解码,你就没法识别视频数据。AVI的编码方式有很多种,比较常见的有mpeg2,mpeg4,divx等。索引块,索引快包含数据块在文件中的位置索引,能提高avi文件的读写速度,其中存放着一组AVIINDEXENTRY结构数据。如下,这个块并不是必需的,也许不存在。typedefstruct{DWORDckid;//记录数据块中子块的标记DWORDdwFlags;//表示chid所指子块的属性DWORDdwChunkOffset;//子块的相对位置DWORDdwChunkLength;//子块长度};二、MPG又称MPEG(MovingPicturesExpertsGroup)即动态图像专家组,由国际标准化组织ISO(InternationalStandardsOrganization)与IEC(InternationalElectronicCommittee)于1988年联合成立,专门致力于运动图像(MPEG视频)及其伴音编码(MPEG音频)标准化工作。2.0Mpeg-1数据流分析2.1视频序列层(VideoStream):Video_Stream{unsignedinth_size;/*Horiz.sizeinpixels.*/unsignedintv_size;/*Vert.sizeinpixels.*/unsignedintmb_height;/*Vert.sizeinmblocks.*/unsignedintmb_width;/*Horiz.sizeinmblocks.*/unsignedcharaspect_ratio;/*Codeforaspectratio.*/unsignedcharpicture_rate;/*Codeforpicturerate.*/unsignedintbit_rate;/*Bitrate.*/unsignedintvbv_buffer_size;/*Minimumbuffersize.*/BOOLEANconst_param_flag;/*Contrainedparameterflag.*/unsignedcharintra_quant_matrix[8][8];/*Quantizationmatrixforintracodedframes.*/unsignedcharnon_intra_quant_matrix[8][8];/*Quanitizationmatrixfornonintracodedframes.*/char*ext_data;/*Extensiondata.*/char*user_data;/*Userdata.*/GoPgroup;/*Currentgroupofpict.*/Pictpicture;/*Currentpicture.*/Sliceslice;/*Currentslice.*/Macroblockmblock;/*Currentmacroblock.*/Blockblock;/*Currentblock.*/intstate;/*Stateofdecoding.*/intbit_offset;/*Bitoffsetinstream.*/unsignedint*buffer;/*Pointertonextbyteinbuffer.*/intbuf_length;/*Lengthofremainingbuffer.*/unsignedint*buf_start;/*Pointertobufferstart.*/intmax_buf_length;/*Maxlenghtofbuffer.*/PictImage*past;/*Pastpredictiveframe.*/PictImage*future;/*Futurepredictiveframe.*/PictImage*current;/*Currentframe.*/PictImage*ring[RING_BUF_SIZE];/*Ringbufferofframes.*/}Video_Stream;具体的序列标题的结构的部分是这样的:序列sequence_header{SEQ_START_CODE0x000001b3;/*常量,作用使用来定位视频序列的序列头*/unsignedi

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功