ffmpeg播放帧率控制

概述

30帧/秒的视频,如果解码性能足够块(比如RK3399解码可达到61帧/秒),那么ffplay播放时,是如何控制帧率为30帧/秒呢?本文就是为了解开该谜团。

封装

音视频在通过封装器封装时,都必须告诉封装器自己的帧率(采样率/bit rate),然后封装器根据帧率计算每帧的时间戳间隔。比如如下视频帧30帧/秒:

  • frame0 pts:00ms
  • frame1 pts:33ms
  • farme2 pts:66ms
  • frame3 pts:99ms

解封装

解封装并未对时间戳做额外处理。

解码

以RockChip设计的MPP硬解码器为例,解码器并未对帧的pts做修改,解码后也只是将原始pts赋值给新解码出来的Frame。

显示

在ffplay中,会有时间同步机制,可参考博文:ffplay 音视频同步的源码分析。该同步机制则实际完成了帧率的播放控制。就算解码再快,显示也得根据pts与当前时间做对比,只有到点了(pts映射实际时间点 <= 当前时间点)才能真正去播放。

因此在概述中讨论的场景,就算解码器解码很快,但受制于显示端。显示端拥堵后,帧缓冲队列满了,则会抑制解码速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值