ffmpeg解决帧丢失问题:还有几帧数据缓存在解码器中,需要取出来

在学习ffmpeg视频解析时遇到帧丢失问题,原因是解码器内部缓存了部分帧。解决方法包括:1. 通过发送空包到avcodec_send_packet;2. 调用avcodec_receive_frame接收剩余帧,直至返回AVERROR_EOF。此方法能确保获取解码器中所有缓存的帧。
摘要由CSDN通过智能技术生成

文章目录

  • 前言
  • 一、丢帧原因
  • 二、解决办法
    • 1.送入空包进avcodec_send_packet
    • 2.调用avcodec_receive_frame

 


前言

       

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

一、帧丢失原因

解码器内部有缓存队列,开始时会先存几帧数据,再开始输出有效Frame,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值