FFmpeg音视频同步原理与实现

本文探讨了FFmpeg中音视频同步的原理,主要采用了以音频为基准,调整视频速度来实现同步。介绍了DTS和PTS的概念,并提供了简单的同步代码示例,包括音频和视频部分的时间计算。虽然初步实现了同步效果,但仍有改进空间。
摘要由CSDN通过智能技术生成

一、原理

如果简单的按照音频的采样率与视频的帧率去播放,由于机器运行速度,解码效率等种种造成时间差异的因素影响,很难同步,音视频时间差将会呈现线性增长。所以要做音视频的同步,有三种方式:

  • 参考一个外部时钟,将音频与视频同步至此时间。我首先想到这种方式,但是并不好,由于某些生物学的原理,人对声音的变化比较敏感,但是对视觉变化不太敏感。所以频繁的去调整声音的播放会有些刺耳或者杂音吧影响用户体验。(ps:顺便科普生物学知识,自我感觉好高大上_)。

  • 以视频为基准,音频去同步视频的时间。不采用,理由同上。

  • 以音频为基准,视频去同步音频的时间。 所以这个办法了。

所以,原理就是以音频时间为基准,判断视频快了还是慢了,从而调整视频速度。其实是一个动态的追赶与等待的过程。

二、一些概念

音视频中都有DTS与PTS。

  • DTS ,Decoding Time Stamp,解码时间戳,告诉解码器packet的解码顺序。
  • PTS ,Presentation Time Stamp,显示时间戳,指示从packet中解码出来的数据的显示顺序。

音频中二者是相同的,但是视频由于B帧(双向预测)的存在,会造成解码顺序与显示顺序并不相同,也就是视频中DTS与PTS不一定相同。

  • 时间基
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值