我
前言
最近在学习如何使用ffmpeg解析视频,在网上查找的办法大同小异,直接说解码函数avcodec_send_packet和avcodec_receive_frame,这两个是一起的,必须同时出现,我是通过子线程读取视频文件,不停地将读取出来的包放入videoQueue或audioQueue中,再利用SDL创建videoThread来不断从video队列里拿出packet送入解码器中,即利用avcodec_send_packet将包送入解码器中,利用avcodec_receive_frame将ffmpeg解析出来的Frame取出来,但通过进度条或直接打印解码出来的Frame->pts来看当前帧的时间,总会在最后少那么几帧,很郁闷
一、帧丢失原因
解码器内部有缓存队列,开始时会先存几帧数据,再开始输出有效Frame,