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中
-
如果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所指的内存地址的起始位置中。 -
如果不够,则调用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
网友评论