欢迎来到天天文库
浏览记录
ID:35200130
大小:1.00 MB
页数:12页
时间:2019-03-21
《flv二进制文件格式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、FLV是一个二进制文件,简单来说,其是由一个文件头(FLVheader)和很多tag组成(FLVbody)。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流,而每个tag又由tagheader和tagdata组成。文件头由9bytes组成前3个bytes是文件类型,总是“FLV”,也就是(0x460x4C0x56)。第4btye是版本号,目前一般是0x01。第5byte是流的信息,倒数第一bit是1表示有视频(0x01),倒数第三bit是1表示有音频(0x4),有视频又有音频就是0x01
2、0x04(0x05),其他都应该是
3、0。最后4bytes表示FLV头的长度,3+1+1+4=9。FLVheader后面就是FLVbody,FLVbody由若干个tag组成。每一个tag第一部分是tagheader,tagheader长度为11bytes,但是每个tagheader前面有4bytes记录着上一个tag的长度,此待会儿再说。tagheader的第1个byte为记录着tag的类型,音频(0x8),视频(0x9),脚本(0x12);第2到4bytes是数据区的长度,也就是tagdata的长度;再后面3个bytes是时间戳,单位是毫秒,类型为0x12则时间戳为0,时间戳控制着文件播放的速度,可
4、以根据音视频的帧率类设置;时间戳后面一个byte是扩展时间戳,时间戳不够长的时候用;最后3bytes是streamID,但是总为0,再后面就是数据区了(tagdata),也即是h264的裸流,tagheader长度为1+3+3+1+3=11。0x12前面的00000000就是刚刚说的记录着上一个tag的长度的4bytes,这里因为前面没有tag,所以为0。tagdata如果是音频数据,第一个byte记录audio信息:前4bits表示音频格式(全部格式请看官方文档):·0--未压缩·1--ADPCM·2--MP3·4--Nellymoser16-kHzmono·5
5、--Nellymoser8-kHzmono·10--AAC下面两个bits表示samplerate:·0--5.5KHz·1--11kHz·2--22kHz·3--44kHz下面1bit表示采样长度:·0--snd8Bit·1--snd16Bit下面1bit表示类型:·0--sndMomo·1--sndStereo之后是数据。如果是视频数据,第一个byte记录video信息:前4bits表示类型:·1--keyframe·2--innerframe·3--disposableinnerframe(h.263only)·4--generatedkeyframe后4b
6、its表示解码器ID:·2--seronsonh.263·3--screenvideo·4--On2VP6·5--On2VP6withalphachannel·6--Screenvideoversion2·7--AVC(h.264)之后是数据。如果是AAC和AVC的音视频,则在放入数据前有一个音频和视频的配置信息需要写入前两个tag,等会再说。之前说每个tag前面会有一个记录上个tag长度的4个bytes(previoustagsize),整个的flv文件其实是:FLVheader+previoustagsize0+tag1+previoustagsize1+ta
7、g2+previoustagsize2+...+tagN+previoustagsizeN。第一个previoustagsize因为前面没有tag,所以为0,其他的总是记录着前面一个tag长度(tagdatasize+tagheadersize)。如果tagdata是脚本数据,ScriptTagData,该类型Tag又通常被称为Metadata(元数据)Tag,会放一些关于FLV视频和音频的参数信息,如duration、width、height等。通常该类型Tag会跟在FileHeader后面作为第一个Tag出现,而且只有一个。一般来说,该TagData结构包含两
8、个AMF包。AMF(ActionMessageFormat)是Adobe设计的一种通用数据封装格式,在Adobe的很多产品中应用,简单来说,AMF将不同类型的数据用统一的格式来描述。第一个AMF包封装字符串类型数据,用来装入一个“onMetaData”标志,这个标志与Adobe的一些API调用有,在此不细述。第二个AMF包封装一个数组类型,这个数组中包含了音视频信息项的名称和值。具体说明如下,大家可以参照图片上的数据进行理解。第一个AMF包:第1个字节表示AMF包类型,一般总是0x02,表示字符串,其他值表示意义请查阅文档。第2-3个字节为UI16类型值,表示字符
9、串的长度,
此文档下载收益归作者所有