Quora上有人问了这个问题,但没有人回答。除了更改jsSip的源代码之外,还有什么解决方案吗?
问题是,大多数使用webRTC的JS SIP库都是通过websocket(RFC 7118)实现的。因此,Chrome现在要求getUserMedia接口在https上运行,这对SIP服务器端提出了额外的要求。SIP服务器还必须支持websocket、SRTP、DTLS等。
如果SIP呼叫是通过浏览器进行的,那么所有这些都是有意义的,无论是作为通过网页进行webRTC或非webRTC电话呼叫的信号机制。
然而,当SIP服务器在本地网络上并且SIP呼叫必须从应用服务器发起时,所有这些要求都不再适用。应该可以通过纯UDP进行JS SIP调用,而不需要使用SIP服务器运行http服务器,因为在我的案例中,http服务器与应用程序服务器本身集成在一起。
Scenario 1 as supported bymost JS SIP libraries:
JSSIP (in HTML page <------>websockets<---->[http-builtin with SIP server]<---->PSTN
Scenario 2 which applies to the question:
JSSIP (in HTML page <--https---->app-server with https-server<----local net--->[SIP server] <-----> PSTN
看起来你已经构建了自己的,但我在寻找类似的东西,发现了:https://github.com/davehorton/drachtio
我还没有尝试过,但它被设计成nodejs服务器上的中间件,看起来它支持旧的非websockets模型。
我建议为此获得一个WebRTC到SIP网关,因为这将解决您的所有问题。使用websocket或其他协议进行信令与媒体处理无关。您仍然需要DTLS/STP。纯UDP/RTP无法与WebRTC配合使用。