【问题标题】:AngularJS stream audio from PHP server来自 PHP 服务器的 AngularJS 流音频
【发布时间】:2018-02-23 01:39:44
【问题描述】:

由于 CORS 和第三方服务器的身份验证,我无法直接从 angularJS 加载音频文件,必须从 PHP 后端加载。这是我的 PHP 服务器代码,用于提供从第三方服务器下载的音频文件:

header('Pragma: public');   // required
header('Content-Type: audio/mpeg');
header('Content-length: ' . filesize($file));
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: filename="' . basename($file));
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
$len = readfile($file);
exit();

这是我的 angularJS 客户端代码:

var blob = new Blob([response], { type: 'audio/mpeg' });
var url = window.URL.createObjectURL(blob);
var audio = new Audio(url);
audio.play();

但是它失败并出现异常消息:

DOMException: Failed to load because no supported source was found.

感谢任何建议和见解。

【问题讨论】:

    标签: php angularjs audio blob audio-streaming


    【解决方案1】:

    因为无论如何您只是创建一个带有响应的 Audio 对象,所以您没有理由必须做您正在做的事情。

    无需下载整个响应、从中创建 Blob 和对象 URL,只需使用您首先请求的 URL。您不仅可以有效地处理流数据,还可以在下载运行时播放,并且您不需要 CORS...“不透明”响应很好.

    【讨论】:

    • 您好,第三方服务器有限制。首先,它不允许 CORS。其次,它需要 JWT。因此,从 javascript 中做到这一点是一个相当大的挑战。因此,视频是从 PHP 代码下载的,然后提供给 javascript。
    • @KokHowTeh 正如我所说,您不需要 CORS。如果您想在服务器端进行签名,请执行此操作,并让您的 PHP 脚本重定向到实际媒体。这样您就不必浪费资源和带宽了。
    • 什么意思?这就是我正在尝试做的事情:developer.nexmo.com/voice/voice-api/guides/… - 使用您的 JWT 发出 GET 请求进行身份验证,以便从recording_url 检索录音。谢谢。
    • @KokHowTeh 使用您的实际服务器端 PHP 代码发布一个新问题,给我一个链接,我会回答它。简而言之,它非常简单。无需使用 PHP 下载该 MP3,只需在您签署 URL 后重定向到它。
    猜你喜欢
    • 2017-10-30
    • 2018-11-25
    • 2013-03-05
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多