前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法

这篇具有很好参考价值的文章主要介绍了前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,什么是Chrome浏览器的自动播放策略?(原理讲解,懂了原理解决问题就会非常简单)

1.生活场景中的案例

2.Chrome自动播放策略

3.什么是媒体参与度 

二: 案例演示(无法播放的情况)

1.使用autoplay属性

2.我们使用js来控制视频自动播放

3.这究竟是为什么

三.解决方案

1.引导用户进行交互

2.先静音播放,让用户自己控制声音


一,什么是Chrome浏览器的自动播放策略?(原理讲解,懂了原理解决问题就会非常简单)

1.生活场景中的案例

试问一下,如果你正在上班摸鱼准备刷抖音或者B站时,但是忘记了调小声音或是忘记了带耳机,突然的视频声音放出来会不会让你特别尴尬,旁边可都是人看着呢,而且你要是放了个正常的视频还好,不然的话,纯纯大社死有咩有。

所以呢,在2018年Chrome就提出了这种自动播放的策略,主要是为了照顾用户的体验感。

2.Chrome自动播放策略

  • 始终允许静音模式下自动播放

  • 在以下的情况中,带声音播放会被允许:

    ①用户已经与当前的域进行了交互(也就是click,tap事件)。

    ②在桌面设备上,用户的媒体参与度指数阈值已经超过,这意味着用户之前播放过有声视频。

    ③用户已经将网站添加到移动设备上的主屏幕或允在桌面上安装了PWA。

  • 顶部帧可以将自动播放权限委派给其iframe,来允许自动播放声音

3.什么是媒体参与度 

媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。Chrome基于这个媒体参与度有一套自己算法,我们可以通过:chrome://media-engagement/ 查看

二: 案例演示(无法播放的情况)

1.使用autoplay属性

就使用一个盒子里面放一个video标签并且加上autoplay属性

<div class="box">
    <video src="./img/_12084f25eab2e6978b505b0520b978b-1-64.MP4" autoplay></video>
  </div>

前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法

可以看到虽然我们设置了autoplay属性但是视频还是不能播放(如果你能播放,你可以试着刷新几次看看,他就不能自动播放了,具体原因暂且未知,总之我们必须要保证它每次都能按照我们的需求来才行)

这时我们可以看一下控制台有没有报错

前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法

 可以看到控制台是已经报错了,这个报错信息大概的意思就是用户没有与此视频进行第一次的交互,导致无法自动播放

前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法

 可以看到,有道翻译过来也是类似的意思

2.我们使用js来控制视频自动播放

js的代码也是非常简单的

  const video = document.querySelector('video')
  video.play()

但是play()方法并没有起到任何作用(如果自动播放可以多刷新几次,就可以发现这是不可控的)

3.这究竟是为什么

我们可以查看媒体参与度来看看:chrome://media-engagement/

前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法

 可以看到我当前的网页的得分(Score)是最低的,也就是这个原因,我们的Chrome浏览器不允许我们自动播放,可能有些人会想到静音播放,没错这是现代非常主流的一种解决方法,下面会讲解。

三.解决方案

1.引导用户进行交互

我们在理解了这个原理之后呢,就自然而然的能想到解决方法了,既然要用户与其交互,那我们就让他交互呗,我们可以设置一个按钮来控制他的播放。

  <div class="box">
    <video src="./img/_12084f25eab2e6978b505b0520b978b-1-64.MP4" autoplay></video>
    <div class="model">
      <button>开始播放</button>
    </div>
  </div>

我们可以写一个函数来控制此按钮

  const model = document.querySelector('.model')
  const btn = document.querySelector('button')
  // 第一种方法 引导用户去与页面交互实现播放
  async function play() {
    try {
      await video.play(); 
      //使用await的原因是因为video.play()方法返回的是一个Promise,所以在这里我们可以对他进行一些处理
      model.style.display = 'none';
      btn.removeEventListener('click', play);
      // 如果他自动播放了就隐藏按钮,消除点击事件
    } catch (err) {
      model.style.display = 'block';
      btn.addEventListener('click', play);
      // 如果Promise返回的是error就引导用户点击按钮,在调用play方法
    }
  }
  play();

代码中已经有了非常详细的注释,我也就不做过多的解释,主要思路就是引导用户进行交互,交互了之后在调用方法,肯定是可以实现播放的,通过前面的原理分析可以得知。

2.先静音播放,让用户自己控制声音

这个方法在现在的很多网页中都使用了,比如抖音,B站等。

也是一样写一个函数来控制

  //第二种方法比较主流,类似的有网页版抖音以及B站
  function play() {
    video.muted = true;//设置视频为静音
    video.play();//调用播放方法
    const ctx = new AudioContext();
    const canAutoPlay = ctx.state === 'running'; 
    //通过这个可以判断出视频能不能够自动播放 如果可以它的值就是“running” 否则为"suspended"
    // 如果是不能播放我们就执行下面的逻辑,其实就是类似于第一种方法,让用户与其交互
    ctx.close();
    if (canAutoPlay) {
      video.muted = false;
      model.style.display = 'none';
      btn.removeEventListener('click', play);
    }
    else {
      model.style.display = 'block';
      btn.addEventListener('click', play);
    }
  }
  play()

代码中也已经有了详细的注释,其实现思路也就是和之前进到的原理类似,既然可以静音播放,我们就先静音播放,而后引导用户来做交互

其实可以看到只要明白了原理,解决问题就会很简单

有什么问题可以私信或者留言

详细代码:文章来源地址https://www.toymoban.com/news/detail-488580.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 
    Chrome 浏览器的视频自动播放策略
    1.始终允许静音模式下自动播放
    2.在以下的情况中,带声音播放会被允许:
      ①用户已经与当前的域进行了交互(也就是click,tap事件)。
      ②在桌面设备上,用户的媒体参与度指数阈值已经超过,这意味着用户之前播放过有声视频。
      ③用户已经将网站添加到移动设备上的主屏幕或允在桌面上安装了PWA。
    3.顶部帧可以将自动播放权限委派给其iframe,来允许自动播放声音
    
    媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。
    可以通过:chrome://media-engagement/ 查看
   -->
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    body {
      display: flex;
      justify-content: center;
    }

    video {
      width: 800px;
      height: 600px;
    }

    .box {
      position: relative;
    }

    .box button {
      width: 80px;
      height: 40px;
      position: absolute;
      top: 50%;
      left: 50%;
      border: none;
      background-color: rgb(61, 196, 230);
      transform: translate(-50%);
      color: #fff;
      border-radius: 10px;
    }

    .box button:hover {
      cursor: pointer;
    }
  </style>

</head>

<body>
  <div class="box">
    <video src="./img/_12084f25eab2e6978b505b0520b978b-1-64.MP4" autoplay></video>
    <div class="model">
      <button>开始播放</button>
    </div>
  </div>
</body>
<script>
  const video = document.querySelector('video')
  console.log(video.play());

  const model = document.querySelector('.model')
  const btn = document.querySelector('button')
  // 第一种方法 引导用户去与页面交互实现播放
  async function play() {
    try {
      await video.play();
      //使用await的原因是因为video.play()方法返回的是一个Promise,所以在这里我们可以对他进行一些处理
      model.style.display = 'none';
      btn.removeEventListener('click', play);
      // 如果他自动播放了就隐藏按钮,消除点击事件
    } catch (err) {
      model.style.display = 'block';
      btn.addEventListener('click', play);
      // 如果Promise返回的是error就引导用户点击按钮,在调用play方法
    }
  }
  play();

  //第二种方法比较主流,类似的有网页版抖音以及B站
  function play() {
    video.muted = true;//设置视频为静音
    video.play();//调用播放方法
    const ctx = new AudioContext();
    const canAutoPlay = ctx.state === 'running'; //通过这个可以判断出视频能不能够自动播放 如何可以它的值就是“running” 否则为"suspended"
    // 如果是不能播放我们就执行下面的逻辑,其实就是类似于第一种方法,让用户与其交互
    ctx.close();
    if (canAutoPlay) {
      video.muted = false;
      model.style.display = 'none';
      btn.removeEventListener('click', play);
    }
    else {
      model.style.display = 'block';
      btn.addEventListener('click', play);
    }
  }
  play()
</script>

</html>

到了这里,关于前端视频无法自动播放的问题,基于Chrome浏览器的自动播放策略原理,详细解释加了autoplay属性之后视频仍然不能自动播放的问题,并提供了二种主流的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • chrome和edge浏览器,实现视频不静音自动播放

    chrome a.先打开网站的设置 b.找到声音设置,将 自动(默认)修改为 允许,然后刷新原网页即可。 microsoft edeg a.和chorme一样的操作,先打开设置。 b.选择cookie和网站权限,找到媒体自动播放设置后进入。 c.设置为允许即可。当然如果你只想要某些网站允许自动播放,可以在下

    2024年02月12日
    浏览(72)
  • 浏览器自动播放音视频-前端实现方案

    目录 前言 浏览器自动播放策略 策略详情: 实现方案  方案1: 互动后播放 方案2: 互动后出声 总结 在开发中可能有遇到这样的需求,当用户打开页面后,需要自动播放视频或音频,按理说那就打开页面时play()一下不就搞定了吗,但实际情况很明显不是,不然也没得这篇文

    2024年02月04日
    浏览(44)
  • 微信浏览器无法自动播放视频几种解决方式

    公司页面设计打开页面需要播放一个过场的MP4视频,在电脑上手机上都没啥事但是在手机微信浏览器里面视频是无法自动播放的。 网上教你的方式无非就是 还有什么页面window.onload的时候利用setInterval延时一小段时间的 但是这基本都是无效的 因为 微信官方已经声明了 靠谱的

    2024年02月11日
    浏览(113)
  • 解决浏览器无法自动播放音频的问题

    项目场景:要求根据后台返回数据做一个语音提示功能 浏览器报Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first. 由于浏览器为了避免自动播放音频打扰用户,因此浏览器做出了限制,只有用户与浏览器交互,如点击事件等等,才会播放音频

    2024年02月12日
    浏览(36)
  • video标签设置了autoplay,自带音频的视频在谷歌浏览器仍无法自动播放

    原因分析:谷歌浏览器可以自动播放视频,不能自动播放音频。如果视频中自带音频就会导致该视频无法自动播放。 解决办法:在video标签加上静音属性muted,自带音频的视频就可以自动播放了,但是该视频无声音。 备注:1、这是谷歌浏览器自身的问题。2、Safari浏览器可正

    2024年02月12日
    浏览(38)
  • 【音视频笔记】Mediacodec+Muxer生成mp4,浏览器无法播放问题处理

    最近在测试视频录制功能时发现,AudioRecord + MediaCodec + MediaMuxer生成的MP4,PC浏览器无法播放 ,但是Android、Windows、Mac的播放器应用都能正常播放。虽然不禁想吐槽浏览器视频组件的容错性差,但我也意识生成的文件格式肯定也是有问题的。 然后尝试了合成MP4视频时,只保留视

    2024年02月07日
    浏览(43)
  • 解决苹果Safari 浏览器下html不能自动播放声音和视频的问题-实时语音通话功能【唯一客服】...

    在实现我的客服系统中,实时语音通话功能的时候,如果想自动播放音视频流,在苹果设备上遇到了问题。 苹果浏览器(Safari)在默认情况下不允许声音在背景里自动播放。这是出于用户体验和隐私方面的考虑,避免在用户没有意识到的情况下自动播放声音。 解决办法是 iOS

    2024年02月12日
    浏览(85)
  • 微信浏览器(公众号小程序),h5端,小程序 ,app端 解决video视频自动触发播放问题,

    最近一直在开发h5端 和公众号小程序,一般总会遇到video不能自动触发播放(由于不同浏览器限制)、 微信浏览器: 写一个方法: 2.在onload和change方法中执行:调用  不加延时器时器没有效果得,这样在微信公众号在微信浏览器中会实现自动播放 h5端 ,微信小程序 实现自动

    2024年02月05日
    浏览(37)
  • 浏览器不需要安装插件,前端播放在线视频方案,几款播放器介绍,hls协议下的h.265视频播放方案推荐

    一般我们播放本地视频都是使用 video标签,但是 video 元素只支持三种视频格式:MP4、WebM、Ogg ,对于在线视频直接使用video是没法播放的,这里介绍几款这两天我在做播放在线监控视频功能时使用过的几款播放器,初次接触流媒体踩了一堆坑,到目前为止对这部分内容都还了

    2024年02月08日
    浏览(40)
  • Chrome浏览器http自动跳https问题

    Chrome浏览器访问http页面时有时会自动跳转https,导致一些问题。比如: 开发阶段访问dev环境网址跳https,后端还是http,导致接口跨域。 先访问http网址,再改成https访问,下次再访问http时就会自动跳https。。。 谷歌在提高 Chrome 浏览器安全性方面迈出了重要一步:用户访问不

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包