15|音画同步:如何让声音和画面手拉手前进?
李江
你好,我是李江。
在上节课中,我们讲述了音视频封装以及音视频数据是如何装到 FLV 和 MP4 文件里面的。这节课我们来讲讲播放这些文件的时候需要用到的一个非常重要的技术——音视频同步,也叫音画同步。
音视频同步是什么呢?它就是指在音视频数据播放的时候,播放的画面和声音是需要同步的,是能对得上的。相信你一定遇到过这种情况,就是看电视、电影或者直播的时候,人的口型和声音是对不上的,这样看起来会让人非常难受,这种问题就是音视频不同步导致的。因此做好音视频同步是非常重要的,当然也会有一定的难度,我们不妨先从一些基础知识讲起。
PTS 和 DTS
首先就是 PTS 和 DTS 这两个概念。其实,我们在讲音视频封装的时候已经提到过了。
PTS 表示的是视频帧的显示时间,DTS 表示的是视频帧的解码时间。对于同一帧来说,DTS 和 PTS 可能是不一样的。
为什么呢?主要的原因是 B 帧,因为 B 帧可以双向参考,可以参考后面的 P 帧,那么就需要将后面用作参考的 P 帧先编码或解码,然后才能进行 B 帧的编码和解码。所以就会导致一个现象,后面显示的帧需要先编码或解码,这样就有解码时间和显示时间不同的问题了。如果说没有 B 帧的话,只有 I 帧和 P 帧就不会有 PTS 和 DTS 不同的问题了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
音视频同步是保证音频和视频在播放时能够同步进行的重要技术。本文介绍了音视频同步的基本概念和相关技术,包括PTS和DTS的概念,时间基的重要性,以及音视频同步的三种类型。其中,视频同步到音频是最常用的方式,通过调整视频帧的播放速度来实现同步。文章通过介绍FFplay的代码实现了视频同步到音频的原理,使用时间戳PTS来确保画面和声音的同步。通过计算视频时钟和音频时钟之间的差值来调整当前播放视频帧的播放时间,以尽量减小音视频的不同步程度。总的来说,本文通过介绍音视频同步的原理和实现细节,让读者了解了音视频同步的重要性和实现方式,为理解和应用音视频同步技术提供了有益的参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《攻克视频技术》,新⼈⾸单¥59
《攻克视频技术》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- springXu收获最大的是那加餐篇。哈!那篇内容讲述了用现代浏览器提功的能力来实现音视频的方案。 十多年前浏览器播放音视频的方案主流是flash又或者是定义标签+插件的形式。 老师能不能来一篇课程全貌图。比如您开这课的思路,为什么需要这些内容呈现出来。 您在学习音视频中走过的路和遇上的坑? 对于要做音视频工作的人,需要哪些必备的知识以及建议是什么?
作者回复: 好的,我有空了整理一下,给一张全貌图
2021-12-2748 - 晓龙之前一直尝试学习音视频技术,但每次都是学了半吊子,学了忘,忘了就算,而且也不深入,老师的这堂课是我第一次比较系统的学习音视频技术,隔壁的《搞定音频技术》也在学习,非常感谢老师的付出,也非常珍惜这次学习机会。 下面我列出几点,我还想知道的: 1. 老师是否能以加餐的形式,介绍一下音频领域发展的状况,常用的库,技术,文章/书籍参考,能给个大框架什么的,因为音视频这块涉及的领域还是非常多的,不同领域需要的技能树是什么? 2. 能否讲一些h265的编解码知识。 3. 非常希望老师能在开设一门实战性的课程。 以上,再次感谢老师的付出
作者回复: 好的,之后有空的时候也写写。h265的编解码知识其实是在h264上在增加了很多编码工具。后面可以考虑写写。我也是第一次做专栏,刚开始做,谢谢你们的支持。
2021-12-2722 - Chris Zou请问一下老师,对于云端录制来说,也需要考虑音视频录制时音画同步的技术难点,这个的同步原理和播放的同步原理是否有共同点? 如果不同的话,需要利用原理来保证音画同步,希望老师能具体讲一讲?
作者回复: 录制不需要考虑同步吧,录制可能就是考虑音视频存储的时间戳顺序吧,ffmpeg的av_interleaved_write_frame接口里面会缓冲一部分音视频数据,自动做好排序
2022-01-25 - tony为什么会出现多个时间戳单位?大家不能统一吗
作者回复: 因为不同场景的精度要求不一样吧。就像普通的时间单位也有us、ms、s一样的。
2021-12-30 - paradise视音频同步原理就是通过比较视频和音频的播放时间来去动态调整视频当前显示帧的播放时间,以达到齐头并进的目的。
作者回复: 是的
2021-12-29 - springXu我想表达的是这位极客时间老师的想法: 我觉得很多人缺少的不是更高深的知识。而是缺少一个成长路线的鸟瞰图。不知道自己在什么位置,也不知道终点在哪里。埋着头学下去,学了很多东西但却不知道用在哪里。 能有学习路线导航图。2021-12-2712
- Wales感谢老师开设这门课程,深受启发👍 对音视频不同步的原因不太理解: 播放音频,是以系统时钟为基准,根据音频数据的时间戳来进行播放,视频播放亦然。 既然二者参照的是同一个系统时钟,用的是同样的时间戳,那么理论上应该不会出现音视频不同步的问题吧? 然而实际应用中还是出现了音视频不同步的问题,是不是因为: ①解码端的运算性能有限,解码视频和音频的速度会出现波动,导致了音、视频各自的实际播放时间有差别。 ②实时通信模式下,音频和视频数据到达接收端的时间不同,导致了后续解码和播放的时间不同。 如果理解不到位,请老师指导*^_^*2022-07-05
- idiot增加 last_duration 的值后,具体是如何解码的呢?是有接口控制每一帧的播放时间吗,增加某些帧的播放时间,还是平均增加各个帧的播放时间?2022-07-03
收起评论