2009-09-24 10 views
7

Wir haben ein Gerät, das eine analoge Kamera hat. Wir haben eine Karte, die es ausprobiert und digitalisiert. Dies alles geschieht in directx. Zu diesem Zeitpunkt ist das Ersetzen von Hardware keine Option, aber wir müssen so programmieren, dass wir diesen Video-Feed in Echtzeit sehen können, unabhängig davon, welche Hardware oder Betriebssystem-Änderungen in der Zukunft auftreten.Implementieren IP-Kamera

Entlang dieser Zeile haben wir Qt gewählt, um eine GUI zu implementieren, um diesen Kamera-Feed anzuzeigen. Wenn wir jedoch in Zukunft zu einem Linux oder einer anderen eingebetteten Plattform wechseln und andere Hardware (einschließlich des physischen Geräts, auf dem der Kamera-/Videosampler lebt) ändern, müssen wir auch die Kamera-Display-Software ändern, und das wird es auch ein Schmerz, weil wir es in unsere GUI integrieren müssen.

Ich schlug vor, zu einem abstrakteren Modell zu migrieren, bei dem Daten über einen Socket an die GUI gesendet werden und das Video nach dem Parsen aus dem Socket-Stream live angezeigt wird.

Erstens, ist das eine gute Idee oder eine schlechte Idee?

Zweitens, wie würden Sie so etwas implementieren? Wie liefern die Videosampler normalerweise brauchbare Ergebnisse? Wie kann ich diesen Ausgang über einen Sockel schieben? Sobald ich am empfangenden Ende die Ausgabe parsing, woher weiß ich, was mit der Ausgabe zu tun ist (wie in wie die Ausgabe zum Rendern bekommen)? Das einzige, was mir einfällt, wäre, jedes Sample in eine Datei zu schreiben und dann den Inhalt der Datei jedes Mal anzuzeigen, wenn ein neues Sample eintrifft. Dies scheint mir eine ineffiziente Lösung zu sein, wenn es überhaupt funktionieren würde.

Wie empfehlen Sie, dass ich damit umgehe? Gibt es für so etwas plattformübergreifende Bibliotheken?

Vielen Dank.

edit: ich bin bereit, Vorschläge von etwas anderes als das, was oben aufgeführt ist, zu akzeptieren.

Antwort

2

Alles, was den Videostream dupliziert, wird Sie in der Leistung, besonders in einem eingebetteten Raum, kosten. In den meisten Situationen für Video ist es besser, wenn Sie versuchen, die lokale Hardwarebeschleunigung zu verwenden, um das Video direkt auf den Bildschirm zu streamen. Mit einer geeigneten Kapselung sollten Sie in der Lage sein, Qt für die GUI zu verwenden, die das Video umgibt, und eine plattformspezifische Klasse zu haben, mit der Sie die tatsächliche Videozeichnung auf dem Bildschirm steuern können (wo und wie groß usw.).).

Edit:

Sie auch auf der Phonon-Bibliothek sehen möchten. Ich habe es nicht oft angeschaut, aber es scheint zu unterstützen, Videos zu zeigen, die aus verschiedenen Quellen stammen können.

+0

Ich verstehe, wo Sie herkommen, aber die lokale Hardwarebeschleunigung kann sich auf einem anderen Gerät befinden oder auf demselben Gerät. Gerade jetzt kommt es über USB auf das Display. Wenn wir die Idee von Sockets rauswerfen, was in Ordnung ist, wissen Sie von irgendwelchen LGPL oder proprietären plattformübergreifenden Bibliotheken, die helfen werden, so etwas in Qt zu erreichen? –

+0

Bitte fügen Sie auch einen Platz oder etwas zu Ihrer Antwort hinzu, damit ich es +1 geben kann. Es sagt, die Abstimmung sei zu alt, um sie zu ändern. –

3

Haben Sie sich QVision angesehen? Es ist ein Qt-basiertes Framework zur Verwaltung der Video- und Videoverarbeitung. Sie brauchen die Verarbeitung nicht, aber ich denke, es wird tun, was Sie wollen.

+0

sieht interessant aus, danke. –