在没有文件的情况下在 HTML5 中播放来自 javascript 的音频 - 使用缓冲区

Posted

技术标签:

【中文标题】在没有文件的情况下在 HTML5 中播放来自 javascript 的音频 - 使用缓冲区【英文标题】:Play audio from javascript in HTML5 WITHOUT a file - using buffer 【发布时间】:2013-11-21 23:29:23 【问题描述】:

我正在使用 jQuery 的 ajax 方法在服务器上调用 php 脚本,该脚本将返回一个 mp3 文件给我,因此我将数据保存在成功函数的变量中。现在我想为这个人播放那个音频。我正在使用 html5,但我看到的每个示例都希望您指向一个包含音频的文件。我没有它作为文件,我有它在内存中。

【问题讨论】:

为什么要通过AJAX返回MP3数据?为什么不让浏览器为您处理它,为该媒体指定 PHP 脚本的 URL?这样会更有效率和兼容性。其他方法包括将其放入 Blob,或使用带有脚本节点的 Web Audio API。 因为被调用的 PHP 脚本需要一个带有多个参数的 POST。 我会单独执行您的POST(假设您实际上正在更改数据)并返回一个令牌,然后您可以使用普通的GET 调用您的视频脚本。这是一个更好的解决方案。 mp3文件是根据发送给php脚本的内容动态创建并返回给浏览器的。我不确定您所说的实际效果如何。 将临时文件写入磁盘并返回引用该文件的 ID 作为对 AJAX POST 的响应。您可以使用足够长的 ID 以便此文件可以存在于文档根目录中,或者执行类似getMp3File.php?id=0123456789abcdef 的操作。这不仅会大大增加对浏览器的支持并大大提高性能,而且您会自动添加对在文件中查找范围请求的支持。 【参考方案1】:

以下内容可帮助您开始使用 Web Audio API。 theAjaxResponse 应该是来自服务器的 mp3 响应(二进制)。

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();

context.decodeAudioData(theAjaxResponse, function(buffer) 
      var source = context.createBufferSource();
      source.buffer = buffer;
      source.connect(context.destination);
      source.start(0);
, onError);

这仅适用于支持 Web Audio API 的现代浏览器。

【讨论】:

当我在 decodeAudioData 行上尝试时返回一个语法错误。 好的,发现我必须将 AjaxResponse 转换为 ArrayBuffer 才能到达这里。现在我得到了一个空错误,尽管我必须追查。

以上是关于在没有文件的情况下在 HTML5 中播放来自 javascript 的音频 - 使用缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

在没有 MediaPlayer 的情况下在 android 上播放实时媒体流

在没有外部模块的情况下在 Python 中播放声音?

如何在没有 WebRTC 的情况下在 HTML5 中启动前置摄像头?

在没有 installp 的情况下在 AIX 中配置 JRE

在没有全屏的情况下在 UIWebView 中播放 Youtube 视频

如何在不创建另一个新标签或新浏览器窗口的情况下在同一网页中播放 MPG 视频/音频文件?