4

我想知道是否可以从系统输出、FM 收音机、蓝牙耳机等其他来源捕获音频数据。我对从 FM 收音机捕获音频特别感兴趣,并且已经研究了所有可能性,包括尝试嗅探原始数据手机和无线电设备之间的蓝牙通信没有运气。太糟糕了,Android 只允许从 MIC 录制音频。

我查看了 Android 源代码,但找不到后门可以让我在不生根设备的情况下执行此操作。至少,您是否知道如何使用其他设备(可能以某种方式访问​​ /dev/audio),例如通过 NDK 或更好的方式 - Java(可能是反射?)来欺骗系统从 FM 中捕获音频流收音机。(就我而言,我正在尝试为 HTC Desire 开发应用程序)

PS。对于那些反对使用未记录 API 的人,请不要在此处发布 - 我正在编写一个供我个人使用的应用程序,或者即使我发布了它,我也会警告用户可能存在的不兼容性。

4

1 回答 1

6

我花了很长时间来破译音频堆栈,我认为您可能会尝试劫持 libaudio。您将无法直接与硬件 (/dev/*) 对话,因为许多设备使用专有的音频驱动程序。这方面没有规定。

但是,/system/lib/libaudio.so 提供的音频硬件抽象层 (HAL)应该公开http://source.android.com/porting/audio.html中描述的 API

Android 系统,尤其是 audioflinger,使用这个 libaudio HAL 来查找可用设备、处理路由,当然还有读/写 PCM 数据。

因此,您可以通过重命名后者来劫持 audioflinger 和 libaudio 之间的交互,并提供您自己的 libaudio 来装饰真实的 libaudio。这样做,您应该能够记录发生的事情并很可能拦截 FM 无线电输出,前提是这不是由硬件直接处理的。

当然,这一切都需要生根。如果您设法做到这一点,请发表评论,这让我很感兴趣。

于 2011-01-07T10:37:41.360 回答