如何以编程方式向 HTML5 音频标签添加多个源?

IT技术 javascript html html5-audio
2021-02-24 01:49:23

许多示例演示了嵌套在音频标签中的多个源标签,作为克服不同浏览器之间编解码器兼容性的一种方法。像这样的东西——

<audio controls="controls">
  <source src="song.ogg" type="audio/ogg" />
  <source src="song.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

使用 JavaScript 时,我也可以创建这样的音频元素 -

var new_audio = document.createElement("audio");

我可以在哪里通过.src属性设置其来源-new_audio.src="....";

我没有找到如何通过 JavaScript 在音频元素中添加多个源,类似于 HTML 片段中显示的源标记。

我是否操作new_audio并在其中添加<source...标签,就像操作任何其他 DOM 元素一样?我现在正在这样做并且它有效,这是-

new_audio.innerHTML = "<source src='audio/song.ogg' type='audio/ogg' />";
new_audio.play();

我想知道是否有更合适的方法来做到这一点?

2个回答

当您只能检测支持的类型时,为什么要使用 JavaScript 添加多个文件?我建议改为检测最佳类型,然后只设置src.

var source= document.createElement('source');
if (audio.canPlayType('audio/mpeg;')) {
    source.type= 'audio/mpeg';
    source.src= 'audio/song.mp3';
} else {
    source.type= 'audio/ogg';
    source.src= 'audio/song.ogg';
}
audio.appendChild(source);

添加与文件类型一样多的检查。

我试着做 <audio src="dropbox/link/ahc.mp3"> 并且它确实有效......知道为什么吗?
2021-04-23 01:49:23
只是我注意到了 - 您可能不想在条件中使用 var 关键字。您正在创建一个新的 new_audio 变量,而不是引用现有变量。
2021-04-29 01:49:23
没什么大不了的... +1 因为我发现它无论如何都很有用。
2021-04-30 01:49:23
我让用户在类属性本身内推送一个替代格式列表,制作一个简单易用的插件来帮助他们创建音频悬停。所以我不知道最终用户提供了什么类型。感谢 canPlayType 提示,会很有用。
2021-05-05 01:49:23
@AndyWest 是的,它还缺少一个括号 - 非常糟糕的代码:)
2021-05-16 01:49:23

您可以使用与任何其他元素相同的 DOM 方法:

var source= document.createElement('source');
source.type= 'audio/ogg';
source.src= 'audio/song.ogg';
audio.appendChild(source);
source= document.createElement('source');
source.type= 'audio/mpeg';
source.src= 'audio/song.mp3';
audio.appendChild(source);