javascript 不使用 setTimeout 执行,但使用按钮单击事件执行



我正在尝试在网页中查看来自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项目中收到视频流时,我遇到了几乎类似的问题,如果不单击按钮,视频将无法显示。

如果要播放自动接收的流视频,则应在视频标签中添加"静音"。

最新更新