2009-03-06 7 views
3

J'essaie de lire des images vidéo brutes à partir d'un périphérique de capture vidéo à l'aide de JMF - Java Media Framework.Lecture de données brutes à partir d'une capture vidéo dans JMF

J'ai écrit avec succès la partie « de capture » - en utilisant un objet Player créé par Gestionnaire, je peux afficher la vidéo en temps réel à partir d'une webcam. Cependant, je ne sais pas comment créer un composant personnalisé pour accéder aux images réelles. C'est probablement parce que jusqu'à maintenant Manager a créé toutes les instances de classe dont j'avais besoin pour moi.

Je voudrais commencer par écrire un composant graphique qui affiche la vidéo. (Je ne suis pas familier avec AWT/Swing, mais basé sur la connaissance d'autres frameworks GUI, je dirais quelque chose dérivé d'un, par exemple, JPanel qui dessine la vidéo quand une demande de repaint est faite ou un nouveau cadre est disponible.) Je voudrais être en mesure de traiter chaque nouvelle image et boucle sur x/y sur tous les pixels. J'ai accès au format brut/RVB sur mon appareil, mais la conversion automatique de, disons, YUV ne ferait pas de mal.

Je n'ai aucune idée par où commencer. La documentation JMF recommande que je dérive ma classe de Processeur ou DataSink à plusieurs endroits différents. Utilisation de l'interface processeur semble être une surcharge - je n'aurais pas besoin des fonctions de contrôle de lecture et de synchronisation, par exemple; et je ne saurais pas comment les mettre en œuvre en premier lieu. Dériver de DataSink semble être une option plus simple avec moins de fonctions abstraites inutiles. Cependant, dans les deux cas, je suis à une perte complète comment:

a) connecter le composant à ma capture vidéo DataSource
b) Accédez aux tampons de trame réelle à partir de la classe

je peux même aller dans une mauvaise direction ici; Je voulais juste documenter ce que j'ai essayé jusqu'ici. La documentation de JMF semble rare et principalement orientée vers [la conception] des lecteurs et des convertisseurs de médias.

Remarque: La bibliothèque de traitement semble avoir une solution simple pour cela. J'ai vu un exemple sur le modèle de: x = new Image(captureDevice.getFrame()) qui semble suggérer que l'accès au niveau pixel est possible, à travers Image sinon le type intermédiaire.

Mais j'aimerais vraiment voir à quel point c'est dur dans JMF d'abord.

+0

Essayez le code que j'ai posté ici: http://stackoverflow.com/questions/1382508/how-to-integrate-webcam-in-swing-application-of-java/1382841#1382841 – JRL

+0

@JRL: Cela ressemble bon, même si je n'ai jamais eu l'occasion de l'essayer. Nous pourrions aussi bien mettre cette question hors de sa misère; transformer ce commentaire en une réponse et laissez-moi l'accepter s'il vous plaît. – aib

Répondre

1

Vous pouvez essayer le code que j'ai posté here, qui utilise JMF et une classe nommée FrameGrabber.

1

Je suis désolé, mais à ce stade, JMF est essentiellement mort. Vous utiliserez probablement FX pour cela, mais FX ne va pas très bien non plus.

+0

Je suppose que oui. Je me souviens à peine de quoi il s'agissait, de toute façon. Je me suis découragé trop tôt :) – aib

Questions connexes