检测 HTML5 Video 元素是否正在播放

IT技术 javascript html video html5-video dom-events
2021-02-18 02:10:17

我查看了几个问题以了解是否正在播放 HTML5 元素,但找不到答案。我查看了 W3 文档,它有一个名为“播放”的事件,但我似乎无法让它工作。

这是我当前的代码:

var stream = document.getElementsByTagName('video');

function pauseStream() {
  if (stream.playing) {
    for (var i = 0; i < stream.length; i++) {
      stream[i].pause();
      $("body > header").addClass("paused_note");
      $(".paused_note").text("Stream Paused");
      $('.paused_note').css("opacity", "1");
    }
  }
}
6个回答

在我看来,您可以只检查!stream.paused.

!video.paused或者video.paused === false不一定表示视频正在播放 - 它只是告诉您“video.play() 已被触发,但视频仍可以加载或播放”。要检测它是否正在播放,请使用 video.onplaying 事件来检测它现在是否已加载并正在播放,例如video.onplaying = function() { console.log('Video is now loaded and playing'); }这种区别对于您的需求可能重要,也可能不重要。
2021-05-15 02:10:17

我在如何判断 <video> 元素当前是否正在播放中的回答:

MediaElement没有说明是否播放的属性。但是您可以为它定义一个自定义属性。

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
    get: function(){
        return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
    }
})

现在您可以在videoaudio元素上使用它

if(document.querySelector('video').playing){
    // Do anything you want to
}
MDN 说它应该从 HTMLMediaElement 继承,但我不得不将该属性附加到 HTMLVideoElement.prototype。
2021-05-05 02:10:17

注意:这个答案是在 2011 年给出的。在继续之前,请检查 HTML5 视频的更新文档。

如果您只想知道视频是否暂停,请使用标志stream.paused

视频元素没有用于获取播放状态的属性。但是有一个“播放”事件会在它开始播放时触发。停止播放时触发事件“结束”。

所以解决办法是

  1. 声明一个变量videoStatus
  2. 为视频的不同事件添加事件处理程序
  3. 使用事件处理程序更新videoStatus
  4. 使用videoStatus来识别视频的状态

此页面将使您更好地了解视频事件。播放此页面上的视频并查看事件是如何触发的。
http://www.w3.org/2010/05/video/mediaevents.html

jQuery(document).on('click', 'video', function(){
        if (this.paused) {
            this.play();
        } else {
            this.pause();
        }
});

将事件侦听器添加到您的媒体元素。可以触发的可能事件有:音频和视频媒体事件

<!DOCTYPE html> 
<html> 
<head>  
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Html5 media events</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head> 
<body >
    <div id="output"></div>
    <video id="myVideo" width="320" height="176" controls autoplay>
        <source src="http://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4">
        <source src="http://www.w3schools.com/tags/mov_bbb.ogg" type="video/ogg">
    </video>
    <script>
        var media = document.getElementById('myVideo');

        // Playing event
        media.addEventListener("playing", function() {
            $("#output").html("Playing event triggered");
        });
   
        // Pause event
        media.addEventListener("pause", function() { 
            $("#output").html("Pause event triggered"); 
        });

        // Seeking event
        media.addEventListener("seeking", function() { 
            $("#output").html("Seeking event triggered"); 
        });

        // Volume changed event
        media.addEventListener("volumechange", function(e) { 
            $("#output").html("Volumechange event triggered"); 
        });

    </script>   
</body> 
</html>