美文网首页Android直播
ffmpeg中MP4的解复用过程

ffmpeg中MP4的解复用过程

作者: 奔向火星005 | 来源:发表于2017-05-14 08:58 被阅读0次

    主要流程

    1.在s->io_open()中创建了URLContext和它的prot成员(URLProtcol)。其中URLProtcol对应的协议为file:

    MP4解复用00.PNG

    其中MP4的URLProtcol为:

    const URLProtocol ff_file_protocol = {
        .name                = "file",
        .url_open            = file_open,
        .url_read            = file_read,
        .url_write           = file_write,
        .url_seek            = file_seek,
        .url_close           = file_close,
        .url_get_file_handle = file_get_handle,
        .url_check           = file_check,
        .url_delete          = file_delete,
        .url_move            = file_move,
        .priv_data_size      = sizeof(FileContext),
        .priv_data_class     = &file_class,
        .url_open_dir        = file_open_dir,
        .url_read_dir        = file_read_dir,
        .url_close_dir       = file_close_dir,
        .default_whitelist   = "file,crypto"
    };
    

    在libformate/file.c文件中。

    2.在av_probe_input_buffer2()中判断出AVInputFormat:

    av_probe_input_buffer2().PNG

    3.av_probe_input_format3()函数:


    这里写图片描述

    4.mp4对应的read_probe为mov_probe(),在mov.c文件中;

    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,
    };
    

    4.在s->iformat->read_header(s),实际为mov_read_header()中,创建MP4文件的AVStream:

    相关文章

      网友评论

        本文标题:ffmpeg中MP4的解复用过程

        本文链接:https://www.haomeiwen.com/subject/dqafxxtx.html