音视频面试题集锦(第 14 期)

2024-01-11 16:28:46 浏览数 (2)

  • 1、Android MediaCodec 解码后的数据一般怎样处理?
  • 2、有哪些原因可能导致 Android 相机采集输出的帧率较低?
  • 3、一个回声消除系统的核心模块有哪些?
  • 4、为什么音频 3A 算法中,自适应噪声消除(ANC)和自动增益控制(AGC)一般要在一起用?

1、Android MediaCodec 解码后的数据一般怎样处理?

Android MediaCodec 解码一般有两种方式:MediaCodec ByteBuffer(MCBB)、MediaCodec Surface(MCS)。

使用 ByteBuffer 方式解码后的数据输出到缓冲区,我们接着可以拿这个数据直接做一些 CPU 上的处理,比如一些格式转换、图像处理、图像识别等等。如果要对数据进行渲染,则需要将这个数据转成纹理,再由 GPU 进行渲染。

使用 Surface 方式解码后则直接输出到纹理,我们可以获取这个纹理来直接做一些 GPU 上的处理,比如一些图像处理、渲染等等。但是如果你想获取解码后的 YUV 数据做一些 CPU 上的处理,则需要通过 ImageReader 等接口来从纹理中读取数据,这里面会有一些性能消耗。

此外,不管是 ByteBuffer 解码还是 Surface 解码,都可以用异步的方式来实现,在一些场景通过异步的方式可以防止流程被卡住。

一般来讲,如果在视频解码后只会做一些 GPU 上的处理或者直接渲染,那建议用 Surface 方式解码即可。如果视频解码后既要做 CPU 上的处理还需要做 GPU 上的处理,那建议用 ByteBuffer 方式解码,并基于 ByteBuffer 数据创建纹理用于 GPU 处理。

2、有哪些原因可能导致 Android 相机采集输出的帧率较低?

Android 相机采集最终输出的帧率受到相机本身的采集帧率、相机图像处理后的输出帧率影响。通常有下面几个因素需要注意:

  • 光照。当光照环境比较差,光线过暗时,相机本身采集帧率已经比较低了,最终输出帧率肯定也会很低。
  • 线程模型。如果相机采集后还要进行一些图像处理操作,如果采集和图像处理过程是串行的,当图像处理环节耗时较长也可能会导致最终输出的帧率较低,这时候可以将图像处理环节放在其他线程,并增加采集和图像处理环节之间的缓冲区,当图像处理较慢时可以跳过处理来保证输出帧率。
  • 采集流程中识别、特效等其他处理模块性能。如果图像处理性能成为瓶颈,还是要尽量优化处理模块的性能。

3、一个回声消除系统的核心模块有哪些?

一个常见的回声消除系统一般会包含这些核心模块,如图所示:

回声消除流程

  • 双讲检测模块。这里主要是计算麦克风采集的音频信号和对端传过来的音频信号的相关性。如果相关性较高超过一定阈值,则判断麦克风输入的主要是回声;如果相关性较低,则判断麦克风输入的有其他声音。在双讲判断有回声的情况下,接下来就会开始做回声消除了。
  • 延迟估计模块。该模块用于估计回声的延时,这个延时对后面进行回声处理很有用。延迟估计比较简单的做法是移动远端音频信号的起始位置,然后和回声信号计算相关性,并找到相关性最大的位置,即我们计算得到的延迟。
  • 自适应滤波器模块。回声一般分为线性回声和非线性回声,自适应滤波模块一般用来消除线性回声。自适应滤波的过程就是通过更新声音信号评估公式的系数来找到和麦克风音频信号(认为是回声)最为接近的一组系数,并将公式在该系数下计算的信号从麦克风音频信号中减去,从而消除线性回声。
  • 非线性回声处理模块。非线性回声处理模块则用来消除非线性回声。该模块利用前面估计的线性回声信号和经验知识生成估计的非线性回声信号,并在音频信号中减去估计的信号,从而消除非线性回声。这里的经验知识主要是指非线性回声生成原因,手机上主要是扬声器失真。
  • 降噪模块。通常一个回声消除系统在做完回声消除后还会做一下降噪,这里的降噪可以包含传统的降噪算法处理来去除一些背景噪声,以及用深度学习降噪算法去掉一些特定噪声。
  • 自动音量控制模块。降噪做完后,还可以做一下自动音量控制,将音频信号中声音过小或过大的部分尽量拉平。当然这个模块要放在降噪模块后面,要不然噪音可能会被放大。

总结来讲,一个简单的回声消除系统,通过输入的对端语音信号、麦克风采集的录音信号,经过双讲判断来计算是否有回声,当有回声时会估计回声的延时,并通过自适应滤波器模块消除线性回声,通过非线性回声估计模块消除非线性回声,从而实现回声消除的目的。在消除噪声后,还可以选择性的做一下降噪和自动音量控制来提升音频质量。

4、为什么音频 3A 算法中,自适应噪声消除(ANC)和自动增益控制(AGC)一般要在一起用?

主要是如果不做自适应噪声消除(ANC)就去做自动增益控制(AGC),很可能噪声也会被放大,从而导致最后的音频质量变差。

0 人点赞