几个月前,我使用 Android ICS (4.0) 开发了一个 android 内核模块,它拦截“pcmC0D0p”模块以获取所有系统音频。
我的目标是通过 AirPlay 将所有音频(或至少播放的音乐)流式传输到远程扬声器。
内核模块可以工作,但是有几个问题(内核版本、root 权限等)所以我停止了这个工作。
现在,我们有了 Android 4.1 和 4.2,我有了新的希望!
谁知道如何在 Android 中捕获音频?
我有以下想法:
通过蓝牙连接 到同一部手机,将路由设置为 BT 并在“另一端”获取音频:这应该行不通
像以前一样使用内核模块拦截音频:hardcore,让它工作但不适用
JACK 音频连接套件:遗憾的是,Android 使用“tinyALSA”而不是“ALSA”。TinyALSA 不支持任何像 JACK 这样的过滤器(但这带来了内核模块的想法)
使用 PulseAudio 作为 AudioFlinger 的替代品,但这也不适用
编辑(忘记他们):
我从tinyALSA (Android 上的 ALSA )编译了“tinymix”(ALSA 混音器的婴儿版),并尝试将音频输出路由到麦克风输入 - 但没有成功(我无法理解)。这也需要生根:不适用
我测试了OpenSL ES,但我不是 C-crack 并且它以“我可以录制麦克风,但没有更多”结束(也许我错了?)
我刚刚找到ROUTE_TYPE_LIVE_AUDIO:
支持实时音频路由的设备将允许将媒体音频流路由到支持的目的地。这可以包括设备本身的内部扬声器或音频插孔、A2DP 设备等。
一旦启动,此路由对应用程序是透明的。媒体流上播放的所有音频都将路由到选定的目的地。
也许这有任何帮助?
我的想法不多了,但想“破解这个坚果”,也许有人可以帮助我?
编辑:
我真的是 C 和内核编码的新手(但我成功地创建了一个交叉编译的音频拦截模块) - 但在 PCM 数据从用户空间(JAVA ,C层?)到内核空间(tinyALSA,内核模块),没有黑客和生根?