美文网首页iOS
av_read_frame 主要执行函数

av_read_frame 主要执行函数

作者: 只为此心无垠 | 来源:发表于2018-01-20 10:32 被阅读47次

    1. av_read_frame

    2. -> read_frame_internal

    3. -> ff_read_packet

    4. -> (s->iformat->read_packet) ,相当于调用flv_read_packet,AVInputFormat,这一步完成了AVFormatContext到AVIOContext格式
    5. -> av_get_packet ,(AVIOContext *s, AVPacket *pkt, int size)

    6. -> append_packet_chunked

    7. -> avio_read

    其中,第4步中,(s->iformat->read_packet)是对应的demuxer,比如对于mp4文件用的是mov_read_packet. demuxer会解析出下一帧需要多少byte, av_get_packet负责把需要的数据读出来,放到AVPacket中.

    第7步,avio_read中,在libavformat/aviobuf.c中

    1. 如果AVIOContext中的数据够,AVPacket从AVIOContext中拷贝数据
      1、read_packet_wrapper
      2、 →read_packet ,(void *opaque, uint8_t *buf, int buf_size)
      3、 →memcpy ,memcpy指的是c和c++使用的内存拷贝函数,(void *dest, const void *src, size_t n)memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。

    2. 如果不够,则调用fill_buffer把buffer填满
      1、read_packet_wrapper
      2、→ len = s->read_packet(s->opaque, buf, size);
      http://blog.csdn.net/xiruanliuwei/article/details/27376697,这一步完成了AVIOContext到URLContext的格式转化。每一次格式转换都会经历一次方法的muxer或demuxer。

    实际会调用ffurl_read函数
    3、retry_transfer_wrapper
    4、rtmp_read或http_read 或file_read

    1、http://blog.csdn.net/tomorrow_opal/article/details/54670153

    2、https://my.oschina.net/u/2326611/blog/800675

    相关文章

      网友评论

        本文标题:av_read_frame 主要执行函数

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