ffmpeg源码简析(八)解析 av_read_frame(), avcodec_decode_video2(), avformat_close_input.
发布时间
阅读量:
阅读量
1.av_read_frame()
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次都不会去读数据,而是返回第一次读取的数据,直到全部解析完毕。
av_read_frame()函数的定义出现在libavformat\avformat.h文件中,具体声明如下所示。
全部评论 (0)
还没有任何评论哟~
