使用webRTC建立信令服务器

15
如何为在本地局域网中连接的WebRTC设置信令服务器?是否必须使用STUN和TURN服务器进行信令?
3个回答

14
为了让WebRTC在局域网上运行,您需要在该局域网中拥有一个信令服务器。信令服务器是任何允许您的Web客户端交换由WebRTC PeerConnection生成的SDP offer/answer和ICE candidate的Web服务器。这可以使用AJAX或WebSockets完成。
我列出了一些WebRTC信息的顶级来源。请阅读该页面上的一些链接,以更好地了解WebRTC信令的工作原理。
不需要STUN/TURN服务器,因为您的WebRTC客户端(即Web浏览器)将位于局域网中并且彼此可访问。FYI... STUN/TURN服务器不属于信令的一部分,而是媒体路径的一部分,通常用于媒体的NAT穿越

1
非常好的解释..谢谢..我一直以为STUN/TURN是信令的一部分,而且我必须拥有它们。 - McLan

9

Webrtc 需要一种信令系统进行初始协商,例如传输 SDPICE-candidates,发送和接收 offers 等。其余内容通过点对点连接完成。对于初始信令,您可以使用任何技术,如发送 AJAX 调用,使用 socket.io 等。

NAT 穿透需要 STUN 和 TURN 服务器,它很重要因为需要确定对等方之间的路径。您可以使用谷歌提供的 STUN/TURN 服务器地址 stun:stun.l.google.com:19302,或者通过使用 rfc-5766 turn 服务器 来配置自己的 turn 服务器。


4
谷歌提供STUN服务器,但该地址的服务器不起作用作为TURN服务器。TURN是一个比较需要服务器支持的协议;据我所知,目前没有公开可用的免费TURN服务器。另外,STUN对92%的情况已经足够了,而TURN将处理剩下的8%。如果您只在局域网上使用服务,则可能只需使用谷歌的公共STUN即可。 - Mack
@ Mack,我可以问一下你从哪里得到了92%和8%的数字吗?我已经寻找这些信息有一段时间了,很想知道来源。谢谢。 - dennyp
一个用于协调点对点连接,另一个是代理备用。92% 能够穿越 NAT(或其他)并使用点对点连接听起来不错。 - xendi
在我看来,楼主已经知道在局域网中使用STUN和TURN并不是必须的(这就是他问是否“强制”的原因)。@Deep Pai给出了直接的答案(“在局域网中你不需要STUN/TURN服务器…”)- 我认为这个回答更加简洁和恰当,比重申STUN和TURN是什么要好。 - Damilola Olowookere

0
制作WebRTC信令服务器非常容易。 我使用PHP、MYSQL和AJAX来维护信令数据。 假设A想要呼叫B。
然后,A使用createOffer方法创建一个offer对象。这个方法返回一个offer对象。 您必须将此offer对象传输给用户B,这是信令过程的一部分。
现在创建MYSQL数据库,具有以下列: caller、callee、offer、answer、callerICE和calleeICE
现在,由A创建的offer存储在offer属性中,借助AJAX调用。
(记得在“POSTing”对象到服务器之前使用JSON.stringify JS对象。)
现在,用户B通过再次使用AJAX调用扫描由呼叫者A创建的此offer属性。
通过这种方式,由用户A创建的offer对象可以到达用户B。
现在,用户B通过调用createAnswer方法响应该offer。该方法返回一个answer对象。这可以再次存储在数据库的“answer”属性中。 然后,呼叫者A扫描由被叫方B创建的“answer”属性。
通过这种方式,由B创建的answer对象可以到达A。

为了存储代表主叫方A的iceCandidate对象,请使用MYSQL表的"callerIce"属性。请注意,被叫方B正在扫描"callerIce"以了解主叫方A的详细信息。 通过这种方式,我们可以传输代表未来对等方的iceCandidate对象。

在完成iceCandidate对象的传输后,connectionState属性将保持"connected",表示两个对等方已连接。

如果有任何问题,请告诉我!

干杯!您现在可以将本地媒体流共享给远程对等方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接