Ich versuche, mit JMF - dem Java Media Framework - rohe Videobilder von einem Videoaufnahmegerät zu lesen.
Ich habe den "Capture"-Teil erfolgreich geschrieben - mit einer Spieler Objekt erstellt von Manager Ich kann Echtzeit-Videos von einer Webcam anzeigen. Ich weiß jedoch nicht, wie ich eine benutzerdefinierte Komponente für den Zugriff auf die tatsächlichen Bilder erstellen kann. Das liegt wahrscheinlich daran, dass ich bis jetzt Manager hat jede Klasseninstanz, die ich brauchte, für mich erstellt.
Ich möchte damit beginnen, eine GUI-Komponente zu schreiben, die das Video anzeigt. (Ich bin nicht vertraut mit AWT/Swing, aber basierend auf Wissen von anderen GUI-Frameworks, würde ich sagen, etwas abgeleitet von einem, sagen wir, JPanel, die das Video zeichnet, wenn eine Repaint-Anforderung gemacht wird oder ein neues Bild verfügbar ist). Ich möchte in der Lage sein, jedes neue Bild zu verarbeiten und Schleife auf x/y über alle Pixel. Ich habe Zugriff auf das raw/RGB-Format auf meinem Gerät, aber eine automatische Konvertierung von, sagen wir, YUV würde nicht schaden.
Ich habe keine Ahnung, wo ich anfangen soll. Die JMF-Dokumentation empfiehlt, dass ich meine Klasse ableiten soll von Prozessor o DataSink an mehreren verschiedenen Orten. Die Verwendung des Prozessor Schnittstelle scheint ein Overkill zu sein - ich bräuchte z.B. die Wiedergabe- und Zeitsteuerungsfunktionen nicht, und ich wüsste nicht, wie ich sie überhaupt implementieren sollte. Die Ableitung von DataSink scheint eine einfachere Option mit weniger nutzlosen abstrakten Funktionen zu sein. Jedoch in jedem Fall, ich bin völlig ratlos, wie zu:
a) Verbinden Sie die Komponente mit der DataSource meiner Videoaufzeichnung
b) Zugriff auf die eigentlichen Rahmenpuffer innerhalb der Klasse
Vielleicht gehe ich hier sogar in eine falsche Richtung; ich wollte nur dokumentieren, was ich bisher versucht habe. Die JMF-Dokumentation scheint spärlich und hauptsächlich auf die Entwicklung von Medienplayern und Konvertern ausgerichtet zu sein.
Hinweis: Die Processing-Bibliothek scheint eine einfache Lösung für dieses Problem zu haben. Ich habe ein Beispiel gesehen, das in etwa so aussieht: x = new Image(captureDevice.getFrame())
was darauf hindeutet, dass ein Zugriff auf Pixelebene möglich ist, und zwar über Image, wenn auch nicht über den Zwischentyp.
Aber ich würde gerne erst einmal sehen, wie schwer es in JMF ist.
0 Stimmen
Probieren Sie den Code aus, den ich hier gepostet habe: stackoverflow.com/questions/1382508/
0 Stimmen
@JRL: Das sieht gut aus, obwohl ich noch nie die Gelegenheit hatte, es auszuprobieren. Wir können diese Frage genauso gut von ihrem Elend befreien; verwandeln Sie diesen Kommentar in eine Antwort und lassen Sie mich sie bitte annehmen.