播放 video.js ustream m3u8 文件流

Posted

技术标签:

【中文标题】播放 video.js ustream m3u8 文件流【英文标题】:Playing with video.js ustream m3u8 file streaming 【发布时间】:2015-06-03 18:20:55 【问题描述】:

我尝试在网页中播放带有video.js的m3u8文件流,但是我做不到,我不知道错误在哪里

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Video</title>

  <link href="http://vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
  <script src="http://vjs.zencdn.net/4.12/video.js"></script>
 <script src="https://github.com/videojs/videojs-contrib-media-sources/releases/download/v0.1.0/videojs-media-sources.js"></script>
  <script src="https://github.com/videojs/videojs-contrib-hls/releases/download/v0.11.2/videojs.hls.min.js"></script>

</head>
<body>
  <h1>Video</h1>

  <video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto"   
  data-setup=''>
    <source src="http://iphone-streaming.ustream.tv/uhls/3064708/streams/live/iphone/playlist.m3u8" type='video/mp4'>
  </video>

  <script>
  </script>

</body>
</html>

【问题讨论】:

【参考方案1】:

你需要type='application/x-mpegURL',而不是type='video/mp4'

还要检查是否允许跨域请求 (CORS)。

托管注意事项

与原生 HLS 实现不同,HLS 技术必须遵守 浏览器的安全策略。这意味着所有的文件 组成流必须从与页面相同的域提供 托管视频播放器或来自具有适当 CORS 的服务器 头配置。简单的说明可用于流行 网络服务器和大多数 CDN 应该可以轻松打开 CORS 您的帐户。

来源:https://github.com/videojs/videojs-contrib-hls

CORS 方法:http://enable-cors.org/server.html

【讨论】:

我也放置了 type='application/x-mpegURL 但不起作用。如何检查是否允许跨域?我认为跨域仅适用于 Flash 播放器 ....也适用于 html 播放器? video.js 提供 Flash 后备 (video-js.swf),因此您可能需要在服务器上添加 crossdomain.xml。控制台有错误吗? 我正在尝试 jsfiddle 我已经添加了一些我在这个例子中找到的库:github.com/videojs/videojs-contrib-hls/blob/master/example.html 这是我的演示:jsfiddle.net/066hfjge/5 我用我自己的流尝试了你的原始代码,它工作正常。使用 ustream.tv 源会导致 CORS 错误 (Access-Control-Allow-Origin)。我会用说明更新答案。 啊好的,但我无法访问 ustream 服务器,我必须在其中插入 Header set Access-Control-Allow-Origin "*" 因此是不可能的 .... 使用 ustream【参考方案2】:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Video</title>

  <link href="http://vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
  <script src="http://vjs.zencdn.net/4.12/video.js"></script>
 <script src="https://github.com/videojs/videojs-contrib-media-sources/releases/download/v0.1.0/videojs-media-sources.js"></script>
  <script src="https://github.com/videojs/videojs-contrib-hls/releases/download/v0.11.2/videojs.hls.min.js"></script>

</head>
<body>
  <h1>Video</h1>

  <video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto"   
  data-setup=''>
    <source src="http://iphone-streaming.ustream.tv/uhls/3064708/streams/live/iphone/playlist.m3u8" type='application/x-mpegURL'>
  </video>

  <script>
  var player = videojs('my_video_1');
  </script>

</body>
</html>

<!-- Replace current .m3u8 and check..current file has access issue-->

【讨论】:

能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述? Videojs 播放器需要初始化...因此我在 body 标签中添加了脚本的最后一段 谢谢哥们。这真的很有帮助:) 你能告诉我,这有什么问题吗? ***.com/questions/45924975/…【参考方案3】:

我找到了两个最强大的视频 js hls 库

1.videojs-http-streaming

这个库是从videojs-contrib-hls根据以下描述生成的

注意:这个项目将被弃用,由 videojs-http-streaming 继承。 VHS 支持 HLS 和 DASH 并内置在 video.js 7 中,请参阅 video.js 7 博客文章

videojs-http-streaming库的简短描述如下

使用 video.js 播放 HLS、DASH 和未来的 HTTP 流式传输协议,即使它们本身不受支持。 默认包含在 video.js 7 中!

Github 链接:https://github.com/yanwsh/videojs-panorama

2.videojs-hlsjs-plugin

这个库的简短描述如下

使用 hls.js 库向 video.js 5.0+ 添加 HLS 播放支持。

hls.js 库中使用该库的优势

videojs-hlsjs-plugin github 链接:https://github.com/streamroot/videojs-hlsjs-plugin

hls.js github 链接:https://github.com/video-dev/hls.js/

结论

我使用了这两个库中的项目,我使用它们的经验是 videojs-hlsjs-plugin 库是由于使用强大的 hls.js 库对于大型项目来说是一个很好的选择。

【讨论】:

以上是关于播放 video.js ustream m3u8 文件流的主要内容,如果未能解决你的问题,请参考以下文章

vue使用video.js解决m3u8视频播放格式

使用 Video JS 播放 M3U8 或 TS 直播

React video.js实现m3u8格式视频播放及实时切换

vue.js+video.js+videojs-contrib-hls支持PC端播放m3u8格式的视频

html页面引用video.js播放m3u8格式视频

React 基于antd+video.js实现m3u8格式视频播放及实时切换