如何在Android设备上录制内部音频或记录MediaPlayer音频流?

13

我目前正在尝试录制在MediaPlayer中播放的音频流。

实际上,我发现一些博客文章说,由于安全/版权原因,这是不可能的,但我没有找到任何官方声明来自Android / Google文档。此外,还有屏幕捕获应用程序,例如Mobizen可以记录内部音频(至少三星设备似乎有效)。

所以,有人能告诉我:

  1. 官方是否不允许/支持内部音频?
  2. 是否可以使用AudioRecorder记录在MediaPlayer中播放的流?

我现在不太确定是否正在进入黑暗面?

我已经尝试回答第二个问题:

  • 记录了不同的MediaRecorder.AudioSource,但所有记录的都是麦克风
  • 找到了一个按字节记录的方法,但这与MediaPlayer不兼容

1
确实,Mobizen似乎可以做到这一点,但是他们可能正在使用屏幕录制API来实现? - Itamar Kerbel
1
我认为官方的Android API不允许你想要的。 [即使Mobizen也承认了这一点] (https://support.mobizen.com/hc/en-us/articles/226494547-Can-I-record-Internal-Sound-)。我的猜测是Mobizen可能使用额外的API,只有三星和LG手机支持(但如果是这样,我没有看到任何公开的文档介绍这些API)。这篇旧帖子也讨论了这个问题:https://dev59.com/oWMm5IYBdhLWcg3wX98W - Rapunzel Van Winkle
1个回答

15

随着新的Android 10 API的推出,终于有了一个名为AudioPlaybackCapture的API。

这个API使应用程序能够复制其他应用程序播放的音频。这个功能类似于屏幕截图,但是用于音频。

我个人还没有测试过它,但以下是根据开发指南捕获音频所需的步骤。

捕获音频所需的权限:

要捕获音频,然后需要建立一个AudioRecord对象并将AudioPlaybackCaptureConfiguration添加到其中:

  1. 调用 AudioPlaybackCaptureConfiguration.Builder.build() 来构建一个 AudioPlaybackCaptureConfiguration
  2. 通过调用 setAudioPlaybackCaptureConfig 将配置传递给 AudioRecord

您也可以通过 AUDIO_USAGEUID 来限制捕获,参见:按音频内容限制捕获

我强烈建议您查看 Android Dev Guide

限制条件

2020年9月1日更新: 根据 StatCounter 的数据,Android 10.0 现在占 Android 市场份额的 29.04%。

全球移动及平板电脑 Android 版本市场份额,从2019年7月到2020年7月。来源:StatCounter

数据来源:StatCounter,统计时间为2019年7月至2020年7月。


原回答:目前运行Android 10的设备非常少。Google尚未发布市场份额数据,但我们可以猜测它最多不到10%,这是Android 9.0的市场份额。

在截止于2019年5月7日的7天内收集的数据。任何分布低于0.1%的版本都不会显示。

数据来源:Distribution dashboard,统计时间为2019年5月7日的7天内。


你能帮我解决这个问题吗?https://stackoverflow.com/questions/64196648/record-internal-audio-not-working-for-tv-box - Sumit Kumar

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