【问题标题】:HTML5 Video muted but still playingHTML5 视频静音但仍在播放
【发布时间】:2013-01-01 16:05:37
【问题描述】:

标题几乎说明了一切。我有一个视频在到达页面时自动开始播放。

在 HTML 代码中,我设置了 muted="muted"。奇怪的部分来了。查看控件时,它显然已静音,但仍在播放音乐并且可以听到。即使当我查看 W3Schools 上的 HTML5 视频示例时,它也会在静音时播放音乐。

有什么办法,例如通过 jQuery 绕过这个?我在其中有一条 jQuery 行,将静音粘贴到视频中,但没有效果。

这里是使用的 HTML 代码:

<video id="video" width="640px" height="350px" autoplay="autoplay" loop="loop" controls="controls" muted="muted">
            <source src="intouchables.f4v" type="video/mp4">
            Your browser does not support the video tag.
        </video>

希望你能帮助我。 jQuery 行如下:

$("video").prop('静音', true);

提前致谢。

【问题讨论】:

    标签: html google-chrome video


    【解决方案1】:

    在 Angular 的情况下,可以尝试 [muted]="'muted'",它对我有用。

    <video id="video" style="width:100%; height:100%" autoplay [muted]="'muted'" loop>
      <source src="./../../assets/video/model-video.mp4" type="video/mp4">
    </video>
    

    【讨论】:

    • 你说得对,谢谢。我将 'muted' 替换为 true 作为值,muted 属性被命名为布尔属性。
    • 我不知道为什么这个版本突然解决了我的问题,但我在视频元素上有 src。由于我只有一个来源,我不认为它会有所作为,但它现在可以工作了。
    【解决方案2】:

    我不完全确定为什么 muted 属性在 video 标记中定义时出现故障。但是,这是您可以做的:

    首先,从视频标签中删除muted="muted" 属性。保持简单:

    <video id="video" width="640px" height="350px" autoplay="autoplay" loop="loop" controls="controls">
        <source src="intouchables.f4v" type="video/mp4">
        Your browser does not support the video tag.
    </video>
    

    现在,定义一个在加载页面时使视频静音的函数。

    window.onload = function () {
        var element = document.getElementById('video');
        element.muted = "muted";
    }
    

    我已经验证过了,它有效。

    【讨论】:

    • 你是我的英雄,我可以验证它是否有效。我会尝试报告错误。非常感谢!
    • 我建议使用element.muted = true;,因为这实际上是一个布尔属性 - developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
    • 解决“属性不存在”的问题,设置类型:var element = document.getElementById('video') as HTMLVideoElement;
    【解决方案3】:

    我的答案中没有真正的新答案 - 只是试图更新这个问题,并希望避免人们像我刚刚做的那样浪费一整天。

    据我所知(特别是因为这个问题太老了)muted 在视频被动态添加到页面时从未工作过。由于muted 不起作用,那么muted autoplay 也不起作用。

    我认为发生的情况是浏览器在页面加载时做出了某些决定,并且由于一些非常奇怪的原因,即使它具有 muted 属性,稍后添加到页面的视频也不会静音。我认为这是 Chrome 中的一个错误,在 Safari 中不会发生在我身上 - 但看起来我们现在被困住了。

    Google 的 blog entry on autoplay/mute 成立仅一年,提供以下见解:

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

    • 始终允许静音自动播放。
    • 在以下情况下允许自动播放声音:
      • 用户已与域进行了交互(单击、点击等)。
      • 在桌面上,用户的媒体参与指数阈值已超过,这意味着用户之前播放过视频 声音。
      • 在移动设备上,用户已将网站添加到他或她的主屏幕。
    • 顶级框架可以将自动播放权限委托给其 iframe 以允许自动播放声音。

    只缺少一件重要的事情!

    • “静音”HTML 属性仅当视频在初始加载时出现在 HTML 中时才会生效。这也适用于“自动播放静音”视频。

    那么这有什么影响:

    • 如果以编程方式播放没有声音的视频,则必须先将其静音。因此,如果将动态视频添加到页面,则必须在将其添加到 DOM 之后(或在播放之前)显式设置 video.muted = true
    • 如果您尝试以编程方式执行video.play()(例如,当有人向下滚动经过静音视频并且您希望它播放时),则必须先将视频静音。

    我在 Angular 中遇到了这个问题,并且花了太多时间假设它与我使用模板的事实有关,或者与 Angular 相关。

    我在 StackBlitz 上制作了一个测试应用。您需要取消注释 // video.muted = true 行才能使其正常工作。

    https://stackblitz.com/edit/angular-ze4t9y

    要实现的其他重要事项是:

    • 即使视频实际上没有声音,也必须将其静音。如果需要,请使用“bunny”视频进行测试。
    • 博客中概述的较新的“媒体参与”规则可能会在测试页面时让您感到困惑,因为您将与该页面进行交互。您必须做的是关闭浏览器,或以隐身模式打开一个新窗口 - 以重置此参与规则(请参阅博客条目)。

    如果您在用户没有首先“参与”页面的情况下尝试播放非静音视频,您将在浏览器中看到的错误如下所示。如果您在非静音视频中没有看到此消息,则可能是因为您与该页面进行了交互,Chrome 允许该视频播放。

    最后,如果您使用的是 Angular(所有内容都是动态添加的),则可以使用以下方法使视频静音:

     @ViewChild('bunnyVideo', { read: ElementRef }) bunnyVideo: ElementRef;
    

    那么当你想玩的时候:

     const video: HTMLVideoElement = this.bunnyVideo.nativeElement;
    
     // explicitly mute it...
     video.muted = true;
    
     // ...before attempting to play
     video.play().catch((err) => {
        alert('video error ' + err);
     });
    

    【讨论】:

    • 谢谢!对我来说就是这样:)
    • 我在 Angular 中遇到了同样的问题。你救了我一整天。非常感谢!
    • TLDR:将 video.muted = true 添加到 DOM 后立即设置
    【解决方案4】:

    这对我来说很好。

    <video oncanplay="this.muted=true" id="video" width="640px" height="350px" autoplay="autoplay" loop="loop" controls="controls">
                <source src="intouchables.f4v" type="video/mp4">
                Your browser does not support the video tag.
    </video>
    

    【讨论】:

      【解决方案5】:

      看起来这个静音在 chrome 64 中停止工作。在 63 中仍然有效。

      【讨论】:

      • 我还确认 muted 视频标签在 chrome 64 中已损坏。解决方法:如果将视频元素放置在页面初始加载时呈现的页面上,它似乎仍然有效。您还可以使用 JavaScript 直接对元素应用静音。见:stackoverflow.com/questions/48629652/…
      • 在 Chrome 65 中也不适合我。我目前的解决方法是&lt;video src="foo.mp4" autoplay oncanplay="this.muted=true"&gt;&lt;/video&gt;
      【解决方案6】:
      <video preload= "true" autoplay = "autoplay" loop = "loop" muted>
          <source src = "video/Real-Estate.mp4" type = "video/mp4">
      </video>
      

      【讨论】:

        【解决方案7】:

        要直接通过 HTML5 而不是 jQuery 静音,您也可以在视频标签中使用volume="0",即:

        <video preload="true" autoplay="" volume="0" poster="img/example.jpg">
        

        【讨论】:

          【解决方案8】:

          确保在制作视频时您的音频编解码器设置为 AAC。我在使用默认设置为 AC3 的 OpenShot 时遇到了同样的问题。

          【讨论】:

            【解决方案9】:

            html5 使用:

            <video controls loop muted height="" width=""  >
            
              <source src="" type="video/(put format here ex .mp4)" />
            <source src="" type="video/(put another format of same video here if there is one ex .wav)" />
            Your browser does not support the HTML5 element.
            </video>
            

            这是 w3c 的好去处。

            【讨论】:

              【解决方案10】:
              <video class="" autoplay loop [muted] = "'muted'">
                  <source src= "video url/video path" type = "video/mp4">
              </video>
              

              // 试试这个。它在我的设备上正常工作。当您的视频有声音时,浏览器(谷歌)会尝试阻止视频。所以视频不会自动播放。因此,请尝试将音频静音。只提到静音它对我不起作用。所以我尝试了绑定方法。现在它和我一起工作得很好。我建议尝试一次

              【讨论】:

                猜你喜欢
                • 2023-03-31
                • 2012-12-30
                • 1970-01-01
                • 1970-01-01
                • 2021-03-17
                • 1970-01-01
                • 2019-04-04
                • 1970-01-01
                • 2012-07-27
                相关资源
                最近更新 更多