Video.js 指南

这些指南涵盖了 Video.js 用户的各种主题

故障排除

媒体格式问题

选择视频格式

我只想使用单一源,不考虑直播/自适应流

大多数浏览器现在都支持播放带h264的MP4视频。如果您想使用单一源,并且不考虑直播或自适应流,那么带 h264 视频和 acc 音频的 MP4 是一个不错的选择。

最常见的不支持 MP4 的浏览器在 Linux 上,用户可能需要安装额外的编解码器支持,在某些情况下他们也不愿安装。您可以提供备用源数组。webm 和/或 ogv 可用作备选方案,但它们都不被所有支持 MP4 的浏览器所支持。

我需要自适应流或直播

Video.js 7+ 版本支持 HLS 和 MPEG-DASH 作为标准功能,因为它包含了 http-streaming,后者使用 媒体源扩展 在现代浏览器中播放这些格式。如果选择单一格式,HLS 更方便,因为 iOS 和一些不支持 MSE 的 Android 浏览器 natively 支持 HLS。

在不支持 MSE 的 Windows 7 上的 IE 11 中,HLS 是不可用的。

对于较旧的 Video.js 版本,http-streaming 或其前身 videojs-contrib-hlsvideojs-contrib-dash 提供了类似的支持,但为获得最佳效果,请使用最新版本的 Video.js。

确保您使用的格式是Video.js可播放的

  • 您的浏览器/操作系统是否支持您尝试播放的媒体类型?
  • 您是否有 Video.js 插件可以为 Video.js 添加媒体格式支持?例如 videojs-youtube
  • 请验证您为视频使用了正确的 MIME 类型/内容类型。这用于确定 Video.js 是否可以播放特定类型的媒体。

确保文件容器中使用的编解码器受支持

  • MP4 格式可以包含多种编解码器的视频和音频数据,但浏览器中的 MP4 播放通常只支持 h264 视频和 MP3 或 AAC 音频。
  • 文件扩展名并不总是反映文件内容。例如,一些低端手机以 3GP 格式保存视频,但却赋予其 MP4 扩展名。这些文件将无法播放。

如果您正在使用Flash视频

托管媒体时的问题

  • 您的服务器必须正确支持字节范围请求,因为 Chrome 和 Safari 依赖它们。
    • 大多数服务器默认支持此功能。
    • 如果您通过服务器端脚本 (PHP) 代理媒体文件,该脚本必须实现范围支持。PHP 默认不这样做。
    • 不这样做可能导致的问题包括:进度条拖动失效,甚至完全无法播放 (在 iOS 上)。
  • 您的服务器必须为发送的媒体返回正确的 MIME 类型/内容类型 标头。
  • 如果满足以下条件,您的服务器必须实现 CORS(跨域资源) 标头:
    • 您正在使用 HLS 或 MPEG-DASH 等格式,并且您的媒体与您的页面来自不同的域。
    • 您正在使用 文本轨道(字幕、旁白等),并且它们与您的页面来自不同的域。

全屏问题

  • 如果您的播放器位于 iframe 中,那么该 iframe 以及任何父级 iframe 必须具有以下属性才能允许全屏:
    • allowfullscreen
    • webkitallowfullscreen
    • mozallowfullscreen

播放问题

  • 请确保媒体主机支持字节范围请求,这可能会导致播放中断。请参阅托管媒体时的问题以获取更多信息。
  • 如果您的媒体需要很长时间才能开始播放,或者在播放之前需要下载整个媒体
    • 很可能是媒体的元数据没有包含在媒体的开头。在 MP4 术语中,这被称为“moov atom”。许多编码器默认配置为这样做,而其他编码器可能需要您选择“快速启动”或“优化流媒体”选项。

Video.js错误

vdata123456错误

当与某个组件关联的元素从 DOM 中移除,但与该元素关联的事件处理程序未被移除时,就会抛出此错误。这几乎总是由于在组件上调用 dispose 时未清理事件监听器导致的。

要解决此问题,请确保在 dispose 时清理所有事件监听器。

Uncaught ReferenceError: X 未定义

此类错误(其中 X 会有所不同)可能是由于转译破坏了 Web Worker 中使用的代码造成的。有关如何防止此问题的详细信息,请参阅webpack 指南