用于收听和捕获流式音频的 Chrome 扩展程序

Posted

技术标签:

【中文标题】用于收听和捕获流式音频的 Chrome 扩展程序【英文标题】:Chrome extension to listen and capture streaming audio 【发布时间】:2013-03-08 19:39:13 【问题描述】:

Chrome 扩展程序是否可以从浏览器的任何选项卡中侦听流式音频?我想捕获流式音频数据,然后对其进行分析。

谢谢

【问题讨论】:

在我的脑海中(最初的谷歌搜索支持这一点),我找不到任何方法来做到这一点。这听起来也像是一个巨大的安全漏洞,所以我无法想象任何浏览器会急于支持它。 你必须听音频吗?你能代替观察网络请求吗?这适用于任何网站,还是适用于某个特定网站?您是针对所有平台,还是只针对一个平台? 好吧,我想获取流式音频数据(比如来自在线广播节目)并将其发送到音频指纹识别服务。理想情况下,它适用于任何网站,我可能一开始只针对 Chrome。 如果流式音频来自音频对象,并且不在 iframe 内,您不能使用 AudioContext 对象“抓取”它并操纵流。类似lab.ejci.net/Chrome-Audio-EQ/# 【参考方案1】:

如果您正在编写 Chrome 扩展程序,您可以使用 Chrome tabCapture API 来录制音频。

chrome.tabCapture.capture(audio: true, function(stream) 
  var recorder = new MediaRecorder(stream);
  [...]
);

剩下的留给读者作为练习; MDN 有more documentation 介绍如何使用 MediaRecorder。

2013 年提出这个问题时,chrome.tabCapture 和 MediaRecorder 都不存在。

【讨论】:

【参考方案2】:

您可以尝试 3 种方法,但都不能 100% 保证满足您的需求。

在进行更详细的描述之前,我必须注意,Chrome 扩展程序没有提供方便的工具来处理每个连接级别 - 足够低级别,这是流捕获所必需的。这是设计使然。这就是为什么第一种方式是:

    查看其他浏览器,例如 Firefox,它为连接提供低级 API。已知它们被类似的扩展使用。你可以看看MediaStealer。如果您对在 Chrome 上构建系统没有特定要求,您可能应该迁移到 Firefox。

    1234563标题)。只是为了快速查看代码示例,请查看以下 SO 问题 - How to change response header in Chrome。拥有该 url,您可能会强制将适当的媒体下载为文件。它将降落在默认下载文件夹中,并且可能具有不友好的名称。 (我做了这样的扩展,但我没有进一步处理的要求)。如果您需要进一步处理此类文件,在文件夹中监控它们并在单独的程序中运行额外的分析可能是一个挑战。

    您可以查看一般的 NPAPI 插件,尤其是它们的 streaming APIs。我可以想象你创建了一个插件,再次注册了音频/mpeg MIME 类型,并通过NPP_NewStreamNPP_WriteReadyNPP_Write 方法接收数据。该插件可以包装到 Chrome 扩展程序中。虽然我制作了 NPAPI 插件,但我从未使用过这个 API,而且我不确定它是否能按预期工作。尽管如此,我在这里提到这种可能性是为了完整性。此方法需要除 Web 编码之外的一些编码,即 C/C++。 注意。自 2015 年 9 月起,NPAPI 插件在 Chrome 中已被弃用且不受支持。

考虑到您有一些外部(扩展)“指纹服务”,这听起来像是一种智能数据处理,您可能有兴趣在浏览器之外构建所有系统。例如,您可能会涉及 HTTP 代理,从而避免媒体通过流量。

【讨论】:

【参考方案3】:

使用 soundflower 的 Mac OSX 解决方案:http://rogueamoeba.com/freebies/soundflower/

安装 soundflower 后,它应在声音首选项(苹果 > 系统首选项 > 声音)中显示为单独的音频设备。将计算机的音频转换为 2ch 选项(立体声,16ch 是环绕声),然后在 DAW 中,例如“大胆”,将音频输入设置为 soundflower。现在声音应该被引导到您的 DAW 准备录制。

注意:将音频从内部扬声器转移到 soundflower 后,您只有在“soundflowerbed”应用程序实际打开时才能听到音频。如果右上角的任务栏中有一个 8 腿的斑点,您就知道它是打开的。单击此图标可为您提供声音花卉选项。

【讨论】:

【参考方案4】:

我的 privoxy 有以下日志:

2013-08-28 18:25:27.953 00002f44 Request: api.audioaddict.com/v1/di/listener_sessions.jsonp?_method=POST&callback=_AudioAddict_WP_ListenerSession_create&listener_session%5Bid%5D=null&listener_session%5Bis_premium%5D=false&listener_session%5Bmember_id%5D=null&listener_session%5Bdevice_id%5D=6&listener_session%5Bchannel_id%5D=178&listener_session%5Bstream_set_key%5D=webplayer&_=1377699927926
2013-08-28 18:25:27.969 0000268c Request: api.audioaddict.com/v1/ping.jsonp?callback=_AudioAddict_WP_Ping__ping&_=1377699927928
2013-08-28 18:25:27.985 00002d48 Request: api.audioaddict.com/v1/di/track_history/channel/178.jsonp?callback=_AudioAddict_TrackHistory_Channel&_=1377699927942
2013-08-28 18:25:54.080 00003360 Request: pub7.di.fm/di_progressivepsy_aac?type=.flv

所以我得到了流 url 并记录下来:

D:\Profiles\user\temp>wget pub7.di.fm/di_progressivepsy_aac?type=.flv
--18:26:32--  http://pub7.di.fm/di_progressivepsy_aac?type=.flv
           => `di_progressivepsy_aac@type=.flv'
Resolving pub7.di.fm... done.
Connecting to pub7.di.fm[67.221.255.50]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [video/x-flv]

    [                   <=>               ] 1,234,151      8.96K/s

我得到了可以在任何多媒体pleer中复制的文件。

【讨论】:

以上是关于用于收听和捕获流式音频的 Chrome 扩展程序的主要内容,如果未能解决你的问题,请参考以下文章

警察扫描无线电应用程序如何工作?具体来说,他们从哪里获取流式音频数据?

Chrome 扩展:在后台 JS 中录制麦克风和扬声器

通过 WiFi 在 Android 手机之间流式传输语音

如何在 React Native 上捕获麦克风音频并将其流式传输到 IceCast 端点?

通过WiFi在Android手机之间流式传输语音

我如何在 Angular 应用程序中订阅/收听 chrome 推送通知