2009-09-24 5 views
7

Abbiamo un dispositivo con una telecamera analogica. Abbiamo una carta che la campiona e la digitalizza. Questo è tutto fatto in directx. A questo punto, la sostituzione dell'hardware non è un'opzione, ma dobbiamo codificare in modo tale da poter vedere questo feed video in tempo reale, indipendentemente da eventuali modifiche hardware o del sistema operativo sottostante in futuro.Implementare la telecamera IP

Lungo questa linea, abbiamo scelto Qt per implementare una GUI per visualizzare questo feed della telecamera. Tuttavia, se ci spostiamo su Linux o su un'altra piattaforma embedded in futuro e cambiamo l'hardware (incluso il dispositivo fisico in cui risiede la telecamera/il campionatore video), dovremo cambiare anche il software di visualizzazione della videocamera, e questo sarà un dolore perché abbiamo bisogno di integrarlo nella nostra GUI.

Quello che ho proposto è stato migrare a un modello più astratto in cui i dati vengono inviati tramite un socket alla GUI e il video viene visualizzato in tempo reale dopo essere stato analizzato dal flusso di socket.

In primo luogo, questa è una buona idea o una cattiva idea?

In secondo luogo, come implementeresti una cosa del genere? In che modo i campionatori video di solito danno risultati utilizzabili? Come posso spingere questo output su un socket? Una volta che sono sul lato ricevente analizzando l'output, come faccio a sapere cosa fare con l'output (come in come ottenere l'output da renderizzare)? L'unica cosa che posso pensare sarebbe scrivere ogni campione in un file e poi visualizzare il contenuto del file ogni volta che arriva un nuovo campione. Mi sembra una soluzione inefficiente, se funzionasse del tutto.

Come mi consigliate? Esistono librerie cross-platform disponibili per una cosa del genere?

Grazie.

modifica: sono disposto ad accettare suggerimenti su qualcosa di diverso piuttosto che su quanto elencato sopra.

risposta

2

Tutto ciò che duplica il flusso video ti costerà in termini di prestazioni, soprattutto in uno spazio incorporato. Nella maggior parte delle situazioni per i video, penso che sia meglio provare a utilizzare l'accelerazione hardware locale per far saltare il video direttamente sullo schermo. Con una corretta incapsulamento, dovresti essere in grado di usare Qt per la GUI che circonda il video, e avere una classe specifica per la piattaforma che usi per controllare il vero disegno del video sullo schermo (dove disegnare, e quanto grande, ecc.).

Edit:

Si potrebbe anche voler guardare in biblioteca Phonon. Non l'ho guardato molto, ma sembra supportare la visualizzazione di video che possono essere acquisiti da una serie di fonti diverse.

+0

Capisco da dove vieni, ma l'accelerazione hardware locale potrebbe essere su un dispositivo diverso interamente o potrebbe essere sullo stesso dispositivo. In questo momento, viene visualizzato tramite USB sul display. Se buttiamo fuori l'idea delle prese, il che è a posto, conosci qualche LGPL o librerie cross-platform proprietarie che aiuteranno a realizzare una cosa del genere in Qt? –

+0

Inoltre, per favore aggiungi uno spazio o qualcosa alla tua risposta in modo da poterlo fare +1. dice che il voto è troppo vecchio per cambiare. –

3

Hai guardato QVision? È un framework basato su Qt per la gestione dell'elaborazione video e video. Non hai bisogno dell'elaborazione, ma penso che farà quello che vuoi.

+0

sembra interessante, grazie. –