flv细节解析.doc_第1页
flv细节解析.doc_第2页
flv细节解析.doc_第3页
flv细节解析.doc_第4页
flv细节解析.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.5容器格式TS(tsdemux_t)FLV的转换3.5.1 FLV文件格式解析FLV文件由文件头(FLV header)和FLV Body组成。FLV Body就是很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。FLV header总共9个字节,其格式如下表所示:文件类型3bytes总是FLV(0x46 0x4C 0x56)版本1byte一般是0x01,表示FLV version 1流信息1byte倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对)header长度4bytes整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了表格 1 FLV header格式每个tag包含两个部分,一是tag类型信息部分,15个字节;二是tag data。Tag类型信息部分如下表所示:previoustagsize4bytes前一个tag的长度,第一个tag就是0tag类型1byte三类:8 - 音频tag 9 - 视频tag 18 -脚本tag 数据区长度3bytes时间戳3bytes单位毫秒,如果是脚本tag就是0扩展时间戳1byte作为时间戳的高位streamsID3bytes总是0表格 2 Tag类型信息格式tag data部分分为音频、视频和脚本部分。(1)video Tags,它由一个字节的Video 信息部分和Video 数据区部分组成。video信息1byte前四位bits表示类型:1 - keyframe 2 - inner frame 3 - disposable inner frame (H.263 only) 4 - generated keyframe(reserved for server use only)5 - video info/command frame后四位bits表示编码器id:2 - Seronson H.263 3 - Screen video 4 - On2 VP6 5 - On2 VP6 without channel 6 - Screen video version 2 7 - H264/AVCvideo数据区不定表格 3 视频tags中的VIDEODATA格式针对H264/AVC编码部分,Video数据区的定义如下:AVC packet Type1byte0: AVC sequence header1: AVC NALU2: AVC end of sequenceComposition time3 bytesIf AVC packet type = 1 Composition time Offset Else 0dataN bytesIf AVC packet type = 0 AVCDecoderConfigurationRecordElse if AVC packet type = 1 One or more NALUsElse Empty表格 4 H264/AVC video数据区格式在FLV文件中每个NALU前面都有NALU长度字段。这个是遵从标准IS0/IEC 14496-15中的5.2.3小节。文件中,AVC sequence header 只有一个为了能够从FLV文件中获取NALU,必须要知道NALU前面的NALU长度字段占的字节数(通常是1、2或者4个字节)。这个内容必须要从AVCDecoderConfigurationRecord中获取,这个遵从标准IS0/IEC 14496-15中的5.2.4小节。现在对AVCDecoderConfigurationRecord的结构作一下简要描述,如下图所示。图表 1 FLV文件中 的AVCDecoderConfigurationRecord格式在上图中,用红圈圈住的lengthSizeMinusOne加1就是表是了NALU长度字段所占字节数。下面给出示例。图表 2 从AVCDecoderConfigurationRecord获取NALU长度字段示例从Video tag中获取NALU示意图如下:图表 3 FLV文件中定位NALU示例1从上图可以看出,该NALU的长度为0x222字节。从地址为0x3A3开始到0x5C5为一个NALU。从该NALU的第一个字节0x06也可以看出,它是SEI NALU。由于该tag长度为5760字节,所以该tag中含有不止一个NALU。那么下个NALU单位一定是从0x5CA开始,前面的NALU长度字段应该是从0x5C6开始的4个字节。如下图所示。 图表 4 FLV文件中定位NALU示例2(2)Audio tags音频信息1byteUB4:音频格式0 = Linear PCM, platform endian1 = ADPCM2 = MP33 = Linear PCM, little endian4 = Nellymoser 16-kHz mono5 = Nellymoser 8-kHz mono6 = Nellymoser7 = G.711 A-law logarithmic PCM8 = G.711 mu-law logarithmic PCM9 = reserved10 = AAC11 = Speex14 = MP3 8-Khz15 = Device-specific soundUB2: /音频采样率,对于 AAC总是等于30 = 5.5-kHz1 = 11-kHz2 = 22-kHz3 = 44-kHzUB1 :/采样大小0 = snd8Bit1 = snd16Bit: UB1 /音频声道数,对于AAC总是等于10 = sndMono1 = sndStereo音频数据N bytes表格 5 音频tags中的AUDIODATA格式针对编码部分,音频数据区的定义如下:AAC packet Type1byte0: AAC sequence header1: AAC rawdataN bytesIf AAC packet type = 0 AudioSpecificConfigElse if AAC packet type = 1 Raw AA frame data表格 6 AAC的音频数据区格式由此可知,每一个audio tag 包含一个AAC 帧,且帧长为(数据区长度-2);并且:每个文件只包含一个AudioSpecificConfig,它出现在第一个音频tag.AudioSpecificConfig :参考文献:ISO/IEC 14496-3图表 5 FLV文件中的AudioSpecificConfig字段格式(3)scriptdata tagScriptdata:objectsSCRIPTDATAOBJECTSCRIPTDATAOBJECT结构的长度,不定长End3 bytes总是9,作为SCRIPTDATAOBJECT的结尾Scriptdadaobject :objectNameSCRIPTDATASTRINGobjectDataSCRIPTDATAVALUEScriptdadaobjectend:ObjectEndMarker23 bytes总是 9SCRIPTDATASTRING :StringLength2 bytesStringDataSTRINGSCRIPTDATALONGSTRING:StringLength4 bytesStringDataSTRINGSCRIPTDATAVALUE:Type1 bytes0 = Number type1 = Boolean type2 = String type3 = Object type4 = MovieClip type5 = Null type6 = Undefined type7 = Reference type8 = ECMA array type10 = Strict array type11 = Date type12 = Long string typeECMAArrayLengthIf Type=8, 4 bytesScriptDataValueIf Type = 0DOUBLEIf Type = 1UI8If Type = 2SCRIPTDATASTRINGIf Type = 3SCRIPTDATAOBJECTnIf Type = 4SCRIPTDATASTRINGdefiningthe MovieClip pathIf Type = 7UI16If Type = 8SCRIPTDATAVARIABLEECMAArrayLengthIf Type = 10SCRIPTDATAVARIABLEnIf Type = 11SCRIPTDATADATEIf Type = 12SCRIPTDATALONGSTRINGScript data valueScriptDataValueTerminatorIf Type = 3SCRIPTDATAOBJECTENDIf Type = 8SCRIPTDATAVARIABLEEND表格 7 Scriptdata tag格式onMetaData一个FLV文件用“onMetaData”marher包含metadata.,常见的参数有: duration: a DOUBLE indicating the total duration of the file in seconds width: a DOUBLE indicating the width of the video in pixels height: a DOUBLE indicating the height of the video in pixels videodatarate: a DOUBLE indicating the video bit rate in kilobits per second framerate: a DOUBLE indicating the number of frames per second videocodecid: a DOUBLE indicating the video codec ID used in the file audiosamplerate: a DOUBLE indicating the frequency at which the audio stream is replayed audiosamplesize: a DOUBLE indica

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论