【发布时间】:2014-08-13 20:59:16
【问题描述】:
我有一个非常简单的 webRTC 1 对 1 视频聊天应用程序。它在本地主机上运行良好,但我无法让它在不同的网络上运行。我已经尽可能多地在网上阅读,但似乎没有任何效果。我怀疑我做错了人,也许其他人可以发现它。
我所有的信号似乎都在工作(我有很多调试输出),所以我认为这不是问题。
我在github here 上有所有代码,感兴趣的主要文件是videochat_manager
我想我会总结一下我的过程:
等到房间里有两个人
调用者创建报价描述,并将其发送给应答者
回答者要么接受,要么排队等待回答,直到准备好回答
应答器已准备就绪(已建立对等连接)
应答者设置远程描述
应答者创建应答描述并将其发送给呼叫者
调用者设置远程描述
一旦两个节点都设置了描述,就添加所有候选冰(在队列中)
每当您收到对等远程流时,添加它
这就是我在非常高的水平上所做的事情。有什么明显的错误吗?
编辑
您可以找到demo app here。您可以在地址栏中更改房间
这里有四位候选人在调用者方面。还有两个我没发过
对象{类型:“候选人”,标签:0,id:“音频”,候选人: “a=候选人:2036686134 1 udp 2122260223 10.142.85.73 35544 类型主机 第 0 代↵"}
对象{类型:“候选人”,标签:1,id:“视频”,候选人: “a=候选人:2036686134 1 udp 2122260223 10.142.85.73 35544 类型主机 第 0 代↵"}
对象{类型:“候选人”,标签:0,id:“音频”,候选人: “a=候选人:937861574 1 tcp 1518280447 10.142.85.73 0 类型主机 第 0 代↵"}
对象{类型:“候选人”,标签:1,id:“视频”,候选人: “a=候选人:937861574 1 tcp 1518280447 10.142.85.73 0 类型主机 第 0 代↵"}
...
【问题讨论】:
-
那么,它在同一个网络上有效,但在人们在不同网络上时无效?两者都向信令服务器发送信号好吗?你能看到正在交换的 IceCandidates 吗?
-
@bwtrent 是的,你说的一切都是正确的。我发布了一些冰候选样本
-
正在生成的候选人都没有公共 IP 地址。 ICE 的设置有些奇怪……
-
哦...有趣。我应该寻找什么?他们看起来至少对我来说是公开的哈哈(不是 127.0.0.1 或 192.168.x.x)
-
尝试将你的 ICE 服务器分成不同的对象(我不知道 coffeescript),但是 JS 应该是这样的:
this.pcConfig = { iceServers: [ { url: "stun:stun.l.google.com:19302" }, { url: "turn:numb.viagenie.ca", credential: "drfunk", username: "toadums@hotmail.com"} ] };
标签: javascript coffeescript webrtc