使用 ALSA/CAF 进行 Android 通话录音

Posted

技术标签:

【中文标题】使用 ALSA/CAF 进行 Android 通话录音【英文标题】:Android call recording using ALSA / CAF 【发布时间】:2015-03-18 15:09:28 【问题描述】:

我正在为我的 root 手机编写一个小型通话录音库。 我在某些应用程序中看到,录音是通过 ALSA 或 CAF 在有根手机上完成的。 我找不到任何关于如何使用 ALSA 或 CAF 进行通话录音(甚至是录音)的示例/教程。 我看到了 tinyAlsa lib 项目,但我不知道如何在 android 应用程序中使用它。 有人可以给我看一些关于如何在 Android 应用程序中集成 ALSA 或 CAF 的教程或代码示例吗?

更新 我设法用 JNI 调用包装 tinyAlsa。但是,mixer_open(0) 之类的调用返回空指针,pcm_open(...) 之类的调用返回一个指针,但对 is_pcm_ready(pcm) 的后续调用总是返回 false。 难道我做错了什么?我错过了什么吗?

【问题讨论】:

“录音是通过 ALSA 或 CAF 在 root 手机上完成的”。出于什么目的?为什么不使用 Android 的常规录音 API(MediaRecorderAudioRecord)? 出于学术目的(获得更多知识)和实用目的 - 在我的设备(nexus 5)上使用标准 api 通话录音效果不佳,显然不支持标准 api 我想补充一点,我正在寻找一种录制直接系统音频的方法,无论是 ALSA / CAF 还是其他什么都不重要 【参考方案1】: Here 的如何使用 Android 的工具链构建 ALSA 库。 和here 你可以找到另一个提到 ALSA for android 的 repo

我建议您阅读this post 以了解您的选择和当前平台情况。

在 cmets 之后编辑:

我认为您需要使用 tinyalsa 来实现您的解决方案,假设您正在使用基本的 ALSA 实现。如果小版本缺少某些东西,那么您可能需要询问作者(但这对我来说听起来很奇怪,因为您正在执行基本操作)。 在阅读this post 之后,我们可以得到一些关于为什么需要 root 的线索(访问受保护的挂载点)。

让我们了解您的最新进展,这是一个有趣的话题!

【讨论】:

感谢您提供详细信息。我实际上专注于 tinyalsa / tinyalsa-ndk 库,而我缺少的是如何使用生成的 libtinyalsa.so 将其移植到我的 android 应用程序(除了本机调用)以录制音频 - 特别是录制来电。我知道基本流程——pcm-open、loop pcm-read 和 pcm-close。我想了解的是例如如何检索有效的卡和设备而不是默认的 0,0,以及 - 因为我计划在有根电话上使用它 - 流程中的根是必需的。感谢您的帮助 感谢您的参考,我仍在尝试如何使用 java 代码中的 tinyAlsa 来录制原生音频(重点是通话录音) 我设法用 JNI 调用包装 tinyAlsa。但是,mixer_open(0) 之类的调用返回空指针,pcm_open(...) 之类的调用返回一个指针,但对 is_pcm_ready(pcm) 的后续调用总是返回 false。难道我做错了什么?我错过了什么吗? 正在寻找相同的东西,但没有喜欢任何有用的东西,你完成了吗?

以上是关于使用 ALSA/CAF 进行 Android 通话录音的主要内容,如果未能解决你的问题,请参考以下文章

Android通话录音未录制来电语音

Android 上的 Quickblox 视频通话

以编程方式进行Android会议和保持通话[重复]

如何构建一个可以进行基本视频通话的简单 Native WebRTC Android 应用程序?

需要在 Android 和 iOS 中集成应用内购买以与患者进行视频通话?

关于基于Linphone的视频通话Android端开发过程中遇到的问题