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

use*_*116 7 video html5-video video.js

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

Mic*_*ick 12

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

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

这些术语可能有点令人困惑,并且这些术语的使用通常不准确,但简单的概述是:

  • “原始”视频 - 这是未压缩的帧
  • 编码视频 - 通常由编解码器压缩。egh264、h.265、AV1 等
  • 容器(例如FLV、MP4)-容器可以包括一个或多个“轨道”编码的视频、音频、字幕以及包括加密信息的元数据。
  • 分段容器(例如分段 MP4)- 这允许将视频容器分成片段或块以支持流媒体,特别是 ABR(见下文)
  • 流协议,包括视频的索引和片段或片段(例如 HLS、DASH、平滑流)

流协议促进自适应比特率流(ABR),简单来说,这意味着您提供视频的多个不同比特率版本,并且客户端设备或播放器可以分块(例如 10 秒块)下载视频,并从中选择下一个块最适合设备和当前网络条件的比特率。另请参阅此答案中的更多信息:https ://stackoverflow.com/a/42365034/334402

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

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