av_read_frame()

来源:互联网 发布:mac os 软件推荐 编辑:程序博客网 时间:2024/06/03 19:04

ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。

通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,以ts流为例,是读取一个完整的PES包(一个完整pes包包含若干视频或音频es包),读取完毕后,通过av_parser_parse2(***)分析出视频一帧(或音频若干帧),返回,下次进入循环的时候,如果上次的数据没有完全取完,则st = s->cur_st;不会是NULL,即再此进入av_parser_parse2(***)流程,而不是下面的av_read_packet**)流程,这样就保证了,如果读取一次包含了N帧视频数据(以视频为例),则调用av_read_frame***N次都不会去读数据,而是返回第一次读取的数据,直到全部解析完毕。

0 0
原创粉丝点击