博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直播疑难杂症排查(8)— 播放杂音、噪音、回声问题
阅读量:6419 次
发布时间:2019-06-23

本文共 1095 字,大约阅读时间需要 3 分钟。

1.  问题现象

常见的音频问题现象描述如下:

- 电流音,爆音,滋滋声或者嘟嘟声

- 声音断断续续,听不清楚

- 回声,能听到自己说话的声音

2. 问题排查

2.1 参数配置问题

上面也有提到,音频是一个特别敏感的东西,涉及到许多参数配置,一旦配置不太匹配,就会导致声音听起来非常诡异(比如:采样率是 32000Hz 的音频,给播放器配置为 8000Hz 或者 44100Hz,就明显会出现音频慢放或者快放的效果)。

常见的音频参数和基本原理,可以参考我的这篇文章,这里就不再赘述了:

我们只需要注意的是,无论是采集和播放,都要给系统的 API 以及第三方的库配置正确的参数,如:采样率、位宽、声道数等等。

2.2 代码层面的原因

常见的代码层面的问题有如下几种:

- 音频 buffer 大小不匹配,一段 1024 bytes 的音频,放到了 2048 bytes 的数组,导致尾部有随机数

- 音频 resample 重采样的算法问题,导致采样出来的数据出了问题

- Android 的 ByteBuffer 取出数组,是不能直接用 .array() 方法的,而需要用 .get() 方法

- iOS 系统,其他 app 通过系统 API 更改了 AudioSession 采样率的配置

2.3 网络波动

视频是一帧一帧连续的图像构成的,在播放过程中,如果无法按时渲染,则会出现卡顿的效果;如果丢失几帧画面,则会出现快进效果。

而音频是流式的,虽然也被切分为了一个个音频帧,但如果无法按时播放或者连续丢失较多的音频帧,则会明显听到断断续续的声音出现。特别是在弱网、丢包率高等不稳定网络环境下,很容易出现这种情况。

2.4 回声消除

回声一般出现在同时有音频的采集和播放的场景,比如:连麦互动、混音返听等等,采集到的音频通过扬声器又播放出来了,同时又被采集了进去,从而产生了回声或者啸叫声。

这样的场景下,一般需要通过系统的回声消除 API,或者第三方回声消除库(如:speexdsp,webrtc 等)进行处理。

注意:很多 Android 机型硬件自带的回声消除效果并不是很好。

2.5 混音越界

音频的 PCM 数据,通常用 short 数组来存放,当我们做一些多路音频的混音功能的时候,如果不注意处理 short 类型的大小越界,则往往带来爆音的问题。下面是一段参考 webrtc 的混音代码,专门针对混音越界做了简单处理。

本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1933255,如需转载请自行联系原作者

你可能感兴趣的文章
Redis开发运维实践高可用和集群架构与实践(二)
查看>>
程序员的常见“谎话”:对,这是一个已知 Bug
查看>>
如何侦查SQL执行状态
查看>>
CentOS 7 命令行如何连接无线网络
查看>>
Ubuntu 12.04上享用新版本Linux的功能
查看>>
logstash + grok 正则语法
查看>>
Zimbra开源版(v8.6)安装说明
查看>>
Android性能优化之TraceView和Lint使用详解
查看>>
LBS核心技术解析
查看>>
Fible Channel over Convergence Enhanced Ethernet talk about
查看>>
讨论:今日头条适配方案使用中出现的问题
查看>>
CSS3 3D翻转动画
查看>>
要命啦!Word中快速录入大全,内含快捷键小技巧,快来一起学习!
查看>>
javascript实现音频mp3播放
查看>>
html5-离线缓存
查看>>
linux系统安装完后的常见工作
查看>>
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>