java - Android 音频卡在底部扬声器上,无法在我的应用程序中使用耳机。应用程序也卡住

标签 java android audio webrtc speaker

我们正在使用 webrtc、kurento 媒体服务器和 nubomedia 库开发用于视频和音频 session 的 native 应用程序。我们正处于可以接收其他申请人的视频和音频的地步。

我们遇到的问题是,有时当我们建立连接时,音频开始非常响亮,并且仅来自手机的底部扬声器,我们无法将其调低或插入耳机,因为它没有效果。这通常在我重新启动手机后恢复,但当我再次进入应用程序时会随机出现。通常声音来自扬声器工作正常时。如果有帮助,我可以发布一些代码,但它只是很多,我不知道究竟可能是什么问题。即使我似乎无法重现它,它可能是一些 webrtc 错误还是我们的应用程序中的错误。有什么办法可以阻止底部扬声器。

此外,应用程序有时会在启动时卡住,没有错误消息或任何东西,我怀疑这可能是一些内存泄漏,有什么方法可以追踪吗?真的很抱歉这么长的帖子。谢谢!

最佳答案

WebRTC 将在默认输出设备(耳机/扬声器/耳机/蓝牙)中播放音频(远程音轨),您可以从您的应用程序中选择一个。
无论您对应用程序所做的更改都会影响该设备上运行的所有其他应用程序,反之亦然。

您需要扩展 Android AudioManager在通话过程中自动切换输出设备。
例如:用于视频通话/铃声的扬声器,用于音频通话/接近和耳机/蓝牙连接时的耳机。

使用BroadcastReceiver获取事件触发器。
见 AppRTC AudioManager & Bluetooth Manager以供引用。

注:确保在通话结束或应用退出之前需要重置输出设备。否则会影响其他应用。

关于java - Android 音频卡在底部扬声器上,无法在我的应用程序中使用耳机。应用程序也卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44671710/

相关文章:

java - 使用循环将 int 转换为 string,然后再转换回 int

javascript - 在页面上连续播放随机声音

android - 在 Android 中录制音频时的 VU(音频)表

java - 使用 Kundera 在 hbase 中使用通用对象类型

java - 用两个地理位置坐标点创建一个框

android - "tag"的结果中的 "adb shell dumpsys alarm"是什么?

android - 怯场架构

c# - 可以在 C# 应用程序中执行实时多 channel 音频卷积吗?

java - (Java) If 和 else if 语句无法识别字符串

java - 如何输出我存储的这些信息?