我花了很多时间试图弄清楚为什么视频会像这样嵌入:

<video height="256" loop autoplay muted controls id="vid">
         <source type="video/mp4" src="video_file.mp4"></source>
         <source type="video/ogg" src="video_file.ogg"></source>
</video>

一旦页面在FireFox中加载,就开始自动播放,但不能在基于Webkit的浏览器中自动播放。这只发生在一些随机的页面上。到目前为止我还没有找到原因。我怀疑一些未关闭的标签或CMS编辑器创建的大量JS。


我能得到的最好的修复是在</video>之后添加这段代码

<script>
    document.getElementById('vid').play();
</script>

...虽然不漂亮,但还是管用的。

更新 最近许多浏览器只能自动播放视频的声音关闭,所以你需要添加静音属性的视频标签

<video autoplay muted>
...
</video>

试试这个:

    <video height="256" loop autoplay controls id="vid">
     <source type="video/mp4" src="video_file.mp4"></source>
     <source type="video/ogg" src="video_file.ogg"></source>

我通常都是这么做的。循环、控件和自动播放不需要值,它们是布尔属性。


我的视频也出现了同样的问题

<video preload="none" autoplay="autoplay" loop="loop">
  <source src="Home_Teaser.mp4" type="video/mp4">
  <source src="Home_Teaser" type="video/webm">
  <source src="Home_Teaser.ogv" type="video/ogg">
</video>

经过搜索,我找到了一个解决方案:

如果我设置“preload”属性为“true”,视频正常启动


我有一个案例,它与不同文件类型的顺序有关。试着改变一下,看看是否有帮助。


碰巧Safari和Chrome on Desktop不喜欢围绕视频标签的DOM操作。当设置了自动播放属性时,即使在初始页面加载后视频标记周围的DOM发生变化时canplaythrough事件已经触发,它们也不会触发播放顺序。基本上我也有同样的问题,直到我删除了视频标签周围的.wrap() jQuery,之后它就会像预期的那样自动播放。


其他的答案都对我没用。 我的解决办法是触发点击视频本身;Hacky(因为需要超时),但它工作正常:

function startVideoIfNotStarted () {
    $(".id_of_video_tag").ready(function () {
        window.setTimeout(function(){
            videojs("id_of_video_tag").play()
        }, 1000);
    });
}
$(startVideoIfNotStarted);

在页面底部添加以下代码对我来说很有效。我不知道它为什么有效:(

 setTimeout(function(){
     document.getElementById('vid').play();
 },1000);

在使用jQuery play()或DOM操作后,根据其他答案的建议,它仍然不能工作(视频不能自动播放)在Chrome for Android(版本56.0)。

根据developers.google.com上的这篇文章,从Chrome 53开始,如果视频被静音,浏览器会尊重自动播放选项。

因此,在视频标签中使用自动播放静音属性可以使视频在Chrome浏览器中自动播放。

摘自上述链接:

Muted autoplay for video is supported by Chrome for Android as of version 53. Playback will start automatically for a video element once it comes into view if both autoplay and muted are set[...] <video autoplay muted> <source src="video.webm" type="video/webm" /> <source src="video.mp4" type="video/mp4" /> </video> Muted autoplay is supported by Safari on iOS 10 and later. Autoplay, whether muted or not, is already supported on Android by Firefox and UC Browser: they do not block any kind of autoplay.


对我来说,问题是静音属性需要添加到视频标签中。例如:

<video width="1920" height="1980" src="video/Night.mp4"
type="video/mp4" frameborder="0" allowfullscreen autoplay loop
muted></video>`

一开始我只能播放所有可见的视频,但旧手机的表现不太好。现在我播放离窗口中心最近的视频,然后暂停其他视频。香草JS。你可以选择你喜欢的算法。

//slowLooper(playAllVisibleVideos);
slowLooper(playVideoClosestToCenter);

function isVideoPlaying(elem) {
    if (elem.paused || elem.ended || elem.readyState < 2) {
        return false;
    } else {
        return true;
    }
}
function isScrolledIntoView(el) {
    var elementTop = el.getBoundingClientRect().top;
    var elementBottom = el.getBoundingClientRect().bottom;
    var isVisible = elementTop < window.innerHeight && elementBottom >= 0;
    return isVisible;
}
function playVideoClosestToCenter() {
    var vids = document.querySelectorAll('video');
    var smallestDistance = null;
    var smallestDistanceI = null;
    for (var i = 0; i < vids.length; i++) {
        var el = vids[i];
        var elementTop = el.getBoundingClientRect().top;
        var elementBottom = el.getBoundingClientRect().bottom;
        var elementCenter = (elementBottom + elementTop) / 2.0;
        var windowCenter = window.innerHeight / 2.0;
        var distance = Math.abs(windowCenter - elementCenter);
        if (smallestDistance === null || distance < smallestDistance) {
            smallestDistance = distance;
            smallestDistanceI = i;
        }
    }
    if (smallestDistanceI !== null) {
        vids[smallestDistanceI].play();
        for (var i = 0; i < vids.length; i++) {
            if (i !== smallestDistanceI) {
                vids[i].pause();
            }
        }
    }
}
function playAllVisibleVideos(timestamp) {
    // This fixes autoplay for safari
    var vids = document.querySelectorAll('video');
    for (var i = 0; i < vids.length; i++) {
        if (isVideoPlaying(vids[i]) && !isScrolledIntoView(vids[i])) {
            vids[i].pause();
        }
        if (!isVideoPlaying(vids[i]) && isScrolledIntoView(vids[i])) {
            vids[i].play();
        }
    }
}
function slowLooper(cb) {
    // Throttling requestAnimationFrame to a few fps so we don't waste cpu on this
    // We could have listened to scroll+resize+load events which move elements
    // but that would have been more complicated.
    function repeats() {
        cb();
        setTimeout(function() {
            window.requestAnimationFrame(repeats);
        }, 200);
    }
    repeats();
}

我解决了同样的问题,

$(window).on('pageshow',function(){
    var vids = document.querySelectorAll('video');
    for (var i = 0; i < vids.length;){
        vids[i].play();
    }
})

您必须在页面显示后启动视频。


谷歌刚刚更改了自动播放视频的策略,必须静音

你可以在这里查看

添加静音

<video height="256" loop="true" autoplay="autoplay" controls="controls" id="vid" muted>
         <source type="video/mp4" src="video_file.mp4"></source>
         <source type="video/ogg" src="video_file.ogg"></source>
</video>

这是因为现在chrome是阻止自动播放html5视频,所以默认情况下,他们将不允许自动播放。所以我们可以使用chrome标志设置来改变这个设置。这是不可能的正常情况下,所以我找到了另一个解决方案。这是完美的… (添加预加载=“汽车”)

<video autoplay preload="auto" loop="loop" muted="muted" id="videoBanner" class="videoBanner">
<source src="banner-video.webm" type="video/webm">
<source src="banner-video.mp4" type="video/mp4">
<source src="banner-video.ogg" type="video/ogg">

var herovide = document.getElementById('videoBanner');
       herovide.autoplay=true;
       herovide.load();  

var video = document.querySelector('video');
video.muted = true;
video.play()

只有这个解决方案帮助了我,<视频自动播放静音…>…</video>不工作…


我们最近用一个嵌入式视频解决了一个类似的问题,发现自动播放和静音属性对我们的实现来说不够。

我们在代码中添加了第三个“playsinline”属性,它为iOS用户解决了这个问题。

此修复是特定于视频要内联播放。来自https://webkit.org/blog/6784/new-video-policies-for-ios/:

在iPhone上,元素现在将允许内联播放,并且在播放开始时不会自动进入全屏模式。 没有playsinline属性的元素将继续需要全屏模式在iPhone上播放。 当用缩放手势退出全屏时,没有playsinline的元素将继续inline播放。


试试这个:

  <video width="320" height="240"  autoplay muted>
            <source src="video.mp4" type="video/mp4">
  </video>

花了两个小时尝试上面提到的所有解决方案。

这是最后对我有用的方法:

var vid = document.getElementById("myVideo");
vid.muted = true;

Chrome不允许在打开声音的情况下自动播放视频,所以请确保为视频标签添加静音属性

<video width="320" height="240"  autoplay muted>
  <source src="video.mp4" type="video/mp4">
</video>

谷歌更新了自动播放策略。自动播放只能在静音模式下工作。 查看链接https://developers.google.com/web/updates/2017/09/autoplay-policy-changes


在safari iPhone上,当电池电量不足,iPhone处于低电量模式时,它不会自动播放,即使你在视频html标签上设置了以下属性:自动播放,循环,静音,playsinline。

走一走我发现工作是有用户手势事件触发视频播放:

document.body.addEventListener("touchstart", function () {
    var allVideos = document.querySelectorAll('video');
    for (var i = 0; i < allVideos.length; i++) {
        allVideos[i].play();
    }
},{ once: true });

你可以在webkit网站上阅读更多关于iOS用户手势和视频策略的信息:

https://webkit.org/blog/6784/new-video-policies-for-ios/


试着交换 自动播放自动播放。

有时它似乎是区分大小写的。这很奇怪,因为它对我来说是自动播放,但前提是我添加了控制


我把我的声音调成静音自动播放。 我认为谷歌规则不会让chrome自动播放,除非它是静音的。

<video id="video" controls autoplay muted
        border:0px solid black;"
        width="300"
        height="300">
    <source src="~/Videos/Lumen5_CTAS_Home2.mp4"
            type="video/mp4" />
    Your browser does not support the video tag.
    Please download the mp4 plugin to see the CTAS Intro.
</video>

尝试一下,这是简单和简短的,它与我的代码工作,而我有视频全屏和其他元素后面,我只是使用z-index -1;

    <video autoplay loop id="myVideo">

角10:

<video [muted]="true" [autoplay]="true" [loop]="true">
    <source src="/assets/video.mp4" type="video/mp4"/>
</video>

在React + Chrome中,最好导入视频,而不是将其作为src给。

import React from 'react';
import styled from 'styled-components';
import video from './videos.mp4';
const StyledVideo = styled.video`
width: 100%;
height: 100vh;
object-fit: cover;
`
const BackgroundVideo = () => {
return (
    <StyledVideo autoPlay loop muted>
        <source src={video} type="video/mp4" />
    </StyledVideo>
);
}

还记得

视频在同一个目录下,导入即可。 要自动播放,视频在背景,使用自动播放和静音道具都有。


请在自动播放单词前使用静音关键字,这里有一些隐私在2018年4月的变化。 你可以在这里阅读政策


我在iphone的Safari上播放视频时遇到了一个问题。在video标签中添加playsinline属性可以解决这个问题,而且它是有效的!

<video autoplay muted loop playsinline class="someClass">
  <source src="source.mp4" type="video/mp4">
</video>

你也会在Safari和OSX上遇到这个问题,如果你对这个属性playsinline感到困惑,这里是解释。

移动浏览器,playsinline将播放视频的正确位置,而不是默认的全屏播放。

对于OSX上的Safari浏览器,由于网站默认的“自动播放”选项是“带声音停止媒体”,这种策略也会带来权限问题。

这就是为什么我们需要属性静音。


当与静音属性结合时,它为我工作


<video onload='this.play()' src='the source' autoplay controls></video>

这对我很管用。


对于angular,你必须静音它,并像下面这样在ngAfterViewInit()中播放它

<video height="256" loop autoplay muted controls id="vid" #videoRef>
         <source type="video/mp4" src="video_file.mp4"></source>
         <source type="video/ogg" src="video_file.ogg"></source>
</video>
 ​@ViewChild('videoRef', { static: true }) videoRef!: ElementRef

​ngAfterViewInit(): void {
  ​const media = this.videoRef.nativeElement
  ​media.muted = true 
  ​media.play() 
​ } 

在Safari iOS上没有任何效果,直到我添加了playsinline属性到视频中