MediaSource.isTypeSupported()
MediaSource.isTypeSupported()
静态方法返回一个布尔值,如果给定的 MIME 类型和(可选的)编解码器可能被当前的用户代理支持,则返回 true
。
也就是说,它可以成功地为该媒体类型创建一个 SourceBuffer
对象。如果返回值是 false
,则用户代理确定它不支持指定的媒体格式。
语法
js
isTypeSupported(type)
参数
返回值
如果给定的媒体类型将不能播放,则返回 false
。
如果浏览器或许可以播放给定的媒体类型,则返回 true
。这不能得到保证,所以你必须为你的代码做好可能无法正常播放媒体的准备。
在确定是否可以使用媒体类型时,所有处理媒体文件的 Web API 都使用“否/可能/或许”方法(或者,在这种情况下,“否或可能”)。这是因为媒体文件是复杂的,它具有太多微妙变化的复杂结构,在你实际使用这个媒体内容之前将无法确定任何事情。
示例
以下片段基于 Nick Desaulniers 编写的一个简单示例(查看完整的在线演示,或者下载源代码进行进一步研究)。
js
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
let mediaSource = new MediaSource();
//console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener("sourceopen", sourceOpen);
} else {
console.error("Unsupported MIME type or codec: ", mimeCodec);
}
function sourceOpen() {
//console.log(this.readyState); // open
let mediaSource = this;
let sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, function (buf) {
sourceBuffer.addEventListener("updateend", () => {
mediaSource.endOfStream();
video.play();
//console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
}
规范
Specification |
---|
Media Source Extensions™ # dom-mediasource-istypesupported |
浏览器兼容性
BCD tables only load in the browser