2014-05-13 6 views
5

Ich möchte die Webcam eines Benutzers (vom Browser) zu einem Server streamen und ich brauche den Server, um den Stream zu manipulieren (führen Sie einige C-Algorithmen in diesem Video aus) stream) und sendet dem Benutzer Informationen zurück.So streamen Sie die Webcam zum Server und manipulieren Sie den Stream

Ich habe mich intensiv mit WebRTC und MediaCapture befasst und lies die Beispiele hier: https://bitbucket.org/webrtc/codelab/overview.

Allerdings ist dies für Peer-to-Peer Video-Chat gemacht. Soweit ich das verstanden habe, wird der MediaStream von getUserMedia über eine RTCPeerConnection übertragen (mit addStream); Was ich gerne wissen würde ist: kann ich das verwenden, aber den Videostream auf dem Server verarbeiten?

Vielen Dank im Voraus für Ihre Hilfe

+0

Ja, Sie können auf einem Server senden und bearbeiten :). Welche spezifischen Fragen haben Sie dazu? Es gibt zahlreiche MCU-Server da draußen (check out licode) –

+0

Vielen Dank für Ihre Antwort. Nun, dieses Beispiel scheint für Video-Streaming von Peer-to-Peer (s) geeignet zu sein (obwohl ich es immer noch nicht geschafft habe, es zum Laufen zu bringen:/...). Was ich tun und nicht sehen muss, ist, die Webcam des Benutzers auf einen Server zu streamen und den Videostream zu bearbeiten: Wie/wo greife ich auf den Stream zu (ich kann sicher keinen Browser auf dem Server laufen lassen). Ich sehe nirgendwo im Beispielcode, wo ich "physischen" Zugriff auf die Daten habe! – nschoe

+1

Sie würden nicht die Browser API verwenden, sollten Sie die [native c/C++ WebRTC API] (https://code.google.com/p/webrtc/source/checkout) verwenden und Sie können einen Anruf von einem Browser zu erhalten Diese App, die Sie erstellen, dass die native API und von dort aus manipulieren. –

Antwort

7

Hier ist die Lösung, die ich entworfen habe. poste ich hier für die Menschen die gleiche Art von Informationen :-)

Front-End-Seite

Ich verwende den WebRTC-API suchen: Holen Webcam-Stream mit getUserMedia, offenen RTCPeerConnection (und RTCDataChannel für Abwärts Informationen). Der Stream ist DTLS-verschlüsselt (obligatorisch), Multimedia-Streams verwenden RTP und RTCP. Das Video ist VP8-codiert und das Audio in Opus codiert.

Back End Seite

Auf dem Backend, das ist der komplexeste Teil. Die beste (noch) Alternative, die ich finden könnte, ist die Janus Gateway. Es erfordert viele Dinge, wie DTLS-Handshake, RTP/RTCP-Demuxing usw. Grundsätzlich löst es jedes Mal ein Ereignis aus, wenn ein RTP-Paket übertragen wird. (RTP-Pakete sind in der Regel die Größe der MTU, so gibt es nicht eine 1: 1-Zuordnung zwischen Video-Frames und RTP-Pakete).

Ich baute dann einen GStreamer (Version 1.0), um die RTP-Pakete zu entpacken, das VP8 zu dekodieren, Videoskalierung und Farbraum-/Formatkonvertierung sicherzustellen, um eine BGR-Matrix (kompatibel mit OpenCV) auszugeben. Es gibt eine AppSrc Komponente am Anfang der Pipeline und eine AppSink am Ende.

Was

ich zusätzliche Maßnahmen zu ergreifen, zu tun übrig blieb eine gute Skalierbarkeit (Threads, Speicherlecks, etc.) zu gewährleisten und eine saubere und effiziente Art und Weise der Verwendung der C++ Bibliothek, die ich in diesem Programm finden.

Hoffe, das hilft!

+0

Können Sie mir bitte ein Beispiel dafür geben, was Sie getan haben? Ich bin sehr an dieser Idee interessiert und arbeite daran, sie umzusetzen. – Dabbas

+2

Sorry @Dabbas, ich arbeite nicht bei der Firma, für die ich die Lösung entwickelte, aber wenn Sie sich die Zeit nehmen, jeden Schritt sorgfältig umzusetzen, sollten Sie dies erreichen können. Ich finde, dass viele Leute mit WebRTC zu kämpfen haben, also fing ich an, sehr detaillierte Artikel auf http://nschoe.com zu schreiben. Ich werde am Ende über einen Code wie diesen sprechen, allerdings in einem kleinen Moment. Im Moment ist es ein wenig inaktiv, aber ich sollte es bald wieder aufleben lassen :-) Best of hope. – nschoe

Verwandte Themen