在我的Android应用程序中,我通过以下操作使用Android播放音乐:
为了避免运行不足,我在一个单独的线程中执行前两个步骤,提前提取和处理声音(这会增加一些延迟,但这对我的应用程序来说不是问题)。到目前为止,这个解决方案在我测试过的每一个设备上都非常有效。
但出于某种原因,当我将我的设备与蓝牙扬声器配对时,当我播放音乐时,在三星S7或诺基亚1等设备(但不是在每台设备上)上,似乎都有不足的地方。
在我看来,这个bug是如此的随意,以至于我不知道从哪里开始。它的作用就像蓝牙连接使用了相当多的CPU,所以我的应用程序没有足够的资源来正常运行。
有没有人经历过类似的事情?我应该在代码中做些什么来处理蓝牙连接,这样它才不会使用CPU (例如,避免音频重采样)?
谢谢你的帮助。
发布于 2018-12-20 22:00:29
Android +蓝牙音频是一个痛苦的世界。蓝牙的主要优点是音频接收器以独立于其他音频设备的速度运行,这就是为什么本机mediaplayer将按照附加的音频设备消耗样本的速率来做像显示视频这样的事情,本质上是对BT音频设备的时钟的投入。如果您想要从Android (即SystemClock时基)驱动速度,您将需要使用一个延长时间的AudioTrack。(这是可以做到的,但驱动程序支持是不稳定的和整体系统稳定坦克)。
首先,你想要消除设备本身的问题。你能将媒体播放器中的ogg文件播放到S7或Nokia1的蓝牙扬声器上吗?如果是的话,那是你的代码!
在我看来,无论出于什么原因,扬声器的消耗速度都快于设备产生的样品。基本上,检查您的回调,以确保每当音频子系统请求更多的数据,您实际上是提供它。一定要根据正在进行的回调,而不是系统时钟或任何其他关于时间的假设来驱动您的解码流水线。
最后,蓝牙音频(至少是A2DP,而不是直接流MP3 )将需要一些处理来重新压缩发出的音频,但是这些设备应该有足够的空间来实现这一点,甚至可能是特殊的DSP。我以前在同一时间用1080 p的视频回放做过,它开始和两个视频同时崩溃!
https://stackoverflow.com/questions/53871191
复制相似问题