2015-11-28 2 views
5

Ich muss einen benutzerdefinierten WebRTC-Peer entwickeln (Ich muss eine Audio- oder/und Datenverbindung zwischen Web-Browser und Nicht-Browser herstellen). Ich habe jedoch Schwierigkeiten, eine korrekte, klare Beschreibung der Handshake-Phase zu finden.Wie sieht der WebRTC Peer-Verhandlungs-Workflow aus?

Antworten auf Fragen wie How to create data channel in WebRTC peer connection? sind nicht ganz hilfreich, da sie nicht zu detailliert sind. Insbesondere sagen sie nichts über SDP-Inhalte.

Kann jemand dies erklären oder eine gute Dokumentation empfehlen?

+0

Beziehen Sie sich auf Signalisierung? – nick

+0

Ja. Ich verstehe, dass es meine Aufgabe ist, einen Kanal zu erstellen, der anfänglich Angebote/Antworten an Peers liefert, aber ich kann keine detaillierten Anweisungen finden, wie diese Nachrichten aufgebaut werden sollten. – mspanc

+1

Starten von ICE: https://tools.ietf.org/html/rfc5245 - es deckt auch grundlegende Momente auf SDP ab. Grundsätzlich müssen Sie von ICE und STUN/TURN starten und dann mit SDP fortfahren. Zu diesem Zeitpunkt wäre Ihre App in der Lage, mit SDP-Paketen auszutauschen und die Signalisierungsphase zu durchlaufen. Danach müssen Sie die DTLS-Protokollunterstützung für Ihren Client implementieren. Und dann SRTP/SCTP. – fycth

Antwort

8

Here is a page with some graphs showing how the signaling process works. Im Grunde genommen stellen Sie zuerst einige Client-Seiten ein:

  • PeerConnectionFactory; um PeerConnections zu erzeugen,
  • PeerConnection; eine für jede Verbindung zu einem anderen Peer, den Sie möchten (normalerweise 1),
  • MediaStream; um Audio und Video von Ihrem Clientgerät zu verbinden.

Dann erzeugen Sie eine SDPoffer

peerConnection.createOffer(); 

auf der Anruferseite und an den Angerufenen senden. Der Angerufene setzt dieses offer

peerConnection.setRemoteDescription(insert-the-offer-here); 

und erzeugt ein SDPanswer

peerConnection.createAnswer(); 

und sendet sie zurück an den Anrufer. Der Anrufer erhält diese answer und stellt sie ein.

peerConnection.setRemoteDescription(insert-the-answer-here); 

Sowohl der Anrufer und Angerufener einen Aufruf an

onAddStream() {...} //needs to be implemented in your code 

Der Angerufene erhalten, wenn die offer des Anrufers festgelegt ist und der Anrufer, wenn der Angerufenen answer gesetzt. Dieser Rückruf signalisiert den Beginn der Verbindung.
Sie können auch ICE (STUN/TURN) verwenden, um firewall und NAT Probleme zu vermeiden, aber das ist optional. Im Produktionscode möchten Sie es wahrscheinlich trotzdem implementieren.

Hinweis: WebRTC Dokumentation ist knapp und können sich ändern, nehmen Sie alles, was Sie über WebRTC lesen (zumindest etwas ab sofort geschrieben) mit einem Körnchen Salz ...