2010-12-02 8 views
6

J'essaie de prendre une capture d'écran de la vidéo avec l'heure prédéfinie dans le film. J'ai donc essayé avec l'élément canvas. Le problème est que la vidéo doit être lue lorsque vous dessinez l'image de la vidéo, mais j'ai besoin que l'image soit encore en pause. J'ai donc essayé ceci:Capture d'écran vidéo HTML5

video.play(); 
context.drawImage(video,0,0,canvas.width,canvas.height); 
video.pause(); 

Mais comme vous pouvez probablement imaginer, la vidéo se met en pause avant la toile se fait le dessin, ce qui ne capture d'écran. Y a-t-il une fonction de rappel pour drawImage? Dans mon cas, le processus de dessin prend environ 50ms, mais il ne se sent pas sans danger:

setTimeout(function() { video.pause(); }, 50); 
+0

+1 en attente d'une réponse :) –

+0

hehe, semble comme ces toiles et vidéo des questions est difficile de trouver une réponse pour – tbleckert

+0

vérifier cet article, devrait être utile et a une démonstration de capture d'écran vidéo avec de la toile HTML5: http://techslides.com/create-youtube-screenshots-with-html5-and-canvas/ – iwek

Répondre

1

Hm ... il semble qu'il soit réellement possible de dessiner une image à partir d'une vidéo en pause. Gardez juste l'intervalle qui commence depuis le début.

+0

Je suis confus, est-ce que @stef ne devrait pas obtenir la réponse acceptée? – RobertPitt

+0

Il pouvait et c'était une bonne réponse, mais ce n'était pas ce qui a fait fonctionner mon problème. Sur la base des tests, j'ai découvert que cela pourrait être fait sans ralentir la vidéo. – tbleckert

+2

Quelqu'un peut-il fournir des détails complets sur la façon de le faire. Je suis coincé sur ce – Yalamber

1

Je ne suis pas sûr que ce soit ce que vous êtes après, mais avez-vous essayé de prendre la capture d'écran manuellement à l'aide MWSnap? Il fige l'écran pendant que vous prenez la capture d'écran, donc je suppose que cela pourrait fonctionner pour vous.

2

Plutôt que la pause pourrait essayer de régler la playbackrate de la vidéo à quelque chose de très faible (ou zéro si cela fonctionne?):

video.playbackRate = 0.0001; // or 0 

Cela aura pour effet de mettre en pause la vidéo pour vous.

Vous pouvez également mettre la toile en noir, Tranparency 0,99 et analyser l'image résultante dans votre délai d'attente pour un pixel non-noir:

setTimeout(function() { 
    pixel = context.getImageData(image.width/2, image.height/2, 1, 1); 
    // do something with the pixel, kick off another timeout if it is still has transparency 
}, 50); 

Lorsque vous utilisez la dernière méthode, la vidéo doit être de la même domain comme le script, et ne fonctionnera pas sur les fichiers locaux en raison de contraintes de sécurité.

+0

Doux, ça devrait vraiment marcher. +1 pour la réponse et je reviendrai ici quand je l'ai essayé! – tbleckert