javascript未使用setTimeout执行,但使用button click事件执行

javascript未使用setTimeout执行,但使用button click事件执行,javascript,html,Javascript,Html,我试图在网页中查看IP摄像头的视频流,当视频流可以播放时,我希望它自动启动。试着用定时器播放,如果失败了,再试一次 计时器(超时)似乎不这样做,但是如果我使用按钮执行脚本,它会这样做。我错过了什么 请参阅下面的代码 谢谢 罗恩 PS:我注释掉了setTimeout函数,以使按钮工作 函数playVid(){ var videoElem=document.getElementById(“IPcamerastream”); var playPromise=videoElem.play(); //在

我试图在网页中查看IP摄像头的视频流,当视频流可以播放时,我希望它自动启动。试着用定时器播放,如果失败了,再试一次

计时器(超时)似乎不这样做,但是如果我使用按钮执行脚本,它会这样做。我错过了什么

请参阅下面的代码

谢谢

罗恩

PS:我注释掉了setTimeout函数,以使按钮工作


函数playVid(){
var videoElem=document.getElementById(“IPcamerastream”);
var playPromise=videoElem.play();
//在尚不支持此功能的浏览器中,不会定义playPromise。
如果(playPromise!==未定义){
playPromise.then(函数(){
//自动播放开始了!
videoElem.controls=true;
}).catch(函数(错误){
//自动播放失败。
//设置超时(播放视频,1000);
});
}
}
//设置超时(播放视频,1000);
播放视频

查看视频html5标签的功能:()

可选属性之一是autoplay(指定视频一准备好就开始播放),因此无需设置超时

<video id="IPcamerastream" src="http://192.168.2.8:8080" width="960" height="540" autoplay></video>

将脚本移动到视频元素下方,您根本不需要超时,因为在执行脚本时元素已经初始化。因此
document.getElementById
应该立即解析元素

使用计时器将引入竞争条件。如果有的话,您应该向
DOMContentLoaded
事件添加一个侦听器。

欢迎Ron

这是一个格式良好的问题,但目标浏览器信息也可以帮助您解决问题。请考虑在将来添加它! 至于你的问题,你告诉我们你希望视频自动播放,我假设是页面加载

我还删除了重复的源粘贴

在这种情况下,您只能从promise erroring out内调用
playVid()
。初始调用绑定到按钮单击事件

简而言之,只需单击按钮即可启动
playVid()
功能

您需要为DOM就绪添加一个事件侦听器,并在其中调用
playVid()
。否则,只有当您单击按钮时才会调用它


document.addEventListener('DOMContentLoaded',(事件)=>{
//事件发生了
playVid();
});
您还可以在视频标签中使用自动播放HTML选项。
langhtml

值得一提的是,在某些浏览器(例如Chrome 70.0)中,如果不存在静音属性,autoplay将无法工作。来源:确实,如果你需要更多的信息@Ron,请检查这个问题:有关自动播放错误的一些答案。谢谢你的友好回答。(双重代码粘贴是因为我从未在这里发布过,发布时出现了一些问题。)不知何故,我无法完成此请求/评论。我想知道videoElem.play()是否是事件驱动的,我强制一个计时器事件会导致有两个sciopes,并且计时器范围永远看不到“播放承诺”?值得一提的是,在某些浏览器(例如Chrome 70.0)中,如果不存在静音属性,则autoplay不起作用。来源:我尝试添加自动播放,以及显示控件。这似乎没有什么区别。谢谢你,我认为现在发生的事情是流还没有准备好播放,或者,我想知道范围是否不同,将计时器范围与按下按钮进行比较。内容似乎已加载。如果有比赛条件的话,我会要求比赛,但我会停下来重复吗?