【问题标题】:Android Call Recording Downlink mutedAndroid 通话录音下行链路静音
【发布时间】:2023-10-28 21:07:01
【问题描述】:

我正在尝试使用 Android 录制上行链路和下行链路语音。不管法律什么的,我已经知道了,所以请不要把与法律有关的cmets。

下面的代码可以正常工作,除了当我将麦克风静音时,它不会记录下行语音。

我使用的是 Android 8.1。我试过在同一台设备上使用名为 ACR 的第三方应用程序,它工作正常,当我静音时,它仍然记录下行链路的声音。

 val audioManager = applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager

 val maximumVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL)

 audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, maximumVolume, 0)

 val audioSource = MediaRecorder.AudioSource.MIC

 val mediaRecorder = MediaRecorder()

 mediaRecorder.apply {
            setAudioSource(audioSource)
            setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
            setAudioChannels(audioChannels)
            setAudioSamplingRate(audioSamplingRate)
            setAudioEncodingBitRate(audioEncodingBitRate)
            setOutputFile(path)
            prepare()
            start()

【问题讨论】:

    标签: android media voice acs recorder


    【解决方案1】:

    这不是问题。您将 MediaRecorder 设置为使用 MIC 作为输入,因此如果您将麦克风静音,则很明显输入信号丢失/静音。当您使用“下行链路”一词时,我希望看到不同的输入源为 VOICECALL 或 DOWNLINK 而不是 MIC。尝试使用 MIC 录制语音通话在我看来是错误的,因为:(1)您必须为扬声器设置最大音量并通过它重定向语音通话(2)在录制来自 MIC 的语音通话时,呼叫者会听到周围发生的一切您的设备以及您对其他人所说的所有内容 (3) 这种方法会记录很多噪音和回声。正确的方法是从 VOICECALL 录制,但大多数新设备(使用较新的 Android 版本)阻止从该来源录制,并且只允许在系统应用程序中录制。 ACR 通过调用隐藏的 API 方法使用了一种变通方法,但由于 Android 更新,此方法可能随时停止工作。

    【讨论】:

    • 那么,我要找的是隐藏的 API 方法,也许使用反射?
    • 准确地说,这是一个百万美元的问题:我们应该调用哪个隐藏的方法/API?如果只有 2 或 3 个应用程序在 Android 7.x+ 上很好地记录下行链路/语音通话,这应该是一个原因......而解决方案并不那么容易实现的原因。
    最近更新 更多