基于FFmpeg开发视频播放器,音视频同步(四)

本文探讨了视频播放过程中音视频同步的重要性,分析了三种同步策略,并详细解释了I、P、B帧的概念,以及PTS、DTS在音视频同步中的作用。通过代码示例展示了如何根据音频时钟调整视频播放速度,保持音视频时间差在合理范围内,以实现流畅的播放体验。
摘要由CSDN通过智能技术生成

为什么需要音视频同步?

从前面的代码可以看到,播放的过程有解码线程不断的把解码好的AVFrame数据放入队列,然后播放线程从队列中取出解码后的数据,经过格式转换,分别送给ANativeWindow去绘制,送给OpenSlES去播放声音,这个过程如果不去控制,播放的速度就取决与解码线程,播放线程的处理速度,及系统的性能.这样播放的效果,肯定是不流畅的.

为了让播放尽可能流畅,就要把视频播放的帧率考虑进来,比如希望fps是30,那么就在绘制时的间隔控制在1/30.

加入绘制间隔的控制,虽然视频播放比流畅了,但是画面跟音频没有保持一致.音频与视频各播各的,由于机器运行速度,解码效率等种种造成时间差异的因素影响,即使最初音视频是基本同步的,也会随着时间的流逝逐渐失去同步。所以,必须要采用一定的同步策略,不断对音视频的时间差作校正,使图像显示与声音播放总体保持一致。所以需要做音视频的同步.

音视频的同步,有三种方式:

1、参考一个外部时钟,将音频与视频同步至此时间;

2、以视频为基准,音频去同步视频的时间;

3、以音频为基准,视频去同步音频的时间。

由于人对声音的变化相对于视觉更加敏感。所以频繁的去调整声音的播放会感觉刺耳或杂音影响用户体验。所以一般情况下,播放器使用第三种同步方式。

在音视频同步的处理中,有一个音视频时钟的概念,通过AVFrame->pts来获取,所以先说下PTS想关几个概念:

视频中的I P B帧:

I 帧:帧内编码帧 ,一个图像经过压缩后的产物,包含一幅完整的图像信息;

P 帧: 前向预测编码帧,利用之前的I帧或P帧进行预测编码

B 帧: 双向预测内插编码帧 ,利用之前和之后的I帧或P帧进行双向预测编码。

IDR帧:一个序列的第一个图像叫做IDR帧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值