Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当两个源都可用时,VideoJS如何确定何时使用HLS vs MP4视频?_Video_Html5 Video_Video.js - Fatal编程技术网

当两个源都可用时,VideoJS如何确定何时使用HLS vs MP4视频?

当两个源都可用时,VideoJS如何确定何时使用HLS vs MP4视频?,video,html5-video,video.js,Video,Html5 Video,Video.js,我有一个视频编码在MP4以及HLS(m3u8)格式。我希望VideoJS在桌面浏览器上使用MP4,而在设备上使用m3u8。最新版本的VideoJS支持这两种格式。我试图确定videojs是否能够自动确定使用哪个源。或者我的代码必须检测浏览器并将最佳源代码类型传递给videojs。MP4和HLS实际上是视频交付生态系统中不同类型的东西 MP4是一种容器格式,在单个文件中包含编码的视频、音频等曲目,HLS是一种流协议,它可以在类似MP4的容器中将视频从服务器流到客户端 术语可能有点混乱,术语通常使用

我有一个视频编码在MP4以及HLS(m3u8)格式。我希望VideoJS在桌面浏览器上使用MP4,而在设备上使用m3u8。最新版本的VideoJS支持这两种格式。我试图确定videojs是否能够自动确定使用哪个源。或者我的代码必须检测浏览器并将最佳源代码类型传递给videojs。

MP4和HLS实际上是视频交付生态系统中不同类型的东西

MP4是一种容器格式,在单个文件中包含编码的视频、音频等曲目,HLS是一种流协议,它可以在类似MP4的容器中将视频从服务器流到客户端

术语可能有点混乱,术语通常使用不准确,但简单概述如下:

  • “原始”视频-这是未压缩的帧
  • 编码视频-通常由编解码器压缩,。e、 g.h.264、h.265、AV1等
  • 容器(例如FLV、MP4)-容器可以包括一个或多个“曲目”编码的视频、音频、字幕以及包括加密信息的元数据
  • 碎片化容器(例如碎片化MP4)-这允许将视频容器拆分为段或块,以支持流媒体,尤其是ABR(见下文)
  • 流媒体协议,包括索引和视频片段(例如HLS、DASH、平滑流媒体)
流媒体协议促进了自适应比特率流媒体ABR,简单来说,这意味着您提供了视频的多个不同比特率版本,客户端设备或播放器可以分块下载视频,例如10秒的块,并从最适合设备和当前网络条件的比特率中选择下一个块。请参见此答案中的更多信息:

一般来说,ABR协议将提供更好的性能,因此您通常会选择一个,而不是在流式传输视频时逐步下载和播放MP4文件本身


您可能担心某些设备或浏览器不支持HLS。大多数设备和HTML5播放器现在可能会,但主要的视频流服务通常会为每个视频提供HLS和MPEG-DASH流,这将覆盖绝大多数设备

您不能同时向任何视频播放器提供这两个源,更不用说VideoJS了

这是一个或另一个

标记中的源代码应该是.mp4(已签名或直接向上)

或者它应该是一个.m3u8播放列表

您的bucket/文件夹中可能有这两个选项。但是您一次只能提供其中一个作为单个玩家的源