深入理解Android音视频同步机制(一)概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nonmarking/article/details/78745646

音视频同步,即avsync,是影响多媒体应用体验质量的一个重要因素。
本系列文章将从四个角度来深入研究Android平台上的音视频同步机制,以求为遇到音视频不同步问题的朋友提供一个思路:

(1)ExoPlayer avsync逻辑梳理

ExoPlayer是Google开源的一套Android多媒体播放框架,可以很好的支持HLS,DASH等流媒体协议,已经得到Youtube, HBO等视频app的应用。通过梳理ExoPlayer的avsync逻辑,有助于我们从应用的角度理解Android平台的音视频同步机制。

(2)NuPlayer avsync逻辑梳理

NuPlayer是Android framework层的播放器,一般来说,我们在应用层使用MediaPlayer时,都会调用到framework中的NuPlayer去。当然,如果硬件厂商有自己定制的播放器,则要另说了。通过梳理NuPlayer的avsync逻辑,有助于我们从framework层的角度理解Android平台的音视频同步机制。

(3)如何利用MediaSync进行音视频同步

MediaSync是Android M新加入的API,专用于音视频同步,配合MediaCodec和AudioTrack使用,这里将介绍如何使用它以及它背后的原理。由此,我们可以一窥Google在Android多媒体播放框架上的规划。

(4)如何从零开始写一个音视频同步的播放器

我们知道,最简单朴素的音视频同步逻辑是直接对齐两者的pts,而各种播放器所采用的音视频同步机制其实都比这复杂得多,那么这些复杂的逻辑中哪些是必要的,哪些逻辑的影响更大,通过从零开始写一个最简单的播放器,并且一步步优化它的音视频同步结果,有助于我们理解以上的问题。

在本概述中,将先介绍一些音视频同步相关的背景知识。

  1. 如何测试音视频同步情况
    当然你可以直接播放一段相声,然后目测声音和嘴型是否对的上。但是这里还是要推荐一个更科学的设备:Sync-One
    Sync-One是从纯物理的角度来测试音视频同步情况的,通过播放特定的测试片源,并检测声音和屏幕亮度的变化,评判声音是落后于视频,还是领先于视频,如果达到了完美的音视频同步结果,会在电子屏上显示数字0,当然这很难==,一般我们会设定一个标准区间,只要结果能落在这个区间内,即可认为视音频基本是同步的。

  2. 如何制定音视频同步的标准
    音视频同步的标准其实是一个非常主观的东西,仁者见仁智者见智。我们既可以通过主观评价实验来统计出一个合理的区间范围,也可以直接参考杜比等权威机构给出的区间范围。同时,不同的输出设备可能也需要给不同的区间范围。比如,我们制定的speaker输出时的音视频同步区间是[-60, +30]ms, 蓝牙音箱输出时的音视频同步区间是[-160, +60]ms, 功放设备输出时的音视频同步区间是[-140, +40]ms。负值代表音频落后于视频,正值代表音频领先于视频。

  3. 在梳理音视频同步逻辑我们应该关注什么
    毫无疑问,音视频同步逻辑的梳理要分别从视频和音频两个角度来看。
    视频方面,我们关注的是同步逻辑对视频码流的pts做了哪些调整。
    音频方面,我们关注的是同步逻辑中是如何获取“Audio当前播放的时间”的。

各位看官,如果您觉得本人的博客对您有所帮助,可以扫描如下二维码进行打赏,打赏多少您随意~
这里写图片描述

猜你喜欢

转载自blog.csdn.net/nonmarking/article/details/78745646