iPhone上的HTML5视频自动播放

164

我有一个奇怪的问题。我正在尝试创建一个循环播放背景视频的网站。代码如下:

<video src="video/bg.mp4" style="z-index: -1;object-fit: cover;" poster="video/bg.jpg" autobuffer autoplay loop muted></video>

该代码在大多数浏览器上运行良好(IE对此object-fit有些困难,但我不介意),但在iPhone上视频无法自动播放,而在iPad上可以。我已经阅读了iOS的新政策并且认为我符合要求(否则iPad无法自动播放)。 我进行了一些其他测试:

  • 删除覆盖的div无法解决问题
  • 删除z-index无法解决问题
  • WiFi或蜂窝网络没有区别
  • 视频文件大小也没有关系

我是做错了什么还是iPhone根本无法自动播放视频并始终需要交互?我只关心iOS 10,我知道iOS 9的要求是不同的。


你可能会在这里找到一些帮助:http://stackoverflow.com/questions/41360490/how-to-make-html-video-autoplay-on-phones-and-tablets/就我个人而言,即使遵循了所有的提示和苹果政策,我仍然无法让任何视频在iPhone上自动播放。 - Mark
我花了好几个小时才弄明白。为了节省其他人的时间,我在博客中总结了我的发现。希望能有所帮助。 https://medium.com/@BoltAssaults/autoplay-muted-html5-video-safari-ios-10-in-react-673ae50ba1f5 - BoltCoder
重复:https://stackoverflow.com/questions/39259418/html5-video-autoplay-doesnt-work-on-iphone - chickens
7个回答

455

playsinline 属性有帮助吗?

这是我所拥有的内容:

<video autoplay loop muted playsinline class="video-background ">
  <source src="videos/intro-video3.mp4" type="video/mp4">
</video>

在这里查看关于playsinline的注释:https://webkit.org/blog/6784/new-video-policies-for-ios/


47
在 iPhone 上考虑到低功耗模式的问题,我使用 mutedplaysinline 结合起来使用,这对我有用。 - Ken
3
playsinline 解救了我们!!!谢谢你。 顺便说一下,新的浏览器政策要求如果你想自动播放视频,必须将其静音启动,否则你将无法这样做。 +1 给 @ken 例如在 Chrome 中: [https://developers.google.com/web/updates/2017/09/autoplay-policy-changes] - Nuno Prata
52
如果你正在使用React,请注意属性playsinline必须写成驼峰式命名:playsInline。否则它将无法正常工作。 - Quentin D
1
不要忘记在playsinline中添加muted属性。 仅使用playsinline属性无法正常工作,需要同时添加muted属性。 - stojkosd
1
在React或Gatsby中,您需要使用驼峰命名法同时包含“playsInline”和“autoPlay”。这是一个专业技巧,可以为您节省数小时的试错时间。 - B-Money
显示剩余2条评论

131

iOS 10及以上版本支持内联视频自动播放,但您需要关闭iPhone的“低电量模式”。


2
很好的提示,但我有一个关于这个问题的疑问,我提交了这个问题:https://dev59.com/hKvka4cB1Zd3GeqPtnhl - Mathieu
12
我刚花了大约一个小时来理解为什么我的视频没有自动播放。感谢您的帮助! - lior
2
谢谢你! - Nikita Rogatnev
9
值得一提的是,我们无法控制用户设备并关闭低电量模式。我们唯一能做的就是提示用户“关闭低电量模式”以获得更好的体验。 - Muhammad Osama
1
我也遇到了同样的问题,直到我看到了你的帖子才解决了。我已经在查看Safari 11和11.1的规格,以确定它们是否完全禁用了自动播放,但实际上只是低功耗模式...开发人员的生活可能很艰难。 :-) - haeki
这个“低功耗模式”让我免于因为自动播放不工作而发疯。 - undefined

13

以下是一个小技巧,可以克服网站视频自动播放遇到的所有问题:

  1. 检查视频是否正在播放。
  2. 在像身体点击或触摸这样的事件上触发视频播放。

注意:某些浏览器不允许视频自动播放,除非用户与设备进行交互。

因此,用于检查视频是否正在播放的脚本如下:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
get: function () {
    return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
}});

然后,您可以通过将事件侦听器附加到body来简单地自动播放视频:

$('body').on('click touchstart', function () {
        const videoElement = document.getElementById('home_video');
        if (videoElement.playing) {
            // video is already playing so do nothing
        }
        else {
            // video is not playing
            // so play video now
            videoElement.play();
        }
});
注意: autoplay 属性非常基础,需要添加到视频标签中而不是这些脚本。
您可以在此链接中查看带有代码的工作示例: 如何在设备处于低功耗模式/数据节省模式/ Safari浏览器问题时自动播放视频

2
但是它需要用户交互才能播放视频吗?由于我们的视频处于页面的阶段,我们需要确保即使用户处于低电量模式并且在与页面进行交互之前,视频也能够播放。因为一旦用户想要向下滚动,开始播放视频就毫无意义了。 - Tim Schmelter

4

我曾经遇到类似的问题,并尝试了多个解决方案。最终通过以下两点解决了问题。

  1. 使用 dangerouslySetInnerHtml 嵌入 <video> 代码。例如:
<div dangerouslySetInnerHTML={{ __html: `
    <video class="video-js" playsinline autoplay loop muted>
        <source src="../video_path.mp4" type="video/mp4"/>
    </video>`}}
/>
  1. 调整视频大小。我注意到我的iPhone无法自动播放超过3MB的视频。所以我使用了一个在线压缩工具(https://www.mp4compress.com/),将视频从4MB压缩到500KB以下。

此外,感谢@boltcoder提供的指南:在移动设备上(Safari / iOS 10+)使用React自动静音HTML5视频


了解尺寸要求是很好的。 - Shautieh

1
我遇到了同样的问题 - 在iOS上无法播放视频。我尝试了所有的代码选项“playsinline autoplay loop muted”。问题在于我收到的视频使用了错误的mp4编解码器。所以我们采用将视频上传到Vimeo并重新下载高清版本的方式来解决问题。现在这个视频可以在所有移动设备上播放。
你也可以尝试使用mpeg streamclip。这是VLC的截图 - 这些是正确的设置。希望有人不必花费两个小时搜索问题 - 节日快乐。 我们使用的编解码器

playsinline 对我有用。谢谢分享! - Brian Cannard

1

抱歉回复晚了,但今天我发现您需要关闭iPhone的电池节省功能才能使视频自动播放。


-1

这里有一个简单的解决方案,可以在IOS上自动播放视频,我已经尝试过,在IOS、Android上完美运行,并且在各种平台上的所有浏览器上也可以使用。

只需为视频使用(data-wf-ignore)和(data-object-fit)属性,对于源标签,请使用data-wf-ignore。

You can see the working example with code here at this Snippet:

<video id="myVideo" autoplay="" muted="" playsinline="" data-wf-ignore="true" data-object-fit="cover">
    <source src="https://www.w3schools.com/html/mov_bbb.mp4" data-wf-ignore="true" />
</video>


"data-wf-ignore" 不是标准属性 - 这是指什么? - addedlovely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接