在 Nougat 中录制蓝牙耳机音频

Posted

技术标签:

【中文标题】在 Nougat 中录制蓝牙耳机音频【英文标题】:Recording bluetooth headset audio in Nougat 【发布时间】:2017-12-19 16:58:49 【问题描述】:

所以,我正在尝试从蓝牙耳机录制波形文件。

这是我用来记录的

 recorder = AudioRecord(MediaRecorder.Audiosource.VOICE_COMMUNICATION,
                8000,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                BUFFER_SIZE)

在开始录制之前,我开始使用耳机进行音频通信

var am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
am!!.mode = 0
am!!.isBluetoothScoOn = true
am!!.startBluetoothSco()
am!!.mode = AudioManager.MODE_IN_COMMUNICATION

嗯,在 android 6 (marshmallow) 中录制时效果很好,但在 Android 7 (nougat) 中录制时,它会继续从我手机的麦克风而不是蓝牙耳机录制。查看文档,我没有发现任何有关版本之间蓝牙 SCO 变化的信息。所以....我错过了什么?

【问题讨论】:

【参考方案1】:

我们在尝试录制蓝牙语音通话时遇到了类似的问题。问题是应用程序在收到拨出电话的电话广播后立即开始录制,但蓝牙接口仅在通话开始后几毫秒连接。 我们最终通过在开始录制之前应用简单的睡眠解决了这个问题,从而解决了这个问题。

【讨论】:

我们遇到的问题是,在我们的应用程序开始时,我们从电话麦克风录制。我们使用接收器 registerReceiver(mBluetoothScoReceiver, IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) 解决了这个问题,并在音频状态为 AudioManager.SCO_AUDIO_STATE_CONNECTED 时开始录制。然而,它并没有解决这个问题,因为我们只能在牛轧糖中获得套接字连接,而不能获得音频连接。

以上是关于在 Nougat 中录制蓝牙耳机音频的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPad/iPhone 上通过蓝牙耳机录制音频?

在 Linux 上使用 bluealsa 从蓝牙耳机录制音频

从无线耳机录制音频并通过蓝牙扬声器播放

在 iOS 中使用耳机插孔引脚同时播放和录制音频?

在 ffmpeg 中使用蓝牙耳机设备作为音频源

iOS 无法在扬声器上播放并将音频会话设置为录制