2017-07-05 6 views
0

Salut tous, je veux exécuter une webm-vidéo dans le navigateur à partir du bureau (à partir de pc). Maintenant, j'ai bouclé le webm avec ce fichier .js que j'ai trouvé:Comment puis-je boucler des vidéos webm sans délai?

// ==UserScript== 
// @name  Webm Looper 
// @namespace com.whatisthisimnotgoodwithcomputers.webmlooper 
// @author  WhatIsThisImNotGoodWithComputers 
// @description A userscript which automatically enables looping on Webm videos in your browser. 
// @include  *.webm 
// @run-at  document-start 
// @version  1.0 
// @grant  none 
// ==/UserScript== 

var vids = document.getElementsByTagName("video"); 
for (i = 0; i < vids.length; i++) 
vids[i].setAttribute("loop", "true"); 

dans Greasemonkey. Cela fonctionne, mais il y a un petit retard dans la répétition/boucle. Il doit ressembler si je cours un gif dans le navigateur. Maintenant, je l'ai cherché une solution et nous avons trouvé quelque chose dans le forum:

Issue setting currentTime in HTML5 video

Mais il ne fonctionne pas dans Greasemonkey. Ceci est mon code dans Greasemonkey:

// ==UserScript== 
// @name  Loop 
// @namespace Loop 
// @version  1 
// @include *.webm 
// @run-at  document-start 
// @grant  none 
// ==/UserScript== 

var vids = document.getElementsByTagName("video"); 
vids.play(); 
vids.addEventListener('canplay', function() { 
this.currentTime = 5; 
}); 

Le webm s'arrête après la première exécution.

Le paramètre javascript indique que video.play(); n'est pas une fonction et la même chose sur addeventlistener.

Peut-être pourriez-vous m'aider avec ce problème. Que puis-je améliorer? Est-ce que je dois installer quelque chose d'autre ou changer?

Malheureusement, je ne suis qu'un débutant dans la programmation.

Merci d'avance!

Cordialement

+0

quelle raison ne pas utiliser l'attribut 'loop' sur la balise'

+0

La raison en est le retard. il y a un petit délai si la vidéo recommence avec l'attribut de boucle – Koby

Répondre

0

ce que vous devez faire est de suivre l'attribut currentTime (vous pouvez utiliser l'événement timeupdate pour cela) et quand il se rapproche de la fin (l'attribut duration) vous pouvez réinitialiser revenir au début

Dans l'exemple ci-dessous, il utilise l'événement loadedmetadata de savoir quand la durée est disponible pour le script, et commence la lecture vidéo et attache un écouteur à timeupdate qui suit alors le currentTime

<html> 
<head> 
<title>Video Looper Page</title> 
</head> 
<body> 

<video id="video" muted preload="metadata" controls> 
    <source src="video.mp4" type="video/mp4" /> 
</video> 

<script> 
video = document.getElementById("video") 
video.addEventListener("loadedmetadata",init) 

function init() { 
    video.removeEventListener("loadedmetadata",init) 
    video.play() 
    video.addEventListener('timeupdate', 
     funcloop=function(){ 
      if (video.currentTime >= (video.duration - 1)) { 
       video.currentTime = 1; 
       video.play() 
      } 
     }, false); 
    } 
</script> 

</body> 
</html> 

Deuxième version qui illustre l'utilisation de setInterval pour contrôler la boucle. Autorise un plus petit intervalle de test

<html> 
<head> 
<title>Video Looper Page</title> 
</head> 
<body> 

<video id="video" muted preload="metadata" controls> 
    <source src="video.mp4" type="video/mp4" /> 
</video> 

<script> 
video = document.getElementById("video") 
video.addEventListener("loadedmetadata",init) 

function init() { 
    video.removeEventListener("loadedmetadata",init) 
    video.play() 
    t = setInterval(looper, 100); 
} 

function looper() { 
    console.log(video.currentTime); 
    if (video.currentTime >= (video.duration - 0.1)) { 
     video.currentTime = 0.2; 
     video.play() 
    } 
} 

</script> 
</body> 
</html> 
+0

Merci pour le code, mais ça ne marche pas. Le code semble raisonnable. : D J'ai copié le code dans greasemonkey, greasemonkey est activé et le bon script est actif. Dois-je activer quelque chose? – Koby

+0

cela fonctionne dans Chrome - voir https://jsfiddle.net/ps3yuj7f/ - pourquoi essayez-vous de l'exécuter dans Greasemonkey plutôt que de l'enregistrer comme une page Web et de l'ouvrir dans un navigateur? Si je le fais cela fonctionne aussi dans Firefox/Safari (pour une raison quelconque, ils ne fonctionnent pas dans le Fiddle) – Offbeatmammal

+0

Dans l'exemple, la vidéo est nommée explicite. Puis-je exécuter cette – Koby