gpt4 book ai didi

android - 某些应用程序如何克服电话录音限制?

转载 作者:行者123 更新时间:2023-12-02 12:17:44 25 4
gpt4 key购买 nike

背景
Android 并不真正支持电话录音,但有些设备在某种程度上支持它。
这使得各种通话录音应用程序收集尽可能多的关于设备的信息以及应该对它们做什么,然后决定要做什么。
有些甚至提供根解决方案。
一个这样的例子是 boldbeast Call Recorder app ,它提供了许多不同的配置来改变:
enter image description here

  • “记录模式”。为非 root 设备显示 14 种模式,为 root 显示多达 34 种模式。对于 Root设备,还显示“Alsa 模式”作为它的一个选项。
  • 具有“调整音频效果(“自动调整一组参数”)。
  • 具有“Tune Audio Route”,可能的值为“Disabled”、“Group1”、“Group2”、“Group3”
  • 对于root设备:
  • “更改音频控件”(“自动更改音频控件”)
  • “更改音频驱动程序”(更改音频驱动器设置以启用记录模式21、22、23、24、31、32、33、34”)
  • 对于 Root设备:“启动输入流”

  • 问题
    如果我需要创建一个通话录音应用程序,除了为各种设备找到各种解决方法之外别无他法,但似乎其他应用程序使用了 API 中没有出现的术语。
    例如,我找不到我提到的任何应用程序。
    我发现了什么
    除了关于如何在 Android 上记录通话的大量问题(表明它不适用于所有设备)之外,我还能找到一些有趣的东西。到目前为止,这是我的尝试和见解:
  • 在准备录音时我们可以使用一些录音源(docs here),但遗憾的是在每个设备中它可能会有所不同。对某些人来说,VOICE_CALL 有效,而对某些人来说,其他人。但至少我们可以尝试...
  • 在Android 6.0.1的OnePlus 2上,可以使用VOICE_CALL记录来电,但我无法在那里记录拨出电话,除非我使用MIC作为音频源并打开扬声器。不知何故,我提到的应用程序成功地录制了它而没有任何问题。我确信我会在其他 Android 设备上看到其他问题,因为我过去曾尝试解决整个主题。更新:我发现 this sample 项目(也是 here ),出于某种原因,它在 prepare 和 0x25181223134 媒体调用之间的 UI 线程上休眠了 2 秒。它工作正常,当我做了类似的事情(等待使用 Handler.postDelayed 1 秒)时,它也工作正常。那里写的评论是“有时准备需要一些时间才能完成”。
  • 在搭载 Android 8 的 Galaxy S7 上,无论我做什么,我都无法听到对方的呼出和来电(即使是麦克风和扬声器)的声音,但我提到的应用程序运行良好。
  • 为了让您尝试我的通话录音 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” API here ,但在调用它时似乎没有改变。我正在考虑以这种方式更改正在使用调用的“ channel ”,但它不起作用。它在调用期间停留在“2”的值上,即 MODE_IN_CALL
  • 有可用于各种设备的自定义参数(每个 OEM 及其自己的参数),可以设置 here 甚至可能通过 JNI( here 和 0x25181121 的意思是从那里得到信息)哪些键值对可用)。我在很多地方进行了搜索,但找不到任何讨论可用参数以及适用于哪些设备的网站。
  • 我在考虑使用 here 代替 AudioRecord 类进行记录,认为它的级别有点低,所以它可以给我更多的权力和访问自定义功能,但它似乎与 MediaRecorder 相同,甚至与 MediaRecorder 非常相似音频源(例如 MediaRecorder )。
  • 我对低级 API 的另一个尝试,甚至更进一步,使用 JNI(Android 的 OpenSL ES)。为此,我找不到太多信息(除了 herehere ),只找到了 Google here 的 2 个样本(称为“音频回声”和“本地音频录音”),或者至少不是关于我的不要看到它们发生。
  • Android P 可能有官方记录通话的方式(读取 herehere )。在我的 Android P DP3 设备(Pixel 2)上进行测试时,我可以在传入和传出调用中很好地记录双方,使用“DEFAULT”作为音频源,所以也许 API 最终会成为官方的并且适用于所有 Android 版本。我写了关于它 herehere
  • 我在想也许 here 类可能是记录的一种解决方法,但根据一些 StackOverflow 帖子( Visualizer ),质量非常低,所以我决定也许我不应该尝试。另外,我找不到如何从中记录的示例。
  • 我发现了一些可能在某些设备上可用的参数,here(从 here 中找到),都以“AUDIO_PARAMETER_”开头,但在 Galaxy S7 上测试,全部返回空字符串。我还发现了 here ,这让我想到了将 start 与 MIC 音频源一起使用的想法,但这在 Galaxy S7 的情况下似乎没有任何作用。

  • 问题
    与有关此主题的其他类似问题相反,我不是在问如何记录通话。我已经知道这是一个非常棘手和复杂的问题。我已经知道我将不得不处理各种配置,而且我可能会使用一个服务器来存储所有这些配置,并在那里找到每个配置的最佳匹配。
    我想问的更多是关于调整和解决方法:
  • 是否有各种设备、Android 版本的配置列表,以及每种设备的选择?
  • 除了音频源,还有哪些配置可以使用?
  • 哪些参数适用于各种设备和 Android 版本?是否有任何原始设备制造商的网站描述它们?
  • 我提到的应用程序中的各种术语是什么?我在哪里可以找到有关如何更改它们的信息?
  • 哪些工具可用于root设备?
  • 是否可以通过使用 API 知道哪些设备支持通话录音,哪些不支持?
  • 关于一加2的解决方法,稍等片刻,我们开始录制,为什么需要它?所有 Android 版本都需要它吗?这是一个已知问题吗? 1秒够吗?
  • Galaxy S7 为何使用MIC&speaker 也无法录制另一面?

  • 编辑:我发现这个无障碍服务能够帮助进行通话录音:
    this website
    虽然不确定如何使用它。似乎 https://developer.android.com/guide/topics/media/sharing-audio-input#voice_call_ordinary_app 使用它。如果有人知道如何做到这一点,请告诉我。

    最佳答案

    我花了好几个星期开发语音通话录音应用程序,所以我遇到了您的所有问题/疑问/问题。
    此外:我的项目具有低优先级,所以我没有每天花太多时间在它上面,所以我在这个应用程序上工作了好几个月,而 Android 正在发生变化(次要一个主要版本)。

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

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

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

    应该为 Rooted 设备做一个不同的小事:
    这些设备可能会更改 AudioRoutes,因此在这种情况下可以使用不同的方法。

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

    [6] 无法知道哪个设备支持语音通话录音
    仅使用 API 调用。你必须尝试捕捉异常...

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

    关于android - 某些应用程序如何克服电话录音限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50970915/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com