2017-03-04 8 views
3

Ich benutze WebRTC und Peer-Verbindung mit einer Selbst-Implementierung von SIP mit Websockets.Ist es möglich, webRTC Cross-Browser zu verwenden?

Wenn ich den Fluss teste, bin ich in der Lage, sowohl Remote- als auch lokale Streams auf jedem Peers zu streamen und zu sehen. Bei diesem Test gibt es im selben Browser verschiedene Tabs für jeden Peer. Test in Firefox und Chrome erfolgreich

Wenn ich den Test einen Peer in Firefox und einen anderen Peer in Chrome, oder umgekehrt, dann kann ich nicht lokalen Stream sehen, aber ich kann mit Remote.

In der Konsole werden keine Ausnahmen oder Fehler angezeigt. In welchen Fällen schlägt der Stream fehl, wenn ein Peer und ein anderer Peer in verschiedenen Browsern verwendet werden, aber alle im selben Browser funktionieren?

Was kann ich tun, um dies zu debuggen?

+1

Beginnen Sie mit der Verwendung von adapter.js - das ist praktisch obligatorische Verwendung für WebRTC in diesen Tagen (https://github.com/webrtc/adapter). Warum nicht SIP.js verwenden? Was stimmt damit nicht? –

+0

testen Sie auf einer Maschine mit nur einer einzigen Webcam? Dann kann Chrome nicht auf die Webcam zugreifen, während Firefox sie verwendet. Die einfachsten Optionen sind entweder eine andere Webcam anzuhängen oder Firefox zu ändern, um ein gefälschtes Gerät zu verwenden, indem man eine neue Einstellung erstellt media.navigator.streams.fake auf true setzen in: config –

+0

@PhilippHancke danke für diese Information, du hilfst mir Menge. –

Antwort

0

Ich wette, es gibt ein SDP-Kompatibilitätsprobleme zwischen Browsern, wenn Sie es als SIP über Websocket in Ihrer Implementierung versuchen. Sie müssen versuchen, Open-Source-Bibliotheken wie SIPjs, JSsip, SIPml5, die bereits SIP über Websocket tun.

In der Konsole werden keine Ausnahmen oder Fehler angezeigt.

Stellen Sie sicher, dass Sie während des Zugriffs auf webRTC-APIs alle möglichen Fehlerfälle auf catch(err) protokolliert haben.

Online-Demo von JSsip https://tryit.jssip.net/

+0

Mein webscoket Server übergibt nur SDP (erzeugt in jedem Browser) von einem Peer zum anderen. Es gibt nur diese Informationen weiter, ohne sie zu ändern. Beide SDP werden dann fehlerfrei in den Konstruktor der Peerconnection-Instanz übergeben. –

+0

@DidacHerrera Versuchen Sie https://apprtc.appspot.com/params.html im Nur-Audio-Modus mit FireFox und Chrome zu sehen, funktioniert Audio –

+0

Debuggin Ich fand, dass wenn der Angerufene (also der Anrufer auf dem anderen Browser hat bereits den Stream actived und auf Video-Element gezeigt) ist das lokale Medium, das Objekt wird erstellt, aber mit Attribut active = false. Das ist der Grund, warum die Peer-Verbindung erfolgreich ohne Fehler erstellt wurde, aber ich kann den Angerufenen-Stream nicht sehen ... Dieses Attribut ist nur lesbar, so dass ich es nicht erzwingen kann. Wer könnte es sein? Warum, wenn ein Stream in dem einen Peer aktiv ist, erstellt der andere Peer ein inaktives Mediastream-Objekt? –

0

WebRTC ist sowohl in Chrome und Firefox verfügbar, aber die einige der APIs sind unterschiedlich. Sie müssen einen Adapter schreiben oder eine vorhandene WebRTC-Adapterbibliothek verwenden, um die Kompatibilität zwischen diesen beiden zu gewährleisten.

Zum Beispiel kann ein einfacher Adapter würde wie folgt aussehen:

var MediaStream = $window.webkitMediaStream || $window.MediaStream; 
var PeerConnection = $window.mozRTCPeerConnection || $window.webkitRTCPeerConnection || $window.RTCPeerConnection; 
var IceCandidate = $window.mozRTCIceCandidate || $window.webkitRTCIceCandidate || $window.RTCIceCandidate; 
var SessionDescription = $window.mozRTCSessionDescription || $window.webkitRTCSessionDescription || $window.RTCSessionDescription; 

würde ich empfehlen, eine Adapter-Bibliothek wie https://github.com/webrtc/adapter verwenden, damit Sie nicht von Hand müssen alle Grenzfälle behandeln.

Hoffe, das hilft.

+0

Beachten Sie, dass 'msRTCPeerConnection' und' msRTCSessionDescription' keine Sache sind. Niemals. Ich bezweifle auch, dass 'webkitRTCSessionDescription' jemals existiert hat. – jib

+0

Danke, dass du @jib darauf hingewiesen hast, mein eigener Adapter war ziemlich alt. Ich verwende momentan den WebRTC-Adapter von https://github.com/webrtc/adapter. –

+0

@jib Ich benutze adapter.js, um dies zu tun. Mein Javascript, das gleiche Skript, funktioniert sowohl in Firefox als auch in Chrome gut, ohne es zu verändern. Das Problem tritt auf, wenn ein Peer in Chrome und der andere Peer in Firefox ist. Der Remote-Stream wird nicht angezeigt, obwohl er empfangen wurde. Der Onaddstream wird ausgelöst, wenn ein Remote-Stream kommt, aber er wird nicht im HTML-Videoelement angezeigt, wenn er ihm zugewiesen wird. Ich habe versucht zu debuggen, aber es wird kein Fehler angezeigt. Ich benutze Adapter, das funktioniert gut, wenn beide Peers im selben Browser sind, aber nicht wenn auf Peer (Anrufer o callee) in einem anderen Browser als der andere Peer ist. –

Verwandte Themen