在IE中加载webvtt轨道

时间:2015-08-07 08:45:35

标签: javascript html5-video metadata internet-explorer-11 webvtt

我正在加载一个webvtt文件。工作正常,但在IE11中没有提示。

            WEBVTT FILE

            00:00:01.000 --> 00:00:04.000
            Let's take a look at the 4th platform preview of IE10

            00:00:04.000 --> 00:00:06.000
            running on the Windows 8 Developer Preview

代码内部:

            var trackNode = jQuery("<track default>");
            // videoNode is just a <video> with <source> child
            videoNode.append(trackNode);
            trackNode.attr({
                label: "Captions",
                kind: "metadata",
                src: "localhost:1234/example&output=vtt"
            });
            trackNode.on("load", function() { // I have also tried using "loadedmetadata" instead of load, but nothing changed
                console.log(this.track.cues.length);
            });

在Chrome中我可以看到有2个提示,但在IE11中我看到0

即使在所有内容都已加载后我将其放入控制台:

            jQuery("track").track.cues.length

我仍然在IE中获得0,在Chrome中获得2

我错过了什么吗?

更新1:

在做了一些重构后,我在控制台中看到了这个错误: MEDIA12604:文本跟踪:未知的MIME类型。 HR = 8007000b。

然后我发现这篇文章: HTTP subtitles in WinJS video element

我认为这可能是服务器问题。

更新2:

MEDIA12604:文字追踪:未知的MIME类型。 HR = 8007000b。已排序,但轨迹提示仍未在IE中加载

3 个答案:

答案 0 :(得分:6)

在IE11中,您需要在服务器上定义WebVTT的MIME类型。那将是text / vtt。请注意,IE仍然不支持:: cue或position markups等WebVTT功能。像JW Player这样的第三方玩家在不同程度上支持他们。

答案 1 :(得分:1)

这个问题已经有了一个可以接受的答案,但是我希望可以节省下一位开发人员。

我发现 IE10和IE11不支持为<track>加载跨域VTT文件,即使启用了CORS(Access-Control-Allow-Origin: *响应标头)也是如此。为了增加IE对字幕的支持,我不得不使用下面的脚本。

此脚本通过AJAX下载每个VTT文件,创建一个blob URL,并将每个<track> src替换为其各自的Blob URL。这只能在IE中运行。

window.addEventListener("load", function() {
  if (window.navigator.userAgent.indexOf("MSIE ") < 0 && window.navigator.userAgent.indexOf("Trident/") < 0) {
    // Not IE, do nothing.
    return;
  }

  var tracks = document.querySelectorAll("track")

  for (var i = 0; i < tracks.length; i++) {
    loadTrackWithAjax(tracks[i]);
  }
});

function loadTrackWithAjax(track) {
  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200 && this.responseText) {
      // If VTT fetch succeeded, replace the src with a BLOB URL.
      var blob = new Blob([this.responseText], { type: 'text/vtt' });
      track.setAttribute("src", URL.createObjectURL(blob));
    }
  };
  xhttp.open("GET", track.src, true);
  xhttp.send();
}
<video controls preload width="600" height="337.5" autoplay crossorigin="anonymous">
      <source src="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4" type="video/mp4"></source>
      <track kind="captions" label="English" srclang="en" src="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt" default>
</video>

答案 2 :(得分:0)

想在这里补充一点,解决IE11中的MIME类型问题后,我仍然收到错误代码:MEDIA12608: Timestamp should be '-->'. hr=80004004。解决方法是删除时间戳中的千位数。例如,将00:00:00.000 --> 00:01:10.000更改为00:00:00.00 --> 00:01:10.00