2012-12-20 9 views
6

Jest to kontynuacja do another question Zapytałem, ale z bardziej precyzyjnymi informacjami.Używanie SignalR jako warstwy usługi dla WebRTC

Mam dwie zasadniczo identyczne strony internetowe, które demonstrują WebRTC, jeden używający XSockets jako warstwę sygnalizacji zaplecza i jeden używający SignalR jako warstwy sygnalizacji zaplecza.

Dwa serwery pocztowe są zasadniczo identyczne, różniące się jedynie punktami, w których (oczywiście) mają różne sposoby wysyłania danych do klienta. Podobnie kod WebRTC TypeScript/JavaScript na dwóch klientach jest całkowicie identyczny, ponieważ wydzieliłem warstwę sygnalizacyjną.

Problem polega na tym, że strona XSockets działa konsekwentnie, a witryna SignalR nie działa (w większości konsekwentnie, choć nie całkowicie). Zwykle zawodzi podczas wywoływania peerConnection.setLocalDescription(), ale może również zawieść w trybie cichym; lub może (czasami) nawet pracować.

Widać dwie różne strony w pracy tutaj:

XSockets strony: http://xsockets.demo.alanta.com/

strona SignalR: http://signalr.demo.alanta.com/

Kod źródłowy dla obu jest na https://bitbucket.org/smithkl42/xsockets.webrtc, z wersją XSockets w sprawie Oddział xsockets i wersja SignalR w gałęzi signalr.

Moje pytanie brzmi: czy ktokolwiek wie o jakimkolwiek powodzie, dla którego użycie jednej warstwy sygnału zamiast innej miałoby jakiś wpływ na WebRTC? Na przykład, czy jeden lub drugi odsyła ciągi Unicode zamiast ANSI? Czy też błędnie zdiagnozowałem problem, a prawdziwa różnica jest gdzie indziej?

Odpowiedz

2

Wyliczyłem to. Okazuje się, że SignalR 1.0 RC1 zawiera błąd, który zmienia dowolny znak "+" w łańcuchu na spację. Więc linii w SDP, które wyglądały tak:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z

były coraz zmienia się następująco:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z

Ale ponieważ nie każdy SDP miał „+” w nim na krytycznej linii Czasami to by działało. Wszystko wyjaśnione.

Błąd został zgłoszony do dobrych ludzi pracujących na SignalR (patrz https://github.com/SignalR/SignalR/issues/1194), aw międzyczasie prosty encodeURIComponent() i decodeURIComponent() wokół strun w pytaniu naprawił.

+0

Ken, użyłeś SignalR tylko do sygnalizacji lub do transportu danych wideo/audio? –

+0

@ElanHasson - Tylko do sygnalizacji. WebRTC jest skomplikowany i niekompletnie zaimplementowany (w zasadzie tylko Firefox i Chrome, z pewnymi problemami z interoperacyjnością), ale pozostaje preferowanym transportem dla danych wideo/audio w czasie rzeczywistym. Nie próbowałem używać WebSockets do dostarczania audio/wideo, ale z tego co wiem o jego konstrukcji i typowych implementacjach, myślę, że będziesz miał poważne problemy. I myślę, że długie ankiety, zdarzenia po stronie serwera i inne podobne podejścia byłyby nieoczekiwane. –

+1

Zgadzam się. Właśnie przełączyłem na Flex/Red5 na teraz. Red5 może transkodować strumienie na żywo, które może pochłonąć element wideo w formacie HTML5, z funkcją rezerwową w przeglądarce flash. Zmarłem trochę wewnątrz podczas opracowywania tego rozwiązania. –

Powiązane problemy