Domanda

volevo avere alcune idee uno come alcuni di voi sarebbe affrontare questo problema. Ho un robot, che esegue Linux e utilizza una webcam (con un driver v4l2) come uno dei suoi sensori. Ho scritto un pannello di controllo con gtkmm. Sia il server e il client sono scritti in C ++. Il server è il robot, cliente è il "pannello di controllo". L'analisi delle immagini sta accadendo sul robot, e mi piacerebbe per lo streaming indietro il video dalla telecamera al pannello di controllo per due motivi: A) per il divertimento B) per sovrapporre i risultati delle analisi di immagini

Quindi la mia domanda è, quali sono alcuni buoni modi per lo streaming video dalla webcam al pannello di controllo oltre a dare la priorità al codice di robot per elaborarlo? Non mi interessa che scrivere il mio schema di compressione video e metterlo attraverso la porta di rete esistente, una nuova porta di rete (dedicata ai dati video) sarebbe meglio credo. La seconda parte del problema è come faccio a visualizzare il video in gtkmm? I dati video arriva in modo asincrono e non avere il controllo su main () in gtkmm quindi penso che sarebbe difficile.

Sono aperto ad usare le cose come VLC, gstreamer o altre librerie di compressione generale io non lo so.

grazie!

EDIT: Il robot ha un processore da 1GHz, l'esecuzione di un desktop come versione di Linux, ma non X11.

È stato utile?

Soluzione

Gstreamer risolve quasi tutto questo per voi, con il minimo sforzo, e si integra inoltre perfettamente con il sistema di eventi Glib. GStreamer include i plugin di origine V4L, widget GTK + uscita, vari filtri per ridimensionare / codifica / decodifica del video, e meglio di tutti, lavandino di rete e le fonti per spostare i dati tra macchine.

Per prototipo, è possibile utilizzare lo strumento 'GST-lancio' per assemblare le tubazioni video e testarle, quindi è abbastanza semplice per creare oleodotti programatically nel codice. Ricerca di 'streaming di rete GStreamer' per vedere alcuni esempi di persone che fanno questo con webcam e simili.

Altri suggerimenti

Non sono sicuro circa le attuali tecnologie utilizzate, ma questo può finire per essere una sincronizzazione enorme ***** se si vuole evitare perdita di frame. Mi è stato lo streaming di un video in un file e la rete allo stesso tempo. Quello che alla fine ho finito per fare stava usando un grosso buffer circolare con tre puntatori: una scrittura e due di lettura. C'erano tre fili di controllo (e alcuni fili codifica accessorie): una scrittura al buffer che pausa se ha raggiunto un punto nel buffer non letto da entrambi gli altri, e due fili lettori che letti dal buffer e scrivere il file / rete (e mettere in pausa se hanno avuto in vista del produttore). Dal momento che tutto è stato scritto e letto come cornici, spese generali di sincronizzazione potrebbe essere ridotto al minimo.

Il mio produttore era un transcoder (da un'altra fonte file), ma nel tuo caso, si consiglia la fotocamera per produrre telai interi in qualsiasi formato normalmente fa e solo fare il transcodifica (con qualcosa come ffmpeg) per il server, mentre il robot elabora l'immagine.

Il tuo problema è un po 'più complesso, però, dal momento che il robot ha bisogno di feedback in tempo reale in modo da non mettere in pausa e attendere che il server di streaming per recuperare. Così si potrebbe desiderare di ottenere fotogrammi al sistema di controllo il più velocemente possibile e buffer alcuni in un buffer circolare separatamente per lo streaming al "pannello di controllo". Alcuni codec gestire i frame meglio di altri caduto, per cui se la rete ottiene dietro si può iniziare sovrascrivere fotogrammi alla fine del buffer (facendo attenzione a non stanno lette).

Quando si dice 'una nuova porta video' e poi comincia a parlare di vlc / gstreaming sto trovando difficile capire ciò che si desidera. Ovviamente questi pacchetti software vi assisterà in streaming e la compressione tramite una serie di protocolli, ma chiaramente avrete bisogno di una 'porta di rete' non è una 'porta video' per inviare il flusso.

Se ciò che si intende è l'invio in uscita display tramite video senza fili / feed tv che è un altro discorso, ma avrete bisogno di consigli da esperti di hardware, piuttosto che esperti di software su questo.

Passando. Ho fatto un sacco di streaming su protocolli MMS / UDP e vlc lo gestisce molto bene (come server e client). Tuttavia è progettato per i desktop e non può essere il più leggero che si desidera. Qualcosa come gstreamer, mencoder o ffmpeg sulla mano sopra sta per essere meglio credo. Che tipo di CPU non il robot ha? Avrete bisogno di un po 'di grugnito se avete in programma di compressione in tempo reale.

Sul lato client penso troverete una serie di widget per gestire video in GTK. Vorrei guardare in quella prima di preoccuparsi dettagli dell'interfaccia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top