Browser VideoJS根据浏览器选择源

Browser VideoJS根据浏览器选择源,browser,video.js,http-live-streaming,drm,mpeg-dash,Browser,Video.js,Http Live Streaming,Drm,Mpeg Dash,我有一条短跑和一条HLS小溪。我可以在safari chrome和edge上分别播放它们。但是,我希望创建一个播放器并检测浏览器,以便将正确的配置作为源传递给播放器 我试过下面的方法 myPlayer.src([ { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" }, { type: "video/webm", src: "http://www.example.com/path/to/video.we

我有一条短跑和一条HLS小溪。我可以在safari chrome和edge上分别播放它们。但是,我希望创建一个播放器并检测浏览器,以便将正确的配置作为源传递给播放器

我试过下面的方法

myPlayer.src([
  { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
  { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
  { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
]);

但是,它只播放第一个,如果第一个是dash流,并且您在safari中打开它,则会给出一个错误。以上只是一个例子,我的资料来源有DRM信息和很多选项。你能帮我举个例子吗。

DRM和打包或流协议之间的交互有点复杂

HLS和DASH是自适应比特率流协议。服务器创建视频的多个分段比特率版本,这允许客户端设备或播放器以块(例如10秒块)的形式下载视频,并从最适合当前网络条件的比特率中选择下一个块。请参见此答案中的更多信息:

有一个索引或清单文件,它只是一个文本/XML文件,列出了不同的视频、音频、字幕等流,并证明了它们的URL。这是.mpd或.m3u8文件

大多数浏览器此时不直接支持这些HLS和DASH“清单”文件(Safari例外支持HLS)。你需要使用HTML5播放器,比如video.js、Shaka、BitMovin等

DRM允许对内容进行加密,并在服务器和客户端之间安全地共享内容的密钥

一般来说,以下DRM在设备和浏览器上本机支持-天真地说,DRM通常在购买设备时内置在操作系统或浏览器中:

  • 安卓设备-Widevine
  • PC或MAC上的Chrome浏览器-Widevine
  • FireFox-Widevine
  • iOS设备-公平竞争
  • Safari浏览器-公平竞争
  • Internet Explorer浏览器-PlayReady

DRM和包装之间的交互变得有点复杂——MPEG-DASH(通常简称DASH)将成为行业标准,谷歌和MS似乎都支持它,但苹果设备仍然支持HLS

DASH支持CENC,它允许单个流支持多种DRM类型。HLS通常与FairPlay一起使用,尽管它也可以支持其他方案

因此,需要注意的是,这不是绝对的,并且可以找到其他示例,此时服务到达所有设备的典型情况是:

  • MPEG-DASH-具有Widevine和PlayReady DRM的单流
  • 具有公平竞争DRM的HLS
从上面可以看出,像video.js等HTML5播放器必须检查他们正在运行的浏览器和可用的流类型,才能做出最佳流选择

回到您的问题,您可以在video.js配置中指定HLS和DASH流,而不是像上面的代码摘录中那样指定mp4、web等。这将看起来像:

var player=videojs('some-video-id');
player.src({
src:'https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8',
类型:“应用程序/x-mpegURL”,
证书:正确
});

此示例来自,它现在是标准video.js构建的一部分。文档和示例非常繁重,但它也可以与DASH一起使用。

我也有同样的问题。我正在使用VideoJs浏览器模块()检查浏览器并使用适当的源代码。该模块具有不同的功能,您可能需要根据需要选择不同的功能

我的实现是这样的:

if (videojs.browser.IS_ANY_SAFARI) 
    player.src({src: <HLS source>, type: 'application/x-mpegURL'})
else
    player.src({src: <Dash source>, type: 'application/dash+xml'})
if(videojs.browser.isanysafari)
src({src:,类型:'application/x-mpegURL'})
其他的
src({src:,类型:'application/dash+xml'})

此线程有用吗?谢谢,它起作用了,但我认为上面的例子可能有类似的解决方案。我可以让playready和widebine像上面的例子一样工作,但它不适用于playready widebine和fairplay。