从 Android 中的各种内部设备录制音频(通过未记录的 API)

问题描述 投票:0回答:1

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

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

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

android audio android-ndk fm-radio
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 广播输出,前提是这不是由硬件直接处理的。

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

© www.soinside.com 2019 - 2024. All rights reserved.