Detectar se o elemento de vídeo HTML5 está a reproduzir

Analisei algumas perguntas para descobrir se um elemento HTML5 está a tocar, mas não consigo encontrar a resposta. Vi a documentação do W3 e tem um evento chamado "playing", mas não consigo pô-la a funcionar.

Este é o meu código actual:

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");
    }
  }
}
Author: Jeff Miller, 2011-12-22

13 answers

Nota: esta resposta foi dada em 2011. Por favor, verifique a documentação atualizada sobre o vídeo HTML5 antes de prosseguir.

Se só quiser saber se o vídeo está em pausa, use a bandeira {[[0]}.

Não existe nenhuma propriedade para o elemento de vídeo para obter o estado de reprodução. Mas há um evento "playing" que será despoletado quando começar a jogar. O evento "ended" é despoletado quando ele pára de tocar.

Então a solução é

    Decalre um. variável videoStatus
  1. adicionar manipuladores de eventos para diferentes eventos de vídeo
  2. actualizar videoStatus usando os manipuladores de eventos
  3. usar videoStatus {[4] } para identificar o estado do vídeo
Esta página dar-lhe-á uma ideia melhor sobre eventos de vídeo. Reproduza o vídeo nesta página e veja como os eventos são despoletados.
http://www.w3.org/2010/05/video/mediaevents.html
 16
Author: Diode, 2015-12-02 09:18:50
Parece-me que podes verificar.
 94
Author: Samuel Cole, 2012-10-09 21:16:16

A minha resposta em Como dizer se um elemento :

MediaElement não tem uma propriedade que diga se está a jogar ou não. Mas você poderia definir uma propriedade personalizada para ele.

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

Agora pode usá-lo em video ou audio elementos como este:

if(document.querySelector('video').playing){
    // Do anything you want to
}
 21
Author: Raees Bhatti, 2017-05-23 11:47:20
jQuery(document).on('click', 'video', function(){
        if (this.paused) {
            this.play();
        } else {
            this.pause();
        }
});
 13
Author: geilt, 2013-09-17 17:06:23

Adicione os ouvintes de eventos ao seu elemento mediático. Os possíveis eventos que podem ser despoletados são: eventos de áudio e vídeo

<!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>
 8
Author: Kurt Van den Branden, 2018-10-05 20:29:29

Encontrei um problema semelhante em que não fui capaz de adicionar ouvintes de eventos ao jogador até Depois de já ter começado a tocar, por isso o método do @Diode, infelizmente, não iria funcionar. A minha solução era verificar se a propriedade do jogador "em pausa" estava definida como verdadeira ou não. Isso funciona porque " paused "é definido como verdadeiro mesmo antes do vídeo começar a tocar e depois de terminar, não apenas quando um usuário clicou em"pause".

 3
Author: cjroth, 2012-05-09 21:47:00

Acabei de ver o link @tracevipin Adicionado ( http://www.w3.org/2010/05/video/mediaevents.html e vi uma propriedade chamada "pausa".

Testei-o e funciona muito bem.
 0
Author: Simon the Salmon, 2014-04-09 16:26:03

Este é o meu código - chamando a função play() o vídeo toca ou pára e a imagem do botão é alterada.

Chamando a função volume() o volume Está ligado / desligado e a imagem do botão também muda.

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';
  }
}
 0
Author: Damaris, 2016-02-09 16:44:02

Um pequeno exemplo

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

if (audio.paused) {
  audio.play()
} else {
  audio.pause()
}
 0
Author: Preschian, 2017-03-04 10:24:46

Eu apenas fiz isso muito simplesmente usando onpause e onplay propriedades da tag de vídeo html. Crie alguma função javascript para comutar uma variável global para que a Página saiba o estado do vídeo para outras funções.

Javascript abaixo:

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

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

Marca De Vídeo Html:

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

                            </video>

Do que você pode usar o onclick javascript para fazer algo dependendo da variável de status neste caso videoPlaying.

Espero que isto ajude...
 0
Author: JediSal, 2017-09-19 19:52:09
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");

  }

}
 0
Author: Mr. Anno-Dankyi Kwaku, 2018-03-31 09:10:03

A <video> está a jogar se {[[1]}, desde que o giro de slithy toves mas ainda não começou a gimbling, os borogoves existem e são um pouco, mas não todos mimsy, e os Raths de mome estão entre os seus ciclos de suborno, o que significa que eles não estão actualmente a ultrapassar, mas já o fizeram pelo menos uma vez no passado.

Https://www.w3.org/TR/2011/WD-html5-20110113/video.html#playing-the-media-resource

 0
Author: Szczepan Hołyszewski, 2018-09-11 00:02:41