媒体播放策略以及解决方法

195 阅读2分钟

媒体播放策略以及解决方法

网页加载完成后立即播放音频(或带有音频轨道的视频)可能会意外地打扰到用户。尽管自动播放媒体文件是一个很实用的功能,但是我们也应该谨慎地使用它,保证只有在它被需要的时候才使用。为了让用户拥有控制权,通常浏览器会提供各种方式禁用自动播放音频功能。

如果直接调用paly()方法会报一下错误!

image.png

解决方法

据新政策,媒体内容将在满足以下至少一个的条件下自动播放:

  • 音频被静音或其音量设置为 0
  • 用户和网页已有交互行为(包括点击、触摸、按下某个键等等)
  • 网站已被列入白名单;如果浏览器确定用户经常与媒体互动,这可能会自动发生,也可能通过首选项或其他用户界面功能手动发生(媒体参与度)
  • 自动播放策略应用到<iframe>或者其文档上

1.媒体参与度

媒体参与度一般受访问频率、停留时长等因素影响

  • 媒体参与度的计算规则无法通过技术手段更改
  • 媒体参与度的计算规则不同版本的浏览器可能会有改动
  • 查看浏览器的媒体参与度

image.png

2.实现方式

如果要媒体参与度低的话,又想自度播放那就需要满足静音播放,或者与页面进行交换其中一种。 但是要是想有一个好的交互体验默认自动静音播放,然后用户可以手动的打开声音、这样就满足了和页面交互的条件就可以播放声音了。

代码如下

      // 获取video元素
      const video = document.getElementById('video')
      const btn = document.getElementById('btn')
      // 如果video加载就会调用播放方法
      video.addEventListener('canplay', play)
      // 播放方法
      function play() {
        // 禁音
        video.muted = true
        // 音频上下文
        const act = new AudioContext()
        // 如果状态等于running这说明可以播放
        const isPlay = act.state === "running"
        act.close()
        if(isPlay){
           // 如果可以播放可以播放声音
          video.muted = false
          btn.style.display = 'none'
        } else {
          btn.style.display = 'inline-block'
          // 如果不可播放,等下次用户点击按钮重新调用play
          btn.addEventListener('click', play)
        }
        // 播放
        video.play()
      }