获取原生 html 视频以在 chrome 上自动播放

Get native html videos to autoplay on chrome

在我们的网站 coverr.co 中,我们提供免费的股票视频供任何商业用途。

Coverr 中最酷的功能之一是允许我们的用户将视频 运行 视为我们网站的背景视频。例如:https://coverr.co/videos/Beach

如果您使用 FF 或 Safari 访问此页面,视频将自动播放,没问题。然而,自 2018 年 4 月 Chrome's latest policy change 以来,Chrome 上的自动播放一直不稳定。

我们按照新规范的要求添加了 "autoplay" 和 "muted" 标志(尽管我们所有的视频片段都是无声的),但没有成功。它有时会播放,有时只是保持静止状态,直到用户主动开始播放。

有人可以帮我们解开这个谜团吗? 提前致谢!

找到问题了,跟我们用的angular2.

有关

显然 Angular 2 无法正确添加 muted 元标记。 完整答案 ,但基本上你需要使用 Angular 的 onloadedmetadata 属性:

onloadedmetadata="this.muted = true"

一般来说,它应该是这样的:

<video onloadedmetadata="this.muted=true" autoplay>
  <source src="myVideo.mp4" type="video/mp4" />
</video>

重要评论:

我们还添加了 oncanplay="this.play()" 以提高播放稳定性。 所以将来我们可以处理 play() promise 并在自动播放被其他原因拒绝时显示播放按钮

补充重要评论:

根据 @VC.One 的问题,只是想澄清一下,有一种方法可以验证或至少得到播放通知(摘自我的文章问题):

var promise = document.querySelector('video').play();
if (promise !== undefined) {
  promise.then(_ => {
    // Autoplay started!
  }).catch(error => {
    // Autoplay was prevented.
    // Show a "Play" button so that user can start playback.
  });
}

但它不能确保视频 实际上 播放,因此即使一切正常,您也可能会收到错误消息。当然,添加播放按钮也可以,但它确实会影响我们正在尝试做的事情 "sting" - 在网站背景中自动播放静音视频。

基本上所有你需要它来正确注入自动播放和静音,显然在 Angular 2 这不是一个简单的任务......

(1) 无法重现您的问题(在 Chrome 版本 69.0.3497.100 上):

这会正确地自动播放和循环播放:

<!DOCTYPE html>
<html>
<body>

<video width="100%"  autoplay loop>
<source src="https://storage.googleapis.com/coverr-main/mp4/Beach.mp4" type="video/mp4">
</video>

</body>
</html>

(2) 您的 cover/poster 图片挡住了视频(可能在下面播放)。

尝试删除封面图片。您的冻结帧(未播放)实际上是海报图像。通过删除封面图像代码进行测试(例如: <div class="poster hidden"> 和相关)。

PS: 如果右击海报图片选择"show controls",显示的"play"按钮将开始播放。