FLV
文件格式
FLV header | Pre Tags Size 0 | Flv Tag 1 | Pre Tag size 1 | FLV Tag 2 | … | FLV Tag n |
---|
- tag1是metadata,记录视频的一些信息
- tag2是视频配置信息(AVC decoder configuration record),video tag
- tag3是音频配置信息(如果没有音频则去掉此项)
- tag4以及之后的tag就是音视频数据了。
Flv header
‘F’ | ‘L’ | ‘V’ | 版本号(0x01) | 流信息 | FLV头长度(4bytes) |
---|
媒体信息
- 倒数第一bit是1表示有视频(0x01)
- 倒数第三bit是1表示有音频(0x4)
- 有视频又有音频就是0x01 | 0x04(0x05)
- 其他都应该是0。
FLV Body
整体结构
Pre Tag Size(4字节) | Tag header | Tag data |
---|
Tag结构
Tag header | Tag Data |
---|
Tag header结构
名称 | 长度 | 介绍 |
---|---|---|
Tag type | 1bytes | 8:音频 9:视频 18:脚本 |
数据区长度 | 3bytes | 数据区长度 |
时间戳 | 3bytes | 整数,单位是毫秒。对于脚本型的tag总是0 其中script(脚本)、video(视频)、audio(音频)的第一个tag的时间戳值都为0 时间戳占4个字节 其中第四个字节是高位 前三个字节是低位(每个tag的5~8字节) |
时间戳扩展 | 1bytes | 将时间戳扩展为4bytes,代表高8位。很少用到 |
StreamsID | 3bytes | 总是0 |
数据区(data) | 由数据区长度决定 | 数据实体 |
Tag data结构
视频Tag
video tag header | video data |
---|
video Tag header
名称 | 长度 | 介绍 |
---|---|---|
帧类型 | 4bit | 1: keyframe (for AVC, a seekable frame) 2: inter frame (for AVC, a non-seekable frame) 3: disposable inter frame (H.263 only) 4: generated keyframe (reserved for server use only) 5: video info/command frame |
codec id | 4bit | 1: JPEG (currently unused) 2: Sorenson H.263 3: Screen video 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC |
IF CodecID == 7
AVCPacketType | 8bit | 0 = AVC sequence header 1 = AVC NALU 2 = AVC end of sequence (lower level NALU sequence ender is not required or supported) |
---|---|---|
CompositionTime | 3bytes | 每个视频tag的第14~16字节(表示PTS相对于DTS的偏移值 ) CompositionTime 单位为ms 显示时间 = 解码时间(tag的第5~8字节) + CompositionTime 对于摄像头来讲,dts=pts,此值传0即可 |
sps nalu size | 4 | |
sps nalu data | n | |
pps nalu size | 4 | |
pps data | n | |
sei nalu size | 4 | |
sei data | n | |
inter frame nalu size | 4 | |
inter frame data | n |
- flv里面的h264是avcc封装
Tag 分类
- Audio Tag
- Video Tag
- Script Tag(Metadata,元数据),通常该类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。
AVCDecoderConfigurationRecord
字段 | 长度(byte) | 说明 |
---|---|---|
configurationVersion | 1 | 0x01 |
AVCProfileIndication | 1 | |
profile_compatibility | 1 | |
AVCLevelIndication | 1 | |
lengthSizeMinusOne | 1 | avcc nalu的size字段的长度,0xff |
sps nums | 1 | 0xE1 |
sps data length | 2 | |
sps data | n | |
pps nums | 1 | 0x01 |
pps data length | 2 | |
sps data | n |