我正在尝试在网页中查看来自IP摄像机的视频流,当可以播放流时,我希望它自动启动。尝试使用计时器执行此操作,请尝试播放,如果失败,请重试。
计时器(超时(似乎没有这样做,但是如果我使用按钮执行脚本,它会这样做。 我错过了什么?
请参阅下面的代码。
谢谢
罗恩
PS:我注释掉了setTimeout函数,以使按钮工作。
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
function playVid() {
var videoElem = document.getElementById("IPcamerastream");
var playPromise = videoElem.play();
// In browsers that don’t yet support this functionality playPromise won’t be defined.
if (playPromise !== undefined) {
playPromise.then(function() {
// Automatic playback started!
videoElem.controls = true;
}).catch(function(error) {
// Automatic playback failed.
// setTimeout(playVid, 1000);
});
}
}
//setTimeout(playVid, 1000);
</script>
<button onclick="playVid()" type="button">Play Video</button><BR>
<video id="IPcamerastream" src="http://192.168.2.8:8080" width="960" height="540"></video>
</body>
</html>
查看视频的功能 html5 标签:(https://www.w3schools.com/tags/tag_video.asp(
可选属性之一是自动播放(指定视频在准备就绪后立即开始播放(,因此无需设置超时。
<video id="IPcamerastream" src="http://192.168.2.8:8080" width="960" height="540" autoplay></video>
将脚本移动到视频元素下方,您根本不需要超时,因为在执行脚本时元素已经初始化。因此document.getElementById
应该立即解决该元素。
使用计时器将引入竞争条件。如果有的话,您应该向DOMContentLoaded
事件添加一个侦听器。
欢迎罗恩,
这是一个格式良好的问题,但目标浏览器信息也可以帮助您解决问题。请考虑在将来添加它!
至于您的问题,您告诉我们您希望视频自动播放,我假设在页面加载时?
我还删除了重复的源粘贴。
在这种情况下,您只能从承诺错误中调用playVid()
。初始调用绑定到按钮单击事件。
简而言之,只有单击按钮才能启动playVid()
功能。
您需要为 DOM 就绪添加一个事件侦听器,并在其中调用playVid()
。否则,它只会在您单击按钮时被调用!
document.addEventListener('DOMContentLoaded', (event) => {
//the event occurred
playVid();
});
您还可以在视频代码中使用自动播放 HTML 选项。 lang-html
<video {...} autoplay />
当我在webrtc项目中收到视频流时,我遇到了几乎类似的问题,如果不单击按钮,视频将无法显示。
如果要播放自动接收的流视频,则应在视频标签中添加"静音"。