Video.js无法播放M3U8 Blob URL

时间:2019-11-26 19:40:42

标签: blob video.js m3u8

我正在使用Videojs版本7.6.6。如果video是Blob URL,它将不会播放html5 src。但是,它将加载视频时间,但不会播放。我收到此警告,然后永久加载:

VIDEOJS: WARN: Problem encountered with the current HLS playlist. Trying again since it is the only playlist.

这是我的代码运行的方式:

<video id="my_video" class="video-js vjs-matrix vjs-default-skin vjs-big-play-centered" controls 
preload="none" width="640" height="268" data-setup="{}"></video>
<script type="text/javascript" src="/js/video-766.min.js"></script>
<script>
fetch("https://server/hls/index.m3u8").then(result => result.blob())
    .then(blob => {
      var blobURL = URL.createObjectURL(blob);
      var player = videojs("my_video");
      player.src({ src: blobURL, type: "application/x-mpegURL" });
    }
    );
</script>

如果我尝试使用不带斑点的方法,而只是使用index.m3u8文件的常规URL,那么它将起作用。因此,我认为这是创建Blob URL的问题。这样可以正常工作,视频开始播放:

<video id="my_video" class="video-js vjs-default-skin" height="360" width="640" controls preload="none">
 <source src="https://server/hls/index.m3u8" type="application/x-mpegURL" />
</video>
<script>
    var player = videojs('my_video');
</script>

我已经搜索了这个问题并找到了很多东西,但是没有一个对我有帮助。我创建Blob错了吗?

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,为 blob 生成的对象 URL 将以 file:// 协议开头。浏览器不允许您加载带有 file:// URL 的数据。我遇到了类似的问题,所以我在我的应用程序上创建了一个简单的服务器,它通过 https:// 返回请求的文件。

您的 index.m3u8 运行的原因,因为它是通过 https 协议提供的