Android 4.0 ICS中的通话音频流修改

30
我一直在做一个需要修改通话流的项目。许多人认为这是不可能实现的,因为他们认为通话中的硬件环路完全与设备的主MCU分离。
例如像Stream audio to a phone call Android 这样的问题,得到的答案指出无法访问音频。我同意这在Android API上肯定是不可能的,但目前并不清楚硬件是否完全被隔离。
Stackoverflow用户'artsylar'说他们能够修改Android OS的'framework layer',将录制的音频注入通话流中,这将是一个巨大的进步(请参见Play an audio clip onto an ongoing call, artsylar对所选答案的评论)。如果artsylar的成功是有效的,那么肯定有一种方法通过修改框架来控制通话流的音频(我假设是Android源代码中的电话基础框架)。
基本上,我完全同意从应用程序层面修改或控制通话流是不可能的。然而,我有兴趣在框架或无线电接口层自定义Android OS;artsylar似乎已经取得了成功,但目前还没有公开文献对其进行解释。鉴于当前的Android技术状态,是否有人可以澄清上述问题以确定通过修改核心Android OS来控制通话音频是可能的,并且寻找实现这一目标的好方法?
我相信对这个问题的最终澄清将对开源社区非常有价值。
谢谢!

1
你成功修改了调用流吗? - B770
2
你的研究目前处于什么状态? - kagali-san
2个回答

13

从技术上讲,某些平台(例如高通的MSM8960和APQ8064)可以在语音呼叫上行链路中注入音频。硬件层面和设备驱动程序层面支持该功能。但是,要使这个功能对普通应用程序可用,您需要创建一个自定义的Android ROM,在其中添加了Android的Java层和本地层中所需的所有必要用户空间部分。

因此简短的答案是:没有标准的方法可以作为应用程序开发人员实现这一点(无论您使用SDK还是NDK)。
如果您为OEM工作或以其他方式能够构建和刷写自己的Android ROM,则可能通过询问平台供应商获得所需信息。


设备 - 红米10c 处理器 - 高通SM6225骁龙680 4G...... 我正在从基础构建LineageOS 19.1,我的最终目标是将音频文件注入到呼入通话上行中。到目前为止,我已经进行了大量的研究,但仍然无法找到方法(我编辑了mixer_paths.xml,在sdk内部编辑了音频焦点,然后尝试编辑msm_pcm_routing_v2.c,但所有这些都无助于实现我的目标)。如果您能帮助我,我正在尝试使用tinylasa,但它也失败了。 @Michael,我需要您的帮助或指导。 - zpvk

6

由于涉及处理Android操作系统内的Linux内核,因此这非常困难。

不仅没有API支持,而且也不允许出现安全问题。

作为软件工程领域的专业人士,尤其是程序员,我们从不假设任何人的发明和相关项目是有效的,直到该项目被测试过。

此外,在通话期间流媒体音频可能会在智能手机用户和电话服务提供商之间引发隐私和安全问题。


1
Linux内核?不是的。硬件支持也同样重要,因为手机使用 (mic -> 基带处理器, mic -> 操作系统) 双链路,而不是 (mic -> 操作系统 -> 基带),这点需要特别注意。 - kagali-san
@kagali-san 如果你说它像“mic -> baseband processor”,那么蓝牙耳机是如何工作的?所以我认为你是不对的,更像是“mic -> 操作系统 -> baseband”。 - user2629998
3
@André,这个问题资料很少,但不是的-蓝牙传输也是通过芯片内部传输工作的。你可以在谷歌上搜索一些MT6575、MT6589和相应的无线电芯片MT6627、MT6627的数据手册和方块图/电路图-我怀疑芯片之间的MRGPCM通道是音频传输路径。还有一种叫做DAIBT的东西,在某些方案中中国人使用它来指定声音处理部分。此外,有些手机甚至没有将麦克风音频发送到基带中进行镜像处理。 - kagali-san
由于功率效率和低延迟的要求,蓝牙/射频处理器中的 PCM 音频不会显示在 HCI/应用程序堆栈中,因为它是在芯片内部进行处理的。借助 Bluegiga 的原型蓝牙模块(如 WT11x),可以发现芯片内置了 PCM 处理单元;因此无需在外部进行复杂的处理。 - kagali-san
1
@André和我将非常高兴地知道有一种捕获非镜像音频流并修改它的方法:( - kagali-san
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接