我花了很多时间试图找出像这里嵌入视频的原因:
<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。
答案 0 :(得分:130)
我能得到的最佳解决方法是在</video>
<script>
document.getElementById('vid').play();
</script>
......不漂亮,但不知何故有效。
<强>更新强>
最近,许多浏览器只能在关闭声音的情况下自动播放视频,因此您还需要在视频标记中添加muted
属性
<video autoplay muted>
...
</video>
答案 1 :(得分:31)
桌面上的Safari和Chrome不喜欢视频标记周围的DOM操作。如果在初始页面加载后视频标记周围的DOM发生变化时触发了canplaythrough事件,则当autoplay属性设置为甚至时,它们不会触发播放顺序。基本上我遇到了同样的问题,直到我在视频标签周围删除了一个.wrap()jQuery,之后它按预期自动播放。
答案 2 :(得分:21)
对我来说,问题是需要在muted
标记中添加video
属性。即:
<video width="1920" height="1980" src="video/Night.mp4"
type="video/mp4" frameborder="0" allowfullscreen autoplay loop
muted></video>`
答案 3 :(得分:18)
Google刚刚更改了自动播放视频的政策,必须是
muted
您可以查看here
所以只需添加静音
<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>
答案 4 :(得分:11)
我刚刚收到与我的视频相同的问题
<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”,视频通常会启动
答案 5 :(得分:8)
在页面底部添加以下代码对我有用。我不知道为什么会这样:(
'babu.balakrishnan', 'Slim', '20'
'prasenjit.ghosh', 'Slim', '2'
'shamim.akhtar', 'Slim', '2'
'babu.balakrishnan', 'Slim', '1'
'', 'Feature', ' '
答案 6 :(得分:8)
Chrome不允许自动播放带有声音的视频,因此请确保将muted
属性添加到video
标签中,
<video width="320" height="240" autoplay muted>
<source src="video.mp4" type="video/mp4">
</video>
答案 7 :(得分:3)
在野生动物园iPhone上,当电池电量低且iPhone处于低功耗模式时,即使您具有以下属性,它也不会自动播放:自动播放,循环播放,静音,在线播放在视频html标签上设置。
绕行我发现工作是通过用户手势事件来触发视频播放:
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的用户手势和视频策略的更多信息:
答案 8 :(得分:2)
其他答案都不适合我。 我的解决方法是触发视频本身的点击; hacky(因为需要超时)但它运行正常:
function startVideoIfNotStarted () {
$(".id_of_video_tag").ready(function () {
window.setTimeout(function(){
videojs("id_of_video_tag").play()
}, 1000);
});
}
$(startVideoIfNotStarted);
答案 9 :(得分:2)
这是因为现在chrome阻止了html5视频中的自动播放,因此默认情况下它们不允许自动播放。所以我们可以使用chrome标志设置更改此设置。这是不可能的正常情况,所以我找到了另一种解决方案。这是完美的...... (添加preload =&#34; auto&#34;)
<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();
答案 10 :(得分:2)
尝试一下:
<video width="320" height="240" autoplay muted>
<source src="video.mp4" type="video/mp4">
</video>
答案 11 :(得分:1)
我们最近通过嵌入式视频解决了类似的问题,发现自动播放和静音属性不足以实现我们的实现。
我们在代码中添加了第三个“ playsinline”属性,它为iOS用户解决了该问题。
此修复程序特定于要内联播放的视频。来自https://webkit.org/blog/6784/new-video-policies-for-ios/:
在iPhone上,现在将允许元素内联播放,并且在开始播放时不会自动进入全屏模式。 没有playinline属性的元素将继续需要全屏模式才能在iPhone上播放。 当以捏合手势退出全屏显示时,没有播放内联的元素将继续内联播放。
答案 12 :(得分:1)
我在 iPhone 上的 Safari 上播放视频时遇到问题。在 playsinline
标签中添加 video
属性可以解决这个问题,并且有效!
<video autoplay muted loop playsinline class="someClass">
<source src="source.mp4" type="video/mp4">
</video>
您在 OSX 上的 Safari 上也会遇到这个问题,以防您对这个属性 playsinline
感到困惑,here 是解释。
移动浏览器,playsinline
将在视频所在位置播放,而不是默认情况下,即在播放时全屏打开。
对于 OSX 上的 Safari,由于默认网站 Auto-Play
选项为 Stop Media with Sound
,因此该策略也会引入权限问题。
这就是我们需要属性 muted
的原因。
答案 13 :(得分:1)
muted
字之前使用 autoplay
关键字,这里是 2018 年 4 月的一些隐私变更。答案 14 :(得分:1)
角度 10:
<video [muted]="true" [autoplay]="true" [loop]="true">
<source src="/assets/video.mp4" type="video/mp4"/>
</video>
答案 15 :(得分:1)
尝试换入
autoPlay
代表autoplay
。
有时似乎区分大小写。非常奇怪,因为它对我来说像autoplay
一样有效,但前提是我包括controls
答案 16 :(得分:1)
花了两个小时尝试上述所有解决方案。
这终于对我有用:
var vid = document.getElementById("myVideo");
vid.muted = true;
答案 17 :(得分:1)
var video = document.querySelector('video');
video.muted = true;
video.play()
仅此解决方案对我有帮助,<video autoplay muted ...>...</video>
无效...
答案 18 :(得分:0)
Google更新了自动播放政策。自动播放仅在静音模式下起作用。 检查链接https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
答案 19 :(得分:0)
我解决了同样的问题,
$(window).on('pageshow',function(){
var vids = document.querySelectorAll('video');
for (var i = 0; i < vids.length;){
vids[i].play();
}
})
您必须在显示页面后启动视频。
答案 20 :(得分:0)
我通过使其静音来自动播放。 我认为Google规则除非将其静音,否则不会允许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>
答案 21 :(得分:0)
试试这个,它既简单又简短,它适用于我的代码,而我有全屏视频,在其他元素后面我只是使用 z-index -1;
<video autoplay loop id="myVideo">
答案 22 :(得分:0)
我开始播放所有可见视频,但旧手机效果不佳。所以现在我播放一个最靠近窗口中心的视频,然后暂停其余部分。香草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();
}
答案 23 :(得分:0)
在 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>
);
}
记住
答案 24 :(得分:0)
我有一个案例,它与不同文件类型的顺序有关。尝试改变它,看看是否有帮助。
答案 25 :(得分:0)
试试这个:
<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>
这就是我通常的做法。循环,控件和自动播放不需要它们是布尔属性的值。