Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Android NDK应用程序上使用蓝牙扬声器的性能问题_C++_Android Ndk_Android Bluetooth - Fatal编程技术网

C++ Android NDK应用程序上使用蓝牙扬声器的性能问题

C++ Android NDK应用程序上使用蓝牙扬声器的性能问题,c++,android-ndk,android-bluetooth,C++,Android Ndk,Android Bluetooth,在我的Android应用程序中,我使用Android NDK通过执行以下操作来播放音乐: 使用从OGG文件提取音频样本 处理音频样本 使用将处理过的样本重定向到音频输出 为了避免运行不足,我在一个单独的线程中执行前两个步骤,提前一点提取和处理声音(这会增加一点延迟,但这对我的应用程序来说不是问题)。到目前为止,该解决方案在我测试过的所有设备上都非常有效 但由于某些原因,当我将设备与蓝牙扬声器配对并播放音乐时,我在一些设备上,如三星S7或诺基亚1(但不是在所有设备上)似乎都有不足之处 这个bu

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

  • 使用从OGG文件提取音频样本
  • 处理音频样本
  • 使用将处理过的样本重定向到音频输出
为了避免运行不足,我在一个单独的线程中执行前两个步骤,提前一点提取和处理声音(这会增加一点延迟,但这对我的应用程序来说不是问题)。到目前为止,该解决方案在我测试过的所有设备上都非常有效

但由于某些原因,当我将设备与蓝牙扬声器配对并播放音乐时,我在一些设备上,如三星S7或诺基亚1(但不是在所有设备上)似乎都有不足之处

这个bug看起来很随机,我不知道从哪里开始。蓝牙连接占用了相当多的CPU,因此我的应用程序没有足够的资源正常运行

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


感谢您的帮助。

Android+蓝牙音频是一个痛苦的世界。关于蓝牙,最值得欣赏的是音频接收器以独立于其他音频设备的速率运行,这就是为什么本机mediaplayer会根据所连接的音频设备消耗样本的速率来显示视频,这本质上是为了满足BT音频设备的时钟。如果你想从Android(即SystemClock timebase)上提高速度,你需要使用时间伸缩音轨。(这是可以做到的,但驾驶员支持不稳定,且系统整体稳定性较差)

首先,您希望消除设备本身存在的问题。您能否从S7或诺基亚1将媒体播放器中的ogg文件播放到蓝牙扬声器,而不会出现问题?如果是这样,那就是你的代码

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


最后,蓝牙音频,至少是A2DP,与直接流式MP3不同,在音频发送时需要一些处理来重新压缩音频,但是这些设备应该有足够的空间,甚至可能是特殊的DSP。我以前在同一时间播放过1080P视频,但一次播放两个视频就开始崩溃

谢谢你的回答。我试着用普通播放器在诺基亚1上使用BT扬声器播放ogg文件,效果很好。所以,我想我的代码中有一些事情要做,但是什么呢?因为没有BT设备,我的播放器工作得非常好(没有欠载),而且令人惊讶的是,它与华硕Zenfone 2上的BT设备也工作得非常好……而且,当设备连接到BT扬声器时,当应用程序同时提取和处理2首歌曲时,情况不会变得更糟。这对我来说毫无意义。。。