某些应用如何克服电话录音限制?

时间:2018-06-21 14:24:24

标签: android audio call-recording

背景

Android上确实不支持电话录音,但是某些设备在某种程度上支持电话录音。

这使各种呼叫记录应用程序收集了尽可能多的有关设备以及应该对它们进行哪些操作的信息,并决定了该怎么做。

有些人甚至提供了根本解决方案。

boldbeast Call Recorder app是一个这样的示例,它提供了许多可以更改的配置:

enter image description here

  • “记录模式”。对于非root用户的设备,显示14种模式,对于root用户,最多显示34种模式。对于有根设备,还显示“ Alsa模式”作为选项。

  • 具有“调整音频效果(“自动调整一组参数”)。

  • 具有“调谐音频路由”,可能的值为“ Disabled”,“ Group1”,“ Group2”,“ Group3”

  • 对于有根设备:

    • “更改音频控件”(“自动更改音频控件”)

    • “更改音频驱动器”(更改音频驱动器设置以启用记录模式21,22,23,24,31,32,33,34“)

    • 对于有根设备:“开始输入流”

问题

如果我需要创建一个通话记录应用程序,除了找到适用于各种设备的各种解决方法外,别无其他方法,但是似乎其他应用程序使用的术语并未出现在API中。

例如,我找不到我提到的任何应用。

我发现的东西

除了大量关于如何在Android上记录通话的问题(表明并非在所有设备上都可以使用)外,我还能找到一些有趣的东西。到目前为止,这是我的尝试和见解:

  • 在准备录音时,可以使用一些音频录音源(文档here),但遗憾的是,在每个设备中,录音源可能有所不同。对于某些人来说,VOICE_CALL可以工作,而对于另一些人来说,则可以。但是至少我们可以尝试...

  • 在具有Android 6.0.1的OnePlus 2上,可以使用VOICE_CALL录制来电,但除非在将MIC用作音频源并同时打开扬声器的情况下,否则我无法在此处录制拨出电话上。不知何故,我提到的应用程序成功记录了它,没有任何问题。我肯定会在其他Android设备上看到其他问题,因为我过去曾尝试解决整个主题。更新:我发现了this sample项目(也是here),由于某种原因,该项目在mediaRecorder的preparestart调用之间的UI线程上休眠了2秒钟。它工作正常,当我做类似的事情(等待使用Handler.postDelayed 1秒钟)时,它也工作正常。在那里写的评论是“有时准备需要一些时间才能完成”。

  • 在配备Android 8的Galaxy S7上,无论我做什么,我都无法听到拨出和拨入电话的声音(即使是MIC和扬声器),提到的效果很好。

  • 为了让您尝试通话记录的POC,我已经发布了一个开源github存储库here,其中有一个示例将记录单个呼叫,并让您收听最新的呼叫,如果一切正常。

  • This "ViktorDegtyarev - CallRecLib" SDK,它似乎根本不起作用,并且在各种Android版本上崩溃

  • 这两个旧的示例项目rvoixesnyder-callrecorder都没有实际记录。第二个似乎还不能在应该支持的Android 6.0.1设备上运行。

  • aykuttasil - CallRecorder样本和axet - android-call-recorder样本-就像在我的POC上一样,除了AudioSource之外都没有任何调整,因此,在某些情况下它们无法记录,例如拨出电话的OnePlus 2输出音频。

  • 大多数第三方应用程序仅提供AudioSource调整功能,但某些(例如“ boldbeast”)确实提供了更多功能。一个示例是“ Automatic Call Recorder”,它具有“配置”(10个值可供选择,首先是“默认”)和“方法”(5个值可供选择,首先是“默认”)。这些应用程序可能不希望其他人理解这些配置的含义,因此它们使用通用名称。或者,它对于每个人(尤其是用户)来说太复杂了,因此他们会概括名称。

  • 有一个“ setMode” here的API,但是调用它似乎没有改变。我当时在想,也许可以通过这种方式更改使用呼叫的“渠道”,但这是行不通的。在通话过程中,它停留在“ 2”的值上,即MODE_IN_CALL

  • 有可用于各种设备的自定义参数(每个OEM及其自己的参数),可以通过here甚至可以通过JNI(here和{{3} }),但我不知道从何处获取此信息(意味着哪些键值对可用)。我在很多地方进行了搜索,但是找不到任何网站谈论哪些可用参数以及哪些设备可用。

  • 我当时在考虑使用here而不是AudioRecord类进行录制,因为它有点低级,所以它可以赋予我更多功能并可以使用自定义功能,但是似乎与MediaRecorder非常相似,甚至使用相同的音频源(例如MediaRecorder)。

  • 我还尝试了使用低级API的另一种尝试,即使用JNI(适用于Android的OpenSL ES)。为此,我找不到太多信息(herehere除外),只找到了Google here的2个样本(称为“音频回声”和“本机音频”) ,这与录制声音无关,或者至少我看不到它们的发生。

  • Android P可能具有记录通话的正式方法(读取herehere)。在我的Android P DP3设备(像素2)上进行测试,我可以使用“ DEFAULT”作为音频源在传入和传出呼叫中记录双方情况,因此该API最终将是正式的并且可以在所有Android版本上使用。我写过herehere

  • 我当时在想,here类可能是一种记录的解决方法,但是根据一些StackOverflow帖子(Visualizer),它的质量非常低,所以我决定也许我不应该尝试。另外,我找不到如何从中进行记录的示例。

  • 我发现某些参数可能在某些设备上可用,here(从here找到),都以“ AUDIO_PARAMETER_”开头,但是在Galaxy S7上进行了测试,都返回了空字符串。我还发现了here,这使我想到了将audioManager.setParameters("noise_suppression=off")与MIC音频源一起使用的想法,但是对于Galaxy S7来说似乎没有任何作用。

    < / li>

问题

相对于有关此主题的其他类似问题,我不问如何记录通话。我已经知道这是一个非常棘手的问题。我已经知道我将不得不处理各种配置,并且可能会使用一台服务器来存储所有配置,并在那里找到每个配置的最佳匹配。

我想问的是有关调整和解决方法的更多信息:

  1. 是否有各种设备的配置列表,Android版本以及每种设备的选择?

  2. 除了音频源,还可以使用其他配置吗?

  3. 各种设备和Android版本可以使用哪些参数? OEM是否有描述它们的网站?

  4. 我提到的应用程序中有哪些术语?在哪里可以找到有关如何更改它们的信息?

  5. 哪些工具可用于有根设备?

  6. 是否可以通过使用API​​知道哪个设备支持呼叫记录?

  7. 关于OnePlus 2的解决方法,要等一会儿直到我们开始记录,为什么需要它?所有Android版本都需要它吗?这是一个已知问题吗? 1秒就足够了吗?

  8. 即使在使用MIC&speaker的情况下,如何也无法录制另一面的Galaxy S7?

1 个答案:

答案 0 :(得分:1)

我花了数周的时间来开发Voicecall Recording App,所以我遇到了您遇到的所有问题/问题。 此外:我的项目的优先级较低,因此我每天都没有花太多时间,因此我在Android进行了内部更改(主要发行版本为次要版本)的过程中使用了很多个月的软件。

我一直在使用其库存的ROM(无Root)在同一Galaxy Note 5上进行开发,但是我发现在同一设备上,行为从一个Android版本更改为另一个版本,而没有任何解释。 例如从Nougat 7.0到7.1.2,我无法使用与以前相同的代码来录制语音呼叫。

Google已多次强制实施有关语音通话记录的限制。 刚开始使用VOICE_CALL AudioSource就足够了。然后,制造商开始按照他们的意愿来解释此值,结果是一种实现效果很好,而另一种效果不好。 然后需要反射来运行未记录/隐藏的方法来开始语音呼叫记录。 然后Google添加了运行时检查,因此即使使用Reflection也无法直接调用它们。 但是,此方法缺乏稳定性,因为不能保证该方法在所有设备上都使用相同的名称。

然后,我开始对正在使用较新的Android版本的当前正在工作的Apps进行反向工程,我发现它们正在使用一种完全不同且更安全的方法。这花了我很多周的时间,因为所有这些应用程序都使用JNI库试图在汇编程序代码之间隐藏此方法。 当我成功创建一个录制得很好的测试应用程序时,我在许多不同的设备和ROM /版本中尝试了SAME代码,但令人惊讶的是它运行良好。 这意味着您可以在这些“应用程序设置”中看到的所有这些不同方法(我对此有98%的把握)只是“伪造”或仅指不再使用的旧方法。

对于根设备,应采取一些不同的措施: 这些设备可以更改AudioRoutes,因此在这种情况下可以使用其他方法。

[1]没有任何列表或网站列出所有受支持的设备或成功进行语音通话记录的最佳方法

[6]无法知道哪个设备支持语音通话录音     仅使用API​​调用。您必须尝试赶上例外...

[8] MIC +扬声器的录音遇到很多问题:(1)呼叫者会听到您所有的环境声音,因此隐私错误是一个大问题(2)回声是一个大问题(3)录音音量很低,因为录制的语音质量