这是我提出的another question的后续行动,但有更准确的信息。
我有两个基本相同的网页,用于演示WebRTC,一个使用XSockets作为后端信令层,另一个使用SignalR作为后端信令层。
这两个后端基本相同,只是在它们(显然)有不同的方式将数据发送到客户端的点上有所不同。同样,两个客户端上的TypeScript / JavaScript WebRTC代码完全相同,因为我已经抽象出了信令层。
问题是XSockets站点工作一致,而SignalR站点失败(大多数是一致的,但并非完全)。通常在调用peerConnection.setLocalDescription()
时失败,但它也可以无声地失败;或者它(有时)甚至可以工作。
您可以在此处看到两个不同的页面:
XSockets网站:http://xsockets.demo.alanta.com/
SignalR网站:http://signalr.demo.alanta.com/
两者的源代码均为https://bitbucket.org/smithkl42/xsockets.webrtc,xsockets
分支上的XSockets版本和signalr
分支上的SignalR版本。
所以我的问题是:有没有人知道为什么使用一个信号层而不是另一个信号层会对WebRTC产生任何影响?例如,一个或另一个发回Unicode字符串而不是ANSI吗?或者我误解了这个问题,真正的区别在于其他地方?
答案 0 :(得分:2)
想出来。事实证明,SignalR 1.0 RC1中有一个错误,它将字符串中的任何“+”更改为空格。因此,SDP中的行看起来像这样:
a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z
变成了这个:
a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z
但是因为不是每个SDP在关键线上都有“+”,所以有时它会起作用。一切都解释了。
已向使用SignalR的好人报告了该错误(请参阅https://github.com/SignalR/SignalR/issues/1194),与此同时,围绕相关字符串的简单encodeURIComponent()
和decodeURIComponent()
修复了该错误。