为什么 Safari 或 Firefox 无法处理来自 MediaElementSource 的音频数据?

2024-02-09

Safari 或 Firefox 都无法处理来自MediaElementSource使用网络音频 API。 http://jsbin.com/ImUmOXe/1/edit?js,output

var audioContext, audioProcess, audioSource,
    result = document.createElement('h3'),
    output = document.createElement('span'),
    mp3 = '//www.jonathancoulton.com/wp-content/uploads/encodes/Smoking_Monkey/mp3/09_First_of_May_mp3_3a69021.mp3',
    ogg = '//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg',
    gotData = false, data, audio = new Audio();
 
function connect() {
  audioContext = window.AudioContext ? new AudioContext() : new webkitAudioContext(),
  audioSource  = audioContext.createMediaElementSource( audio ),
  audioScript  = audioContext.createScriptProcessor( 2048 );
 
  audioSource.connect( audioScript );
  audioSource.connect( audioContext.destination );
  audioScript.connect( audioContext.destination );
  audioScript.addEventListener('audioprocess', function(e){
    if ((data = e.inputBuffer.getChannelData(0)[0]*3)) {
      output.innerHTML = Math.abs(data).toFixed(3);
      if (!gotData) gotData = true;
    }
  }, false);
}
 
(function setup(){
  audio.volume = 1/3;
  audio.controls = true;
  audio.autoplay = true;
  audio.src = audio.canPlayType('audio/mpeg') ? mp3 : ogg;
  audio.addEventListener('canplay', connect);
  result.innerHTML = 'Channel Data: ';
  output.innerHTML = '0.000';
  document.body.appendChild(result).appendChild(output);
  document.body.appendChild(audio);
})();

在不久的将来有计划修复这个问题吗?或者是否有一些解决方法仍然可以向用户提供音频控件?

对于 Apple 来说,这个问题可以在 WebKit Nightlies 中修复,或者我们必须等到 Safari8.0发布以获得 HTML5<audio>可以很好地使用 Web Audio API? Web Audio API 至少从 6.0 版开始就存在于 Safari 中,我最初在 Safari 7.0 发布之前很久就发布了这个问题。这是否有原因尚未修复?它会被修复吗?

对于 Mozilla,我知道您仍在从旧的音频数据 API 进行切换,但这是否是您的 Web 音频实现的已知问题?是否会在下一个 Firefox 版本之前得到修复?


这个答案几乎完全引用自我对相关问题的回答:Firefox 25 和 AudioContext createJavaScriptNote 不是函数 https://stackoverflow.com/questions/19708561/firefox-25-and-audiocontext-createjavascriptnote-not-a-function/19710142#19710142

Firefox does支持MediaElementSource如果媒体遵守同源政策 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript,但是当尝试使用来自远程源的媒体时,Firefox 不会产生错误。

The specification is not really specific about it (pun intended), but I've been told that this is an intended behavior, and the issue is actually with Chrome… It's the Blink implementations (Chrome, Opera) that need to be updated to require CORS http://twitter.com/jsantell/status/396753990412562432.

MediaElementSource 节点和跨源媒体资源 http://lists.w3.org/Archives/Public/public-audio/2013JulSep/0219.html:

From: Robert O'Callahan <[email protected] /cdn-cgi/l/email-protection>
Date: Tue, 23 Jul 2013 16:30:00 +1200
To: "[email protected] /cdn-cgi/l/email-protection" <[email protected] /cdn-cgi/l/email-protection>

HTML 媒体元素可以播放任何来源的媒体资源。当 元素播放来自与页面不同的来源的媒体资源 origin,我们必须防止页面脚本能够读取 媒体(例如提取视频帧或音频样本)。特别是我们 应该阻止 ScriptProcessorNodes 访问媒体 音频样本。我们还应该了解其他地方泄漏的样本的信息 方式(例如定时通道攻击)。目前网络音频规范说 与此无关。

我认为我们应该通过防止任何非同源数据来解决这个问题 进入网络音频。这将最大限度地减少攻击面和影响 网络音频。

我的建议是让 MediaElementAudioSourceNode 转换来自以下位置的数据 一股非同源流寂静无声。

如果这个提案被纳入规范,那么开发人员几乎不可能意识到为什么他的MediaElementSource不管用。就目前情况而言,调用createMediaElementSource() on an <audio>元素在火狐26实际上stops the <audio>完全控制工作 http://jsfiddle.net/9eGSp/1/ and 不抛出任何错误.

您可以使用来自远程源的音频/视频数据做哪些危险的事情?总体思路是,在不将同源策略应用于MediaElementSource在 Node.js 中,某些恶意 JavaScript 可以访问只有用户有权访问的媒体(会话、VPN、本地服务器、网络驱动器),并将其内容(或其某些表示形式)发送给攻击者。

默认情况下,HTML5 媒体元素没有这些限制。您可以使用以下命令在所有浏览器中包含远程媒体<audio>, <img>, or <video>元素。只有当您想要操作或从这些远程资源中提取数据时,同源策略才会发挥作用。

[它]出于同样的原因,您无法通过以下方式转储图像数据跨源<canvas>:媒体可能包含敏感信息,因此允许流氓站点转储和重新路由内容是一个安全问题。 -@nmaier https://stackoverflow.com/users/484441/nmaier

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Safari 或 Firefox 无法处理来自 MediaElementSource 的音频数据? 的相关文章

  • 在生产中使用 css / javascript 源映射对性能有何影响?

    生产环境中应该使用源映射吗 除了调试之外 它们还有什么好处吗 由于额外的服务器往返 它们是否会影响应用程序加载时间 浏览器是否足够智能来加载 map应用程序加载和渲染后的资产 如果浏览器找不到 map asset 404错误 会对性能产生影
  • 如何在D3节点中放置图像?

    到目前为止 我已经创建了这些 D3 节点 用于创建可折叠的层次树 到目前为止 这些节点的颜色为 AA1C1C 深红色 以表明如果您单击它们 它们将扩展到更多节点 我想要做的是在节点中使用图像中的位置 这对于所有用户来说都是一个加号 以知道它
  • 如何在 CSS 中将子元素居中,即使它比父元素大?

    我想创建一个 css 类 以便可以将 div 放置在其父级的中心 我正在使用的代码是 centered position absolute margin auto bottom 0px left 0px top 0px right 0px
  • console.log 是如何工作的?

    第一个例子 在以下示例中 http jsfiddle net maniator ScTAW 4 http jsfiddle net maniator ScTAW 4 我有这个js var storage function var store
  • HTML5 Audio Element 无法在 IOS 11 设备上的 safari 中播放 mp3 直播

    我是一家广播公司的网络开发人员 自 iOS 11 发布以来 我们收到了一些用户投诉 称我们的音频直播流无法再在 IOS 11 设备上播放 为了将流嵌入我们的网站 我们使用 HTML5 AudioElement 在 iOS 11 的 iPho
  • 如何绕过 IE8 对 data:uri Base64 编码的 32k 限制?

    我需要向浏览器发送包含 1920x1080 png 的 html 响应 这是一个 html 查询截取的屏幕截图 我对图像进行 base64 编码 并将其作为 text html 内容类型嵌入发送 一些简单的事情 比如 Whatever im
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 为什么 Number.isNaN() 对字符串返回 false?

    据我的理解NaN代表Not A Number Strings不是绝对的Numbers因此我希望下面的代码返回true对于字符串 然而 事实并非如此 console log Number isNaN Stack Overflow 有人可以澄清
  • 如何查明在 Chrome 控制台中按下按钮时会调用哪些函数?

    我正在尝试自学 Google Closure javascript 库 我正在检查 TreeControl UI 小部件 如何使用Chrome控制台分析当我点击下面演示中的 剪切 按钮时运行了哪些功能 例如 我可以为此设置一个断点吗 我尝试
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • jQuery 删除函数真的删除 Dom 元素吗?

    我真的想知道 jQuery 是否remove http api jquery com remove 函数确实从 DOM 中删除元素 首先 我看了here https stackoverflow com questions 2185760 j
  • 需要将焦点放在react中的div上

    我有一个之前用 H1 标签包裹的文本 页面加载后 我需要专注于该文本 为了方便起见 我将它包装在 div 中 render const translate billing primaryContactSelection true this
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • 如何使 Meteor 上的服务器可以访问文本文件

    我很惊讶我无法在这里搜索我的答案 似乎没有其他人遇到这个问题 当您运行meteor服务时 js html等被打包在 meteor local build文件夹中 但它似乎排除了不是js或html的内容 我有一个名为 magicsets 的文
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • 如何实现 chromecast 对 html5 播放器的支持

    我使用js和html5设计了一个具有一些自定义功能的html5播放器 现在我需要在html5播放器上添加chromecast选项 例如https raw githubusercontent com kim company videojs c
  • 如何控制谷歌地图标记的不透明度

    我需要根据时间使一些标记半透明 有什么方法可以控制标记的 CSS 不透明度吗 或者是否可以可靠地找出标记的 DOM 元素 我使用 Google 地图 API v3 标记的不透明度可以设置为marker setOptions opacity
  • iPad 上的网站纵向视图

    我的网站在 iPad 纵向模式下无法正确显示 它在横向模式下看起来不错 但当我将其转换为纵向模式时 我最终会得到一个混乱的网站 所有元素都分散在整个网站上 我怎样才能解决这个问题 请帮我 这是我网站的链接 inclouds co uk ht
  • 显示对象内容 - JS/jQuery

    With this data events 返回 object Object 我需要看看里面到底发生了什么 我找到了这个 var Finder each this data events function i n Finder Name i
  • 如何选中表格中输入文本焦点上的复选框

    我试图在输入文本焦点上检查表 DOM 中的复选框 但无法访问复选框元素 但我的焦点正在工作 这是我的 jsfiddle 链接https jsfiddle net 9qha9vft https jsfiddle net 9qha9vft 这是

随机推荐

  • 尾随零不会进入数据库

    所以这是我的问题 我们试图将定价放入我们的数据库中 但由于某种原因 它将 10 00 转换为 10 或 10 50 转换为 10 5 它保持它只是砍掉尾随零 我检查了 SQL 语句 它说价格 10 00 所以我真的很困惑为什么 在哪里它要剥
  • 黄瓜嵌入的屏幕截图不链接到屏幕截图

    从 Cukes Google Group 交叉发布 我尝试过多种保存截图的方法 但最终选择了 watir webdriver 中内置的方法 不 无论我使用哪种方法 我都无法成功嵌入 Cucumber HTML 报告中此图像的链接 在 c r
  • ggplot2 在函数或 S4 中使用时产生错误

    当在 function 或 S4 中使用 ggplot2 时 我遇到了困难 这是我的没有功能的代码 rm list ls all TRUE library nlme data Oats Data lt Oats Data Env lt fa
  • 当“以管理员身份运行”时,实例化 COM 组件失败并显示“类未注册”

    实例化 COM Interop 对象时 var comObj new ComComponentClass 我得到了COMException Retrieving the COM class factory for component wit
  • CocoaLumberjack FileLogger 记录到多个文件

    我正在使用这个 CocoaLumberjack 框架来记录 Objective C 设计中的所有消息 现在我想将所有错误记录到一个文件 并将所有其他消息记录到另一个文件 我知道我可以使用格式化程序来过滤这些信息 我在 AppDelegate
  • 实现 TextWriter 的派生类

    我有两个类 我无法以任何方式更改它们 第 1 类 采取TextWriter作为构造函数参数并将其用作输出流 类2 提供方法WriteLine string 我需要一个适配器 以便将 Class1 的所有输出写入 Class2 因此我启动了一
  • Builder 与 GlobalKey

    与构建 Flutter UI 相关的许多问题都归结为错误BuildContext 例如显示SnackBar 答案通常是使用Builder或使用GlobalKey 两者都有效 但我注意到文档全局密钥 https docs flutter io
  • 如何使用命令机器人框架执行bat文件(.bat)?

    我有一个 脚本文件 我想在机器人框架中执行这个脚本 我也在尝试这个 但对我来说没有任何作用 Run CURDIR script script bat 有人可以帮我吗 Use 工艺库 http robotframework org robot
  • 删除 SQL 表中的树节点

    我正在尝试编写一个递归过程 该过程将删除该节点及其所有子节点 如果它们在表中 我尝试执行以下操作 CREATE PROCEDURE DeleteFile FileID INTEGER UserID VARCHAR MAX AS DELETE
  • AG 网格 - 禁止在特定列/单元格内选择行

    使用 AG 网格 我需要制作一个在单击时选择行的表格 但是单击某些单元格不会导致选择该行 到目前为止 我最好的想法是当鼠标悬停在非选择单元格上时禁用单击行选择 就像是 gridOptions onCellMouseOver event gt
  • 命名空间“Mvc”的类型在命名空间“Microsoft.AspNet”中不存在

    我正在 Visual Studio 2015 中开发 MVC 项目 最初在 VS 2013 中创建 一切都构建正确 但在编码时 视图显示很多错误 ViewBag Title Index Layout Views Shared Layout
  • 如何使用批处理文件编辑特定的组策略

    我在一个学区的 700 多台计算机上工作 并编写了一个小程序 我打算将其写入 CD 该程序设置为插入磁盘时自动运行 并提示计算机的屏幕分辨率以及建筑物所在的计算机 不同的教学楼 然后 程序将运行一个批处理文件 将默认桌面从磁盘复制到 win
  • 在生产环境中部署 ReactJS 应用程序(使用 NodeJS 后端)

    我们的项目现已结束 我们只有两周的时间将项目归还给我们大学最后一年的学习 我们的老师告诉我们 现在开发阶段已经结束 我们必须将其部署到生产阶段 我们使用 ReactJS 作为前端 托管在 localhost 3000 使用 NodeJS 进
  • 对不同集合上匹配 id 的对象数组进行排序

    我有一个对象数组 array id 5 name Helen age 20 id 15 name Lucy age 30 id 7 name Carlos age 1 然后我有一个类似的数组 以不同的方式排序 arraySorted id
  • Google 云容器构建器并不总是从 bitbucket 触发

    我在 Google Cloud Container Builder 中设置了构建触发器 这些触发器设置为在特定分支上触发并使用存储库中的 cloudbuild yml 配置 大约在我将提交推送到这些分支的第一天 它触发了容器构建并成功完成
  • 使用 Go 将数据发送到 Datadog

    我使用 Go 收集数据并希望将其可视化 我选择了 Datadog 但没有找到 Go 用于向 Datadog 发送指标的示例或实时项目 但官方网站说支持Go 第一步是在运行应用程序的服务器上安装 DataDog 代理 https docs d
  • tableView didSelectRowAtIndexPath 在 iOS 7 上无法正常工作。为什么?

    首先我想说我只是提出这个问题 因为我想了解发生了什么 我在 Xcode5 上全新安装时打开了一个旧的 Xcode 项目 一个非常简单的项目 当我意识到它在 iOS 7 上不起作用时 为什么 不知道 我看到了一些其他问题 没有得到任何有用的答
  • Vue.js 组件不工作

    我似乎无法弄清楚如何使组件工作 如果没有该组件 它可以正常工作 注释代码 这是我的 HTML strong Total Price strong span span br strong CPC strong span span 这是我的 V
  • Snap:编译的拼接代码示例

    我想我前段时间确实问过类似的问题 但由于 API 不稳定 没有得到回答 所以我一直在等待0 13的过去 我不确定提出类似问题是否正确 解释的替代方案是什么runChildrenWith Text and mapSplices在编译的拼接世界
  • 为什么 Safari 或 Firefox 无法处理来自 MediaElementSource 的音频数据?

    Safari 或 Firefox 都无法处理来自MediaElementSource使用网络音频 API http jsbin com ImUmOXe 1 edit js output var audioContext audioProce