2014-05-13 28 views
5

Vorrei trasferire la webcam di un utente (dal browser) a un server e ho bisogno che il server sia in grado di manipolare lo stream (eseguire alcuni algoritmi C su quel video flusso) e inviare all'utente le informazioni di ritorno.Come eseguire lo streaming della webcam sul server e manipolare lo streaming

Ho esaminato pesantemente WebRTC e MediaCapture e ho letto gli esempi qui: https://bitbucket.org/webrtc/codelab/overview.

Tuttavia, questo è fatto per chat video peer-to-peer. Da quanto ho capito, MediaStream di getUserMedia viene trasmesso tramite una RTCPeerConnection (con addStream); quello che mi piacerebbe sapere è: posso usare questo, ma elaborare il flusso video sul server?

Grazie in anticipo per il vostro aiuto

+0

Sì, è possibile inviare e manipolare su un server :). Quali domande specifiche avete su di esso? Ci sono numerosi server MCU là fuori (controlla il licodo) –

+0

Grazie per la risposta. Bene, questo esempio sembra adatto allo streaming di video peer to peer (anche se non sono ancora riuscito a farlo funzionare:/...). Quello che devo fare e non riesco a vedere come è lo streaming della webcam dell'utente su un server e manipolare il flusso video: come/dove accedo allo stream (non posso certo avere un browser in esecuzione nel server). Non vedo da nessuna parte nel codice di esempio in cui ho accesso "fisico" ai dati! – nschoe

+1

non utilizzi l'API del browser, dovresti utilizzare [l'API WebRTC nativa c/C++] (https://code.google.com/p/webrtc/source/checkout) e puoi ricevere una chiamata da un browser a quell'app che costruisci quella API nativa e manipola da lì. –

risposta

7

Ecco la soluzione che ho progettato. I post qui per le persone che cercano lo stesso tipo di informazioni :-)

anteriore lato End

io uso l'API WebRTC: ottenere flusso di webcam con getUserMedia, aperta RTCPeerConnection (e RTCDataChannel per informazioni lato negativo). Lo stream è crittografato con DTLS (obbligatorio), i flussi multimediali utilizzano RTP e RTCP. Il video è codificato VP8 e l'audio in Opus è codificato.

Back End lato

sul backend, questa è la parte complessa. La migliore (ancora) alternativa che ho trovato è la Janus Gateway. Ci vuole un sacco di cose, come l'handshake DTLS, il demuxing RTP/RTCP, ecc. Fondamentalmente, lancia un evento ogni volta che viene trasmesso un pacchetto RTP. (I pacchetti RTP sono tipicamente la dimensione del MTU, quindi c'è non un mapping 1: 1 tra i frame video e i pacchetti RTP).

Ho quindi creato un GStreamer (versione 1.0) per depacketizzare i pacchetti RTP, decodificare il VP8, garantire ridimensionamento video e conversione spazio/colore per emettere una matrice BGR (compatibile con OpenCV). C'è un componente AppSrc all'inizio della pipeline e un AppSink alla fine.

Ciò che resta da fare

devo prendere misure supplementari per garantire una buona scalabilità (discussioni, perdite di memoria, ecc) e trovare un modo pulito ed efficiente di utilizzare la libreria C++ che ho dentro questo programma.

Spero che questo aiuti!

+0

Potete per favore fornirmi un esempio di ciò che avete fatto? Sono molto interessato a questa idea e lavoro per implementarlo. – Dabbas

+2

Mi dispiace @Dabbas, non lavoro presso la società per la quale stavo sviluppando la soluzione, ma se si prende il tempo necessario per implementare ogni passaggio con attenzione, si dovrebbe essere in grado di raggiungere questo obiettivo. Trovo che molte persone lottino con WebRTC, così ho iniziato a scrivere articoli molto dettagliati su http://nschoe.com, finirò per parlare di un codice come questo, anche se in un piccolo momento. Al momento è un po 'inattivo, ma dovrei farlo rivivere presto :-) Meglio di speranza. – nschoe