问题描述
<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),尺寸正确,但音频控件永远无法播放。我想念什么?
解决方法
给出https://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>
,
只需设置演播室本身的src,可能是加载问题
为什么不是myAudioSource.load()?