javascript - 从 blob 设置音频元素源
问题描述
我的页面上有一个音频控件,看起来像:
<audio id="myAudio" controls>
<source id="myAudioSource" src="https://my-site/mp3/123456" type="audio/mp3">
</audio>
这有效,mp3 被加载和播放。但是,我需要对 mp3 请求进行更多控制,因此我有一些 javascript 可以获取 mp3,然后尝试设置如下所示的源:
fetch("https://my-site/mp3/123456", { method: "GET", headers: { "my-header": "my-header-value" }})
.then(response => response.blob())
.then(blob => {
const audioUrl = window.URL.createObjectURL(blob);
myAudioSource.src = audioUrl;
myAudio[0].load();
})
.catch(console.error);
我在其他地方看到过人们这样做的例子,所以我相信它应该有效。我没有收到任何错误,我可以单步执行代码,这样我就可以看到每一行都被击中了。Blob 看起来是正确的,因为它具有正确的类型(音频/mp3)并且大小合适,但音频控件永远无法播放。我错过了什么?
解决方案
Givenhttps://my-site/mp3/123456
解析为实际的MP3文件。另外(因为它是您的服务器)为什么不使用相对路径:/mp3/
<audio id="myAudio" controls></audio>
<script>
const EL_audio = document.querySelector("#myAudio");
fetch("/mp3/123456")
.then(response => response.blob())
.then(blob => {
EL_audio.src = URL.createObjectURL(blob);
EL_audio.load();
})
.catch(console.error);
</script>
推荐阅读
- ios - 无法在网络调用中返回可观察到的 customError
- redux-saga - redux saga,有条件地节流/去抖动?
- mongodb - 将字段 _id mongoose 更改为自动增量
- android - Android Studio 3.2.1 - 如何在构建期间忽略警告
- android - android中的android常用jar文件
- python-3.x - Python初学者:如何更改先前定义的变量的定义?
- sql-server - ROW_NUMBER() 子查询的问题
- ios - 从我的应用程序播放音频时如何停止音乐应用程序的音频?
- json - 反序列化具有双引号字符串的 Json 对象
- php - 如何通过 PHP IMAP 从 Gmail 服务器读取电子邮件