当前位置: 首页 > 知识库问答 >
问题:

一些应用程序是如何克服电话录音限制的?

东方文林
2023-03-14

Android并不真正支持电话录音,但一些设备在一定程度上支持它。

这使得各种通话记录应用程序尽可能多地收集关于设备和应该对它们做什么的信息,并决定该做什么。

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

“更改音频控制”(“自动更改音频控制”)

“更改音频驱动程序”(更改音频驱动程序设置以启用录制模式21、22、23、24、31、32、33、34“)

对于根设备:“启动输入流”

在搭载Android8的Galaxy S7上,无论我做了什么,我都无法听到对方的呼出和呼入声音(即使是麦克风和扬声器),但我提到的应用程序运行良好。

为了让您尝试我的呼叫记录POC,我在这里发布了一个开放源代码的github存储库,其中有一个示例可以记录单个呼叫,如果一切正常,还可以让您收听最近的一个。

这个“ViktorDegtyarev-CallReclib”SDK似乎根本不起作用,在各种Android版本上都崩溃了

这两个旧的示例项目:rvoix、esnyder-callrecorder,都无法实际记录。第二个似乎在本应支持的Android 6.0.1设备上都不起作用。

Aykuttasil-CallRecorder示例和Axet-Android-Call-Recorder示例,就像我的POC一样,除了AudioSource之外,没有任何调整,正因为如此,它们在某些情况下无法录制,比如OnePlus 2输出-传出电话的音频。

大多数第三方应用程序只提供音源调整,但有些(如“BoldBeast”)确实提供了更多。一个例子是“自动呼叫记录器”,它有“配置”(10个值可供选择,第一个值为“默认”)和“方法”(5个值可供选择,第一个值为“默认”)。这些应用程序可能不想让别人理解这些配置意味着什么,所以他们把通用名称。或者,它只是对每个人(尤其是对用户)来说太复杂了,所以他们泛化了名称。

有可用于各种设备的定制参数(每个OEM及其自己的参数),可以在这里设置,甚至可以通过JNI(这里和这里)设置,但我不知道从哪里获得这些信息(意味着哪些键值对可用)。我搜索了很多地方,但找不到任何网站谈论哪些可能的参数可用,哪些设备。

我考虑使用AudioRecord而不是MediaRecorder类进行录制,认为它的级别有点低,所以它可以给我更多的权力和访问定制功能,但它似乎与MediaRecorder非常相似,甚至使用相同的音频源(这里的示例)。

我对低级API的另一个尝试是进一步使用JNI(OpenSL ES for Android)。为此,我找不到太多的信息(除了这里和这里),只找到了谷歌在这里的两个样本(称为“音频回声”和“原生音频”),它们不是关于录制声音的,或者至少我没有看到它们发生。

我在想,也许Visualizer类可以作为录音的变通方法,但根据StackOverflow的一些帖子(这里),它的质量非常低,所以我决定也许我不应该尝试它。另外,我找不到如何从它录音的样本。

我发现了一些可能在某些设备上可用的参数,这里(从这里找到),都以“Audio_Parameter_”开头,但在Galaxy S7上测试,都返回空字符串。我还找到了这个网站,它给了我使用Audiomanager.setparameters(“noise_suppression=off”)和麦克风音频源的想法,但这对Galaxy S7似乎没有任何作用。

与关于这个主题的其他类似问题相反,我不是在问如何记录电话。我已经知道这是一个非常有问题和复杂的问题。我已经知道我必须处理各种配置,我可能会使用一个服务器来存储所有这些配置,并在那里找到每一个配置的最佳匹配。

除了音频源,还有哪些配置可以使用?

哪些参数对于不同的设备和Android版本是可能的?有没有原始设备制造商的网站描述他们?

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

不过我不知道怎么用。似乎“ACR电话拨号器”使用它。如果有人知道怎么做,请让我知道。

共有1个答案

公西博实
2023-03-14

我花了很多周的时间在一个Voicecall录音应用程序上,所以我面对你所有的问题/问题/难题。此外:我的项目是一个低优先级的,所以我每天都没有花很多时间在上面,所以我在这个应用程序上工作了很多个月,而Android在暗地里发生了变化(小的一个大的发布)。

我一直在同一台Galaxy Note 5上使用其库存ROM(没有Root)进行开发,但我发现在同一台设备上,从一个Android版本到另一个Android版本的行为发生了变化,没有任何解释。例如,从Nougat7.0到7.1.2,我无法使用与以前相同的代码录制voicecall。

谷歌已经多次实施或改变了关于voicecall录音的限制。开始时,使用use VOICE_CALL audiosource就足够了。然后制造商开始按照他们的意愿解释这个值,结果是一个实现运行良好,但另一个不是。然后需要反射来运行未记录/隐藏的方法来开始voicecall录制。然后谷歌增加了一个运行时检查,所以直接调用它们是不可能的,即使使用反射。但是,这种方法缺乏稳定性,因为它不能保证一个方法在所有设备上使用相同的名称。

[1]没有任何列表或网站列出所有支持的设备或成功录制voicecall的最佳方法

[6]不可能仅仅使用API调用就知道哪种设备支持Voicecall录制。你必须试着捕捉异常...

[8]用麦克风+扬声器录音有很多问题:(1)来电者会听到你所有的环境声音,所以隐私问题是一个大问题(2)回声是一个大问题(3)录音音量和录音声音的质量一样低

 类似资料:
  • 我正在开发一个应用程序“Call Recorder”,我已经授予了所有权限,但它并没有记录来电者的声音。我正在使用MediaRecorder。

  • 我正在使用spark 2.4.2读取包含600条记录的csv。最后100条记录有大量数据。我遇到的问题是, 我已经增加了到2g(最大允许设置)和火花驱动程序内存到1g,能够处理更多的记录,但仍然不能处理csv中的所有记录。 我试着翻页600条记录。e、 对于6个分区,我可以在每个分区处理100条记录,但由于最后100条记录太多,因此会发生缓冲区溢出。 在这种情况下,最后100条记录很大,但这可能是

  • 我有一个XML存储在CLOB中。为了显示来自XML的特定数据,我需要运行各种substr和instr函数。 我当前的代码使用varchar2(32000)变量处理它,如下所示: 我编写了一个匿名块来测试子字符串的限制,如下所示: 我注释掉了第二个子字符串,只是为了看看如果我将str_length更改为32000以下,表是否会填充数据,并且它确实被填充了。 这是我的输出 下面是我的输出:

  • 我试着用我的Flutter应用程序打电话。用以下代码: 我在GitHub Flatter repo上找到了这个函数:https://github.com/flutter/flutter/issues/4856 但是这对我不起作用。这个功能还在Flutter中吗?在哪个包中?或者有更好的选择从我的应用程序打电话吗?

  • 我想做一个应用程序,记录来电和去电,它会自动运行,当用户得到或作出任何呼叫。

  • 我需要在我的android应用程序中记录电话。我试过使用MediaRecorder,将AudioSource设置为MIC、VOICE_COMMUNICATION、VOICE_CALL和其他选项。但它们都没有记录通话。有人能建议在android中记录电话的任何解决方案吗? 以下是我试用过的代码。但它不记录通话。只记录通话前后的语音。请建议任何解决方案。 开始录制的代码 获取输出文件文件名的代码 停止