1. av_read_frame
2. -> read_frame_internal
3. -> ff_read_packet
4. -> (s->iformat->read_packet) 欣硼,相當(dāng)于調(diào)用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)是對(duì)應(yīng)的demuxer介粘,比如對(duì)于mp4文件用的是mov_read_packet. demuxer會(huì)解析出下一幀需要多少byte, av_get_packet負(fù)責(zé)把需要的數(shù)據(jù)讀出來(lái),放到AVPacket中.
第7步喷鸽,avio_read中,在libavformat/aviobuf.c中
如果AVIOContext中的數(shù)據(jù)夠讼庇,AVPacket從AVIOContext中拷貝數(shù)據(jù)
1绎巨、read_packet_wrapper
2、 →read_packet 蠕啄,(void *opaque, uint8_t *buf, int buf_size)
3场勤、 →memcpy ,memcpy指的是c和c++使用的內(nèi)存拷貝函數(shù)歼跟,(void *dest, const void *src, size_t n)memcpy函數(shù)的功能是從源src所指的內(nèi)存地址的起始位置開(kāi)始拷貝n個(gè)字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中和媳。如果不夠,則調(diào)用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的格式轉(zhuǎn)化叹卷。每一次格式轉(zhuǎn)換都會(huì)經(jīng)歷一次方法的muxer或demuxer撼港。
實(shí)際會(huì)調(diào)用ffurl_read函數(shù)
3、retry_transfer_wrapper
4骤竹、rtmp_read或http_read 或file_read
1帝牡、http://blog.csdn.net/tomorrow_opal/article/details/54670153