首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android应用程序上使用蓝牙扬声器的性能问题

在Android应用程序上使用蓝牙扬声器的性能问题
EN

Stack Overflow用户
提问于 2018-12-20 15:04:17
回答 1查看 204关注 0票数 0

在我的Android应用程序中,我通过以下操作使用Android播放音乐:

  • 使用Vorbis库从OGG文件中提取音频示例
  • 处理音频样本
  • 使用双簧管库将处理过的样本重定向到音频输出

为了避免运行不足,我在一个单独的线程中执行前两个步骤,提前提取和处理声音(这会增加一些延迟,但这对我的应用程序来说不是问题)。到目前为止,这个解决方案在我测试过的每一个设备上都非常有效。

但出于某种原因,当我将我的设备与蓝牙扬声器配对时,当我播放音乐时,在三星S7或诺基亚1等设备(但不是在每台设备上)上,似乎都有不足的地方。

在我看来,这个bug是如此的随意,以至于我不知道从哪里开始。它的作用就像蓝牙连接使用了相当多的CPU,所以我的应用程序没有足够的资源来正常运行。

有没有人经历过类似的事情?我应该在代码中做些什么来处理蓝牙连接,这样它才不会使用CPU (例如,避免音频重采样)?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-12-20 22:00:29

Android +蓝牙音频是一个痛苦的世界。蓝牙的主要优点是音频接收器以独立于其他音频设备的速度运行,这就是为什么本机mediaplayer将按照附加的音频设备消耗样本的速率来做像显示视频这样的事情,本质上是对BT音频设备的时钟的投入。如果您想要从Android (即SystemClock时基)驱动速度,您将需要使用一个延长时间的AudioTrack。(这是可以做到的,但驱动程序支持是不稳定的和整体系统稳定坦克)。

首先,你想要消除设备本身的问题。你能将媒体播放器中的ogg文件播放到S7或Nokia1的蓝牙扬声器上吗?如果是的话,那是你的代码!

在我看来,无论出于什么原因,扬声器的消耗速度都快于设备产生的样品。基本上,检查您的回调,以确保每当音频子系统请求更多的数据,您实际上是提供它。一定要根据正在进行的回调,而不是系统时钟或任何其他关于时间的假设来驱动您的解码流水线。

最后,蓝牙音频(至少是A2DP,而不是直接流MP3 )将需要一些处理来重新压缩发出的音频,但是这些设备应该有足够的空间来实现这一点,甚至可能是特殊的DSP。我以前在同一时间用1080 p的视频回放做过,它开始和两个视频同时崩溃!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53871191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档