浏览器自动播放音视频-前端实现方案

这篇具有很好参考价值的文章主要介绍了浏览器自动播放音视频-前端实现方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

浏览器自动播放策略

策略详情:

实现方案 

方案1: 互动后播放

方案2: 互动后出声

总结


前言

在开发中可能有遇到这样的需求,当用户打开页面后,需要自动播放视频或音频,按理说那就打开页面时play()一下不就搞定了吗,但实际情况很明显不是,不然也没得这篇文章喽,要实现这个需求,我们得先了解一下浏览器自动播放策略。再给出相应解决方案。

浏览器自动播放策略

Chrome浏览器的自动播放策略自Chrome66起生效,动机是改善用户体验

策略详情:

Chrome 的自动播放政策很简单:

  1. 始终允许静音自动播放。
  2. 在以下情况下,带声音的自动播放会被允许:
    1. 用户已经与当前域进行了交互(click、tap)
    2. 在桌面设备上,用户的==媒体参与度==指数阈值已超过,这意味着用户之前播放过有声视频。
    3. 用户已将网站添加到移动设备上的主屏幕或在桌面上安装了 PWA。
  3. 顶部帧可以将自动播放权限委派给其 iframe,以允许自动播放声音。

==媒体参与度(MEI, Media Engagement Index)==

媒体参与度 (MEI) 是衡量个人在网站上使用多媒体的倾向。

它是一个数字,可通过 chrome://media-engagement/ 查看。

数值越高,用户对该站点的媒体参与度越高,就越有机会自动播放。

但对于开发者而言:

        媒体参与度的计算规则无法通过技术手段更改

        媒体参与度的计算规则不同版本的浏览器可能会有变动

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

 

实现方案

首先呢,我们直接在用户进入页面的时候play(),可以发现视频并没有播放,并且报错Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="./index.css" />
  </head>
  <body>
    <div class="vdo-container">
      <video src="./test.mp4"></video>
    </div>
    <script>
      const vdo = document.querySelector('video');
      vdo.play();
    </script>
  </body>
</html>

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

这个错误的意思是浏览器已经尝试在没有用户交互的情况下播放媒体文件,但是因为这是不允许的,所以浏览器拒绝了该操作。如果没有这个保护机制,那么网站可以在用户不知情的情况下播放音频和视频,这是不安全和不负责任的行为。 

 

方案1: 互动后播放

先尝试自动播放,若发生异常,则引导用户进行互动操作,然后再进行播放

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>互动后播放</title>
    <link rel="stylesheet" href="./index.css" />
  </head>
  <body>
    <div class="vdo-container">
      <video src="./test.mp4"></video>
      <div class="modal">
        <button class="btn">开始播放</button>
      </div>
    </div>

    <script>
      const vdo = document.querySelector('video');
      const modal = document.querySelector('.modal');
      const btn = document.querySelector('.btn');
      async function play() {
        try {
          await vdo.play();
          modal.style.display = 'none';
          btn.removeEventListener('click', play);
        } catch (err) {
          modal.style.display = 'flex';
          btn.addEventListener('click', play);
        }
      }
      play();
    </script>
  </body>
</html>

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

 进入页面后发现不能自动播放,这时显示开始播放按钮,用户点击后开始播放。

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

方案2: 互动后出声

先静音播放,然后根据是否能自动播放决定是否取消静音,如果:

  1. 能自动播放,取消静音
  2. 不能自动播放,引导用户进行互动操作后取消静音
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>互动后取消静音</title>
    <link rel="stylesheet" href="./index.css" />
  </head>
  <body>
    <div class="vdo-container">
      <video src="./test.mp4"></video>
      <div class="modal">
        <button class="btn">打开声音</button>
      </div>
    </div>

    <script>
      const vdo = document.querySelector('video');
      const modal = document.querySelector('.modal');
      const btn = document.querySelector('.btn');
      function play() {
        vdo.muted = true; // 静音
        vdo.play();
        const ctx = new AudioContext();
        const canAutoPlay = ctx.state === 'running';
        ctx.close();
        if (canAutoPlay) {
          vdo.muted = false;
          modal.style.display = 'none';
          btn.removeEventListener('click', play);
        } else {
          modal.style.display = 'flex';
          btn.addEventListener('click', play);
        }
      }
      play();
    </script>
  </body>
</html>

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

进入页面后静音播放视频,然后判断是否允许自动播放,如果允许,则取消静音,但我们这里不允许,所以显示打开声音按钮。 

浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css

引用的index.css文件内容如下:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.vdo-container {
  width: 50%;
  margin: 1em auto;
  position: relative;
}
video {
  display: block;
  width: 100%;
}
.modal {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  display: none;
}
.btn {
  border: none;
  outline: none;
  background: #409eff;
  color: #fff;
  display: inline-block;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  text-align: center;
  transition: 0.1s;
  font-weight: 500;
  user-select: none;
  padding: 12px 20px;
  font-size: 14px;
  border-radius: 4px;
}
.btn:hover {
  background: #66b1ff;
}
.btn:active {
  background: #3a8ee6;
}
.btn:disabled {
  background: #66b1ff80;
  cursor: not-allowed;
}

 

 

总结

如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步,有兴趣的伙伴可以关注订阅一下:点击查看更多实用技巧及技术

 浏览器自动播放声音,前端基础,音视频,前端,javascript,node.js,html,css文章来源地址https://www.toymoban.com/news/detail-759757.html

到了这里,关于浏览器自动播放音视频-前端实现方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JavaScript音视频,使用JavaScript如何在浏览器录制电脑摄像头画面为MP4视频文件并下载视频文件到本地

    本章介绍使用JavaScript如何在浏览器录制电脑摄像头画面为MP4视频文件并下载视频文件到本地。 1、使用navigator.mediaDevices.getUserMedia获取摄像头画面 2、将获取到的摄像头画面渲染到canvas画板上 3、将canvas转换为blob对象 4、通过document.createElement(‘a’)调用 href 方法获取此链接并触

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

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

    2024年02月11日
    浏览(158)
  • chrome和edge浏览器,实现视频不静音自动播放

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

    2024年02月12日
    浏览(109)
  • 谷歌chrome浏览器无法自动播放video标签视频的问题

    问题根源详见: Chrome中的自动播放政策  https://developer.chrome.com/blog/autoplay/  The Autoplay Policy launched in Chrome 66 for audio and video elements and is effectively blocking roughly half of unwanted media autoplays in Chrome. For the Web Audio API, the autoplay policy launched in Chrome 71. This affects web games, some WebRTC appli

    2024年02月11日
    浏览(98)
  • uniapp中运行至微信浏览器(客户端)视频自动播放

    属性解释 v-if=\\\"isShow\\\" :用于根据 isShow 的值来判断是否显示该视频标签。如果 isShow 的值为 true ,则显示视频。 :id=\\\"list._id+\\\'_\\\'+index\\\" :为视频元素设置一个唯一的 id ,通常是使用 _id (可能是视频的唯一标识符)与 index (循环索引)的组合。 ref=\\\"videoPlayer\\\" :为视频元素设置一

    2024年02月13日
    浏览(47)
  • 前端学习之音视频及其谷歌浏览器无法自动播放的解决方法(3)

    目录 一、音视频的应用:  二、谷歌浏览器音视频无法播放的解决方法 方法1:在代码中敲入下图中的js代码 方法2:网站设置 在vscode中敲入  打开浏览器,音视频自动播放。 方法1:在代码中敲入下图中的js代码 给音频设置一个id,用方法实现自动播放:  点击一下页面音频

    2024年02月03日
    浏览(58)
  • 解决谷歌浏览器无法自动播放HTML文件的声音和视频问题的方法

    首先,先检测一下浏览器是否能支持自动播放,点击下方链接进行检测: https://video-dev.github.io/can-autoplay/ 本人检测的谷歌浏览器结果是: 结果显示,谷歌浏览器不能支持有声自动播放视频和音频,包括内联的视频,但静音的视频是支持支持自动播放的,但静音的音频功能依

    2024年02月01日
    浏览(49)
  • vue中使用video插件在微信浏览器中视频无法自动播放的问题

    测试机:安卓华为p30,ios暂未测试,不过看网上说的ios比较好设置,以下代码也设置了兼容 js 是的,你没看错,就是这么简单,并没有网上那么复杂的获取什么什么的,因为我都试过坑了,到最后发现直接在created中就能解决问题

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

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

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

    目录 一,什么是Chrome浏览器的自动播放策略?(原理讲解,懂了原理解决问题就会非常简单) 1.生活场景中的案例 2.Chrome自动播放策略 3.什么是媒体参与度  二: 案例演示(无法播放的情况) 1.使用autoplay属性 2.我们使用js来控制视频自动播放 3.这究竟是为什么 三.解决方案

    2024年02月09日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包