av_read_frame函数的作用是返回文件中保存的数据。它会文件中保存的数据分成不同的帧,
每次调用都会返回一帧。注意,该函数不会忽略帧与帧之间无效数据(非帧数据),目的是给解码器
最多的信息用于解码。
函数声明
1
| |
如果pkt->buf是 NULL,包直到下一次调用av_read_frame或avformat_close_input时都是有效的。
不需要时,包必须通过av_free_packet释放。对于视频,packet只包含一帧;对于音频,如果每帧有固定大小(如 PCM 或 ADPCM 数据),
packet可以包含多个音频帧(必须是整数帧),如果音频帧大小可变(如MPEG 音频),它只能包含一帧数据。
pkt->ptspkt->dtspkt->duration都是以AVStream.time_base_units为单位的。
如果视频格式里包含 B 帧,pkt->pts可以是AV_NOPTS_VALUE,因此如果不解压缩数据,最好
查看pkt->dts。
如果函数返回0,正确;小于0,则为到文件尾或出错。
函数调用关系

源码分析
av_read_frame函数会判断在未解码缓存中是否有数据,如果有数据则调用read_from_packet_buffer。