音视频开发_FLV 封装格式剖析
最近更新:2024-09-23
|
字数总计:522
|
阅读估时:2分钟
|
阅读量:次
- FLV封装格式剖析
- 标准flv文件结构图解
- Body部分解析(!!!从这里开始都是Tag body的部分)
- Script Tag Data结构
- Audio Tag Data结构
- Video Tag Data结构
- 视频TagData中CompositionTime解析
FLV封装格式剖析
标准flv文件结构图解


- flv⽂件中Timestamp和TimestampExtended拼出来的是dts。也就是解码时间。
Timestamp和TimestampExtended拼出来dts单位为ms。(如果不存在B帧,当然dts等于
pts)
Body部分解析(!!!从这里开始都是Tag body的部分)
Script Tag Data结构
- AMF包1:第1个字节表示AMF包类型,⼀般总是0x02,表示字符串。第2-3个字节为UI16类型值,
标识字符串的⻓度,⼀般总是0x000A(“onMetaData”⻓度)。后⾯字节为具体的字符串,⼀般总
为“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。
- AMF包2:第1个字节表示AMF包类型,⼀般总是0x08,表示数组。第2-5个字节为UI32类型值,表
示数组元素的个数。后⾯即为各数组元素的封装,数组元素为元素名称和值组成的对。如:“duration”-“210.732”、“width”-“768.000”。
Audio Tag Data结构
- 第一个字节为音频的信息,前4个bit为音频格式SoundFormat(枚举),后两个bit为采样率SoundRate(枚举),下一个bit为采样精度SoundSize(枚举),最后一个bit为音频声道SoundType(枚举)。
- 第二个字节为音频数据。假设SoundFormat == 10(AAC)有两种情况:
- 第一个字节AACPacketType == 0(AudioSpecificConfig),那么该TagBody后续跟着的是音频Config数据;
- 第一个字节AACPacketType == 1(AAC raw),那么该TagBody后续跟着的是AAC frame data;
Video Tag Data结构
- 第一个字节为视频信息,前4个bit为帧类型(枚举),后4个bit为编码器id CodecID(枚举)。
- 第二个字节为视频数据,假设CodecID == 7(AVC格式)有三种情况:
- 第一个字节AVCPacketType == 0(AVC序列头),后面跟24个bit为CompositionTime,此时都为0,后面跟AVCDecoderConfigurationRecord;
- 第一个字节AVCPacketType == 1(AVC NALU),后面跟24个bit为CompositionTime,此时不为0,后面跟一个或多个NALU;
- 第一个字节AVCPacketType == 2(AVC序列结尾),后面跟24个bit为CompositionTime,此时都为0,后面为空;
视频TagData中CompositionTime解析
- 视频中的CompositionTime表示pts相对于dts的偏移值。
- 显示时间(pts)= 解码时间(dts)/ tag header的Timestamp和TimestampExtended拼起来的dts + CompositionTime
- 以上时间均为ms单位
2023-08-09
该篇文章被 Cleofwine
归为分类:
音视频