FFmpeg解复用

       解复用是多媒体开发中核心的功能。解复用功能是从音视频信号源中分流出不同的音频和视频流;另外解复用一般属于一种主动操作,即从音视频信号源中取出。

数据流结构为Source->Demux->Stream

      主要实现模式有:

1)直接模式:直接从信号源获取相应的音频或者视频数据。这种方式适合顺序读取和拥有帧位置元数据等信号源。

使用这种模式,实际是从Demux中直接获取数据,当然也可以从Stream,然后间接调用Demux获取。

2)索引模式:直接模式中如果不包含帧位置元数据的信息(或者收录的实时流文件),就不能进行seek。

为解决该问题,可在文件解析过程中,对音频或者视频流分别建立索引。使用这种模式,Demux在解析完数据后的功能弱化,获取数据实际是Source->Stream。

3)缓存模式:解复用音视频数据,分别进行缓存,然后通过相应数据流接口获取数据。网络流的解复用使用该种模式。

        一般解复用流程如下:

                                                         图1.1   解复用流程图

2、解复用相关结构体

3、解复用流程

MP4对应的AVFormatContext:

AVInputFormat ff_mov_demuxer = {
    .name = "mov,mp4,m4a,3gp,3g2,mj2",
    .long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
    .priv_class = &mov_class,
    .priv_data_size = sizeof(MOVContext),
    .extensions = "mov,mp4,m4a,3gp,3g2,mj2",
    .read_probe = mov_probe,
    .read_header = mov_read_header,
    .read_packet = mov_read_packet,
    .read_close = mov_read_close,
    .read_seek = mov_read_seek,
    .flags = AVFMT_NO_BYTE_SEEK,
};
发布了538 篇原创文章 · 获赞 1318 · 访问量 194万+

猜你喜欢

转载自blog.csdn.net/fanyun_01/article/details/104566459
今日推荐