WebRTC Browser to Server Kommunikation

  • Themenstarter Themenstarter Fluffy
  • Beginndatum Beginndatum
F

Fluffy

Guest
Hallo!
Ich hab glaube ich einen Knoten im Kopf.
Ich habe mittels NodeJS und Socket.IO eine Chat-Appliakation gebaut.
Räume, Einladungen zum privaten Chat etc. läuft gut.
Nun wollte ich die Funktionalität um Audio- & Video-Funktionalität erweitern.
Peer-Verbindungen bekomme ich hin.
Kann also Audio und Video von einem Browser zum Anderen streamen.
Ich würde aber gerne den Datenstrom ebenfalls über den Server laufen lassen.
Da Socket.IO ja Websockets benutzt macht es wenig Sinn als Singaling-Kanal Socket.IO zu verwenden, nur um dann nochmal eine WebSocket-Verbindung(Browser-Browser) aufzubauen, ohne Socket.io, da ich ja schon einen WebSocket-Verbindung habe.

Ich finde aber nur Implementierungen für Peer2Peer-Verbindungen.
Websockets müssen aber nicht Browser als Endpunkte haben.
Gibt es also i.w. eine Referenzimplementierung für TURN- und ohne STUN-Server?

Was ich also suche ist:
a) eine Referenzimplementierung für TURN-Server, nach Möglichkeit ohne einen bestimmten Kommunikationskanal
oder
b) eine Möglichkeit die rohen Daten der Kamera/des Mikrophons in kleinen Packeten abzugreifen, so das ich sie verschicken
kann.
Code:
FileReader.readAsX()
kommt erst nach Streamende zurrück und window.URL.createObjectURL() nimmt laut Dokumentation
zwar Blob entgegen aber der Stream der bei navigator.getUserMedia zurückkommt ist nicht vom Typ Blob und besitzt die Methode slice() auch nicht.

Die Refernzimplementierungen, die ich gesehen habe, setzten entweder Nightly voraus oder aber sind was Chrome angeht bzgl. der Verarbeitung von Videostreams beschnitte, da sie auf MediaRecorder() augsetzten.

Gruß

Fluffy
 
Zuletzt bearbeitet von einem Moderator:
Nach einigem Recherchieren und Trial'n'Error benutze ich nun ein Canvas-Element.

Ist zwar blöd was die Bandbreite angeht, da ich dann eine Matrix verschicke und nicht nur einen Datenstrom, aber bis der MediaRecorder benutzbar wird, ist es für mich eine akzepable, plattformunabhängige Lösung, ansonsten kann ich noch meine Mathematikkenntnisse bzgl. Matrizen aufpolieren.
Für Leute die ebenfalls vor dem Problem stehen hier der Code zum Verschicken von Matrizen(socketIO-Verbindung besteht schon und play() wurde auf dem video-Element aufgerufen, um ein Life-Bild zu erhalten)
PHP:
        var canvasContext = $canvas[0].getContext('2d');
        // reads the canvas in 20 ms
        setInterval(function () {
            canvasContext .drawImage($ouputElementOwnStream[0],0,0);
            IOSocket.emit('sendingMatrix', canvasContext .getImageData(0,0,20,20));
        }, 20);

Und hier etwas Hintergrundinformationen dazu:
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#drawImage()

Gruß

Fluffy
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben