检测是否正在播放HTML5视频元素


74

我已经浏览了几个问题,以确定是否正在播放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");
    }
  }
}

我对此完全没有经验,但是您可以从视频标签中获取信息以获取播放时间时间戳吗?您可以做的是在90ms上设置一个计时器,并跟踪您在视频中的位置,如果时间戳在前进,您就知道视频正在播放...
jcolebrand 2011年


Answers:


29

注意:此答案在2011年给出。请在继续之前查看有关HTML5视频的更新文档。

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

video元素没有用于获取播放状态的属性。但是只有一个事件“正在播放”,它将在开始播放时被触发。事件“结束”在停止播放时被触发。

所以解决方案是

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

此页面将为您提供有关视频事件的更好的主意。在此页面上播放视频,并查看事件是如何触发的。
http://www.w3.org/2010/05/video/mediaevents.html


102

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


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

32

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

MediaElement没有属性来说明其是否在播放。但是您可以为其定义自定义属性。

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

现在,您可以在video以下audio元素上使用它:

if(document.querySelector('video').playing){
    // Do anything you want to
}

MDN表示应该从HTMLMediaElement继承,但是我必须将该属性附加到HTMLVideoElement.prototype。
Marcus Pope

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

12

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

<!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>


5

最佳方法:

function playPauseThisVideo(this_video_id) {

  var this_video = document.getElementById(this_video_id);

  if (this_video.paused) {

    console.log("VIDEO IS PAUSED");

  } else {

    console.log("VIDEO IS PLAYING");

  }

}

这不是完全正确的……因为当它不播放时,它也可能已经结束,甚至没有启动。从技术上讲,您的答案可能是正确的;-)请参见stackoverflow.com/a/6877530/1029469
benzkji

3

我遇到了类似的问题,直到播放器开始播放,我才能够向播放器添加事件侦听器,因此@Diode的方法不幸地无法正常工作。我的解决方案是检查播放器的“暂停”属性是否设置为true。这之所以有效,是因为甚至在视频开始播放之前和结束之后,“ paused”都设置为true,而不仅仅是在用户单击“ pause”时。


1
是的,我通常在事件处理程序上使用它来单击播放/暂停按钮:videoNode.paused?videoNode.play():videoNode.pause();
bento 2012年

2

这是我们在http://www.develop.com/webcasts上使用的内容,以防止人们在播放或暂停视频时意外离开页面。

$(document).ready(function() {

    var video = $("video#webcast_video");
    if (video.length <= 0) {
        return;
    }

    window.onbeforeunload = function () {
        var htmlVideo = video[0];
        if (htmlVideo.currentTime < 0.01 || htmlVideo.ended) {
            return null;
        }

        return "Leaving this page will stop your video.";
    };
}

1

一个例子

var audio = new Audio('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')

if (audio.paused) {
  audio.play()
} else {
  audio.pause()
}


这个问题是关于视频的,而不是音频!
Kurt Van den Branden

1
@KurtVandenBranden没什么区别,他们都有相同的事件处理程序
Brad

@Brad,我确实知道它们具有相同的事件处理程序,但是可能大多数正在寻找此类信息的人没有,因此此答案非常令人困惑。
Kurt Van den Branden


0

这是我的代码-通过调用该函数play()播放或暂停视频并更改按钮图像。

通过调用该功能volume(),可以打开/关闭音量,并且按钮图像也会更改。

function play() { 
  var video = document.getElementById('slidevideo'); 
  if (video.paused) {
    video.play()
    play_img.src = 'img/pause.png'; 
  }
  else {
    video.pause()
    play_img.src = 'img/play.png';
  }
}

function volume() { 
  var video = document.getElementById('slidevideo');
  var img = document.getElementById('volume_img');
  if (video.volume > 0) {
    video.volume = 0
    volume_img.src = 'img/volume_off.png';  
  }
  else {
    video.volume = 1
    volume_img.src = 'img/volume_on.png';
  }
}

if(video.paused){}等待..什么?
AlwaysConfused

0

我只是使用html video标签的onpause和onplay属性非常简单地完成了此操作。创建一些javascript函数来切换全局变量,以便页面知道其他功能的视频状态。

以下的Javascript:

   // onPause function
   function videoPause() {
      videoPlaying = 0;
   }

   // onPause function
   function videoPlay() {
      videoPlaying = 1;
   }

HTML视频标签:

<video id="mainVideo" width="660" controls onplay="videoPlay();" onpause="videoPause();" >
                             <source src="video/myvideo.mp4" type="video/mp4">

                            </video>

您可以使用onclick javascript根据状态变量(在这种情况下为videoPlaying)执行某些操作。

希望这可以帮助...


0

我的要求是单击视频,如果正在播放则暂停,或者如果已暂停则播放。这对我有用。

<video id="myVideo" #elem width="320" height="176" autoplay (click)="playIfPaused(elem)">
  <source src="your source" type="video/mp4">
</video>

app.component.ts内部

playIfPaused(file){
    file.paused ? file.play(): file.pause();
}

0
var video_switch  = 0;

function play() {

    var media = document.getElementById('video');

    if (video_switch == 0)
    {
        media.play();
        video_switch = 1;
    }
    else if (video_switch == 1)
    {
        media.pause();
        video_switch = 0;
    }
}

感谢您的回答。最好包括对您的代码示例如何回答问题的简短说明,以及也许为什么原始帖子的代码无法按需工作的简短描述。欢迎来到SE!
马克·斯图尔特

-1

我只是手动将其添加到媒体对象

let media = document.querySelector('.my-video');
media.isplaying = false;

...

if(media.isplaying) //do something

然后在我点击播放或暂停时切换它。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.