flv解复用介绍—FFmpeg源码分析
flvdec.c
里面其实定义了 3 种 flv
的 Demuxer,例如 ff_kux_demuxer
,ff_live_flv_demuxer
,ff_flv_demuxer
。
不过我们比较常用的是 ff_flv_demuxer
,如下:
AVInputFormat ff_flv_demuxer = {
.name = "flv",
.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
.priv_data_size = sizeof(FLVContext),
.read_probe = flv_probe,
.read_header = flv_read_header,
.read_packet = flv_read_packet,
.read_seek = flv_read_seek,
.read_close = flv_read_close,
.extensions = "flv",
.priv_class = &flv_class,
};
ff_flv_demuxer
有 5 个函数接口,如下:
- flv_probe,探测一段数据,给这段数据打分,越符合
flv
的格式分数就越高 - flv_read_header,读取 FLV 的头部,进行解析。
- flv_read_packet,读取 FLV 的 Tag,进行解析,FLV 的 Tag 不只是 编码压缩后的数据,还有一些媒体信息。
- flv_read_seek,FLV 的默认 seek 性能是很差的,通常需要使用
-flvflags add_keyframe_index
手动加上关键帧表,以此来提高 seek 的性能。 flv_read_close
,xxxx