本文共 1371 字,大约阅读时间需要 4 分钟。
【网络通信 -- 直播】音视频常见封装格式 -- FLV
FLV 格式
FLV(Flash Video)是 Adobe 公司推出的一种音视频封装格式,常用于网络直播和流媒体传输。FLV 支持的视频编码格式主要是 H264,音频是 AAC。
FLV 文件结构
FLV 文件由 FLV Header 和 FLV Body 两部分组成:
FLV Header:包含 9 个字节,主要用于标识文件类型和文件结构。 FLV Body:包含多个 Tag,包括音频流(audio)、视频流(video)和脚本流(script)。每个 Tag 由 Tag Header 和 Tag Data 两部分组成。 字段名称 | 字段长度 | 说明 |
Signature | 1 byte | 必须为 'F'(0x46) |
Version | 1 byte | 通常为 0x01 |
TypeFlagsReserved | 5 bits | 必须为 0 |
TypeFlagsAudio | 1 bit | 表示是否含有音频 |
TypeFlagsVideo | 1 bit | 表示是否含有视频 |
DataOffset | 4 bytes | 文件头部的大小(从文件开始位置到 Body 的偏移量),通常为 9 |
FLV Body 结构
FLV Body 由多个 Tag 组成,每个 Tag 的格式如下:
Tag Header:包含 11 字节,包括:
- Tag 类型(TagType):1-2 位必须为 0,3 位为加密标志(默认 0),4-8 位表示编码类型。
- 数据大小(DataSize):3 bytes,表示 Tag Data 的长度。
- 时间戳(Timestamp):3 bytes,表示视频或音频的绝对时间戳。
- 时间戳扩展(TimestampExtended):1 byte,用于扩展时间戳。
- 流 ID(Stream ID):3 bytes,通常为 0。
- 数据(Data):包含音视频数据或元数据。
Tag Data:根据编码类型(如 H264 和 AAC)不同,数据格式也会有所差异。
Tag 类型
- Script Tag:用于存储视频和音频的元数据,如视频宽度、高度、时长等。
- Video Tag:封装 H264 视频数据,包含视频帧信息和编码配置。
- Audio Tag:封装 AAC 音频数据,包含采样率、通道信息等。
FLV 的优势
FLV 文件结构流式化,支持在线动态扩展。 FLV 文件适合实时流媒体,效率高。 FLV 文件兼容性强,支持多种编码格式。 FLV 与 RTMP 的关系
RTMP(Real-Time Media Protocol)是用于实时媒体传输的协议,FLV 文件实际上是 RTMP 数据的封装形式。FLV 文件可以看作是 RTMP 数据的“马甲”,两者之间存在密切关联。
FLV 知识点总结
FLV 适合录制的原因:
- FLV 文件结构流式化,便于随时添加音视频数据。
- 相比 MP4 等格式,FLV 文件头部固定,体积小且处理时间短。
FLV 与 MP4 的区别:
- FLV 文件的数据部分可以随时扩展,而 MP4 文件的文件头会随着数据增加而增长。
- FLV 文件适合实时流媒体,传输效率高。
通过对 FLV 格式的深入理解,可以更好地实现网络直播和音视频流媒体的传输与播放。
转载地址:http://fomr.baihongyu.com/