Chrome 扩展程序是否可以从浏览器的任何选项卡中收听流式音频?我想捕获流式音频数据,然后对其进行分析。
谢谢
Chrome 扩展程序是否可以从浏览器的任何选项卡中收听流式音频?我想捕获流式音频数据,然后对其进行分析。
谢谢
您可以尝试 3 种方法,但没有一种方法可以 100% 保证满足您的需求。
在进行更详细的描述之前,我必须注意 Chrome 扩展没有提供方便的工具来处理每个连接级别 - 足够低的级别,这是流捕获所必需的。这是设计使然。这就是为什么第一种方式是:
查看其他浏览器,例如 Firefox,它为连接提供低级 API。已知它们被类似的扩展使用。你可以看看MediaStealer。如果您没有在 Chrome 上构建系统的特定要求,您可能应该迁移到 Firefox。
您可以开发一个 Chrome 扩展程序,它通过webRequest API 拦截 HTTP 请求,分析它们的标头并提取媒体 url(例如在 HTTP 标头中包含音频/mpeg MIME 类型)。只是为了快速查看代码示例,请查看以下 SO 问题 -如何在 Chrome 中更改响应标头。拥有该 url,您可能会强制将适当的媒体下载为文件。它将降落在默认下载文件夹中,并且可能具有不友好的名称。(我做了这样的扩展,但我没有进一步处理的要求)。如果您需要进一步处理此类文件,则在文件夹中监视它们并在单独的程序中运行其他分析可能是一个挑战。
您可能会看一下一般的 NPAPI 插件,尤其是它们的流式 API。我可以想象您创建了一个插件,再次注册了音频/mpeg MIME 类型,并通过NPP_NewStream
,NPP_WriteReady
和NPP_Write
方法接收数据。该插件可以包装到 Chrome 扩展程序中。虽然我制作了 NPAPI 插件,但我从未使用过这个 API,而且我不确定它是否能按预期工作。尽管如此,我在这里提到这种可能性是为了完整性。此方法需要除 Web 编码之外的一些编码,即 C/C++。注意。自 2015 年 9 月起,NPAPI 插件在 Chrome 中已弃用且不受支持。
考虑到您有一些外部(扩展)“指纹服务”,这听起来像是一种智能数据处理,您可能有兴趣在浏览器之外构建所有系统。例如,您可能会涉及 HTTP 代理,从而避免媒体通过流量。
如果您正在编写 Chrome 扩展程序,则可以使用Chrome tabCapture API来录制音频。
chrome.tabCapture.capture({audio: true}, function(stream) {
var recorder = new MediaRecorder(stream);
[...]
});
其余的留给读者作为练习;MDN 有更多关于如何使用 MediaRecorder 的文档。
当 2013 年提出这个问题时,chrome.tabCapture 和 MediaRecorder 都不存在。
使用 soundflower 的 Mac OSX 解决方案:http: //rogueamoeba.com/freebies/soundflower/
安装 soundflower 后,它应该在声音首选项(苹果 > 系统首选项 > 声音)中显示为单独的音频设备。将计算机的音频转换为 2ch 选项(立体声,16ch 是环绕声),然后在 DAW 中,例如“大胆”,将音频输入设置为 soundflower。现在声音应该被引导到您的 DAW 准备录制。
注意:将音频从内部扬声器转移到 soundflower 后,您只有在“soundflowerbed”应用程序实际打开时才能听到音频。如果右上角的任务栏中有一个 8 条腿的斑点,您就知道它是打开的。单击此图标可为您提供声音花卉选项。
我的 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 中复制的文件。