摘要:
指导5:同步视频如何同步视频前面整个的一段时间,我们有了一个几乎无用的视频播放器。当然,它能播放视频,也能播放音频,但是它还不能被称为一部电影。那么我们还要做什么呢?PTS 和 DTS 幸运的是,音频和视频流都有一些关于以多快速度和什么时间来播放它们的信息。音频流有采样,视频流有每秒的帧率。然而,如果我们只是简单的通过计算帧和乘以帧率的方式来同步视频,那么就很有可能会失去同步。于是作为一种补充,在流中的包有种叫做 DTS(解码时间戳)和 PTS(显示时间戳)的机制。想理解这两个参数,你需要了解视频存放的方式。像 MPEG 等格式,使用叫做 B帧(B 表示双向 bidrectional)的方式. 阅读全文
摘要:
简述 上一章通过SDL的音频功能添加了音频支持,SDL启动一个线程监听音频回调函数,视频显示也将如此。这使得代码更加模块化,更容易协调,尤其是当我们想要添加同步时。现在从哪开始呢? 首先注意到我们的主函数处理很多:事件循环、读取数据包、解码视频。所以我们要做的是分开它们:一个负责解码数据包的线程;然后将数据包添加到队列中,并由相应的音频和视频的线程读取。我们已经这样设置了音频线程;视频线程将会复杂一点,因为我们要自己显示视频。我们将在主循环中添加显示代码。我们将把视频显示和事件循环放在一起,而不是每次循环显示视频。思路是这样的,解码视频,把产生的帧存到另一个队列里,然后创建一个自定义事件 .. 阅读全文