为了我,我正在逐步测试 WebRTC 程序。
我为无服务器 WebRTC 编写了一些测试站点。
http://webrtcdevelop.appspot.com/
其实用的是google的STUN服务器,只是没有部署信令服务器。
会话描述协议 (SDP) 是手动交换的,即在浏览器窗口之间复制粘贴。



到目前为止,这是我用代码得到的结果:
'use strict';
var peerCon;
var ch;
$(document)
.ready(function()
{
init();
$('#remotebtn2')
.attr("disabled", "");
$('#localbtn')
.click(function()
{
offerCreate();
$('#localbtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
$('#remotebtn2')
.removeAttr("disabled");
});
$('#remotebtn')
.click(function()
{
answerCreate(
new RTCSessionDescription(JSON.parse($('#remote')
.val())));
$('#localbtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
});
$('#remotebtn2')
.click(function()
{
answerGet(
new RTCSessionDescription(JSON.parse($('#remote')
.val())));
$('#remotebtn2')
.attr("disabled", "");
});
});
var init = function()
{
//offer------
peerCon =
new RTCPeerConnection(
{
"iceServers": [ …Run Code Online (Sandbox Code Playgroud) 我已经安装了开源的 TURN 服务器(rfc5766-turn-server),我使用以下命令运行它
sudo turnserver -L my.domain.in -a -b /usr/local/etc/turnuserdb.conf -f -r domain.in
这是我在终端中得到的输出,
RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server
Version Citrix-3.1.5.0 'Arch Lector'
0:
==== Show them the instruments, Practical Frost: ====
0: TLS supported
0: DTLS supported
0: Redis is not supported
0: PostgreSQL is not supported
0: MySQL is not supported
0: OpenSSL version: fresh enough
0: TURN Network Engine version: 2.5
=====================================================
0: Config file found: /usr/local/etc/turnserver.conf
0: ERROR: Cannot add a listener address: qeee.rtbi.in
0: Config file …Run Code Online (Sandbox Code Playgroud) 我想创建简单的视频聊天应用程序。我在 Node.js 中使用 WebRTC 和 WebSockets。我想在同一个网络中连接两个设备,但 iceConnectionState 一直保持“检查”状态。可能是什么问题呢?
服务器.js
//var uuid = require('uuid');
var fs = require('fs');
var webSocketServer = require('websocket').server;
var cfg = {
ssl: false,
port: 15555,
ssl_key: '/etc/apache2/ssl/apache.key',
ssl_cert: '/etc/apache2/ssl/apache.crt'
};
var httpServer = (cfg.ssl) ? require('https') : require('http');
var server = null;
if(cfg.ssl) {
server = httpServer.createServer(
{
key: fs.readFileSync(cfg.ssl_key),
cert: fs.readFileSync(cfg.ssl_cert)
}, function() {} ).listen(cfg.port);
} else {
server = httpServer.createServer().listen(cfg.port);
}
var wsServer = new webSocketServer({
httpServer: server
});
rooms = {};
// …Run Code Online (Sandbox Code Playgroud) 我一直在开发一个使用WebRTC并用作Java Websocket信令服务器的视频聊天应用程序。
该应用程序正在成功运行Tomcat。
目前我正在使用 \xe2\x80\x8b Google 的 STUN 服务器。
\n\n\n\n\nvar pc_config = {"iceServers": [{"url":\n "stun:stun.l.google.com:19302"}]}; var pc = new\n RTCPeerConnection(pc_config);
\n
我不想像上面那样在公共或第 3 方 STUN 服务器上进行中继。
\n\n由于我的应用程序将发布到具有专用域的公共 Tomcat 服务器。我想使用/设置我自己的 STUN 或 TURN 服务器。
\n\n我可以用 Tomcat 做到这一点吗?
\n是否有任何稳定的开源库可用于此?
如果有的话,请给我举一个例子。
\n在使用 Chrome 62.0.3202.89 的 MacBook 10.12.6 上使用 Trickle ICE 测试 STUN & TURN 服务器 (CoTurn) 时,我没有得到任何候选者:
\n\nhttps://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
\n\n和:
\n\nstun:<ip-adres>:3478\nturn:<ip-adres>:3478 [username:test] \nRun Code Online (Sandbox Code Playgroud)\n\n在 Digital Ocean 上,我创建了一个 Droplet Ubuntu 16.04.3 x64 并安装了 CoTurn 版本 4.5.0.3,执行以下操作:
\n\nsudo apt-get update\nsudo apt-get install coturn\nRun Code Online (Sandbox Code Playgroud)\n\n默认情况下,防火墙处于非活动状态。
\n\n接下来,我编辑sudo vi /etc/turnserver.conf并给出以下选项:
fingerprint\nlt-cred-mech\nuser=username:test\nrealm=<ip-adres>\nlistening-ip=<ip-adres>\nrelay-ip=<ip-adres>\nexternal-ip=<ip-adres>\nRun Code Online (Sandbox Code Playgroud)\n\n接下来,我编辑sudo vi /etc/default/coturn并取消注释该选项:
TURNSERVER_ENABLED=1\nRun Code Online (Sandbox Code Playgroud)\n\n然后我启动 Coturn 守护进程:
\n\nsudo systemctl start coturn\nsudo systemctl status coturn\nRun Code Online (Sandbox Code Playgroud)\n\n这给出了输出:
\n\n\xe2\x97\x8f coturn.service - …Run Code Online (Sandbox Code Playgroud) 我试图了解 WebRTC 的工作原理,但在理解 STUN 的作用时遇到了麻烦。
根据我在各种网页(例如rfc5389 )上阅读有关 STUN 的内容,或在 WebRTC 上观看Google 2013 年的演示,STUN 似乎唯一能做的就是告诉客户端它的公共 IP 地址/端口是什么。
然而,看看如何实现 STUN 服务器表明他们涉及更多,并且似乎包括诸如对 UDP、TCP 和 TLS-TCP 的故障回复支持之类的东西,以及客户端和服务器报告他们什么的握手期望他们的 IP 地址是,并根据对方所说的 IP 地址进行验证。例如,有趣的是,jselbi 的 stunserver 项目有超过 50 个 C++ 文件。
此外,我不明白为什么 WebRTC 客户端甚至需要知道自己的公共 IP 地址。在Google 的演示视频(时间 19:46)中,两个对等方想要从 NAT 后面相互通信,并且每个对等方还与信令服务器进行通信。该图表明每个信令服务器不知道对等方的公共 IP 地址/端口。但是这个图肯定是错误的:它显示了对端直接与信令服务器通话,但通过 NAT 间接与 STUN 服务器通话。实际上,对等方也将通过 NAT 与信令服务器通信,因此,信令服务器已经知道对等方的公共 IP 地址/端口。
由此,我遇到的问题是:
从客户端到信令服务器的任何请求都将在请求的 IP 标头中包含该客户端的公共 IP 地址/端口。客户端与 STUN 服务器通话时也是如此,这就是为什么 STUN 服务器可以用公共 IP 地址/端口进行响应的原因......是吗? …
我正在寻找一种解决方案,以使用UDP或TCP在NAT **分离的Android终端或节点之间交换信息。
为了实现STUN服务器和NAT遍历,我使用了开放源代码。
STUN服务器软件即STUNTMAN。
在客户端A&B的 Android端上,为了从** STUNTMAN ** 获得Public IP:PORT ,我已经集成;
“ JSTUN”是基于Java的STUN客户端。
在Client-A,来自** STUNTMAN Server ** 的示例结果类似;
stunclient --mode full --localport 9999 stun.stunprotocol.org
Binding test: success
Local address: 192.168.1.8:9999
Mapped address: 1.2.3.4:9999
Behavior test: success
Nat behavior: Endpoint Independent Mapping
Filtering test: success
Nat filtering: Address and Port Dependent Filtering
Run Code Online (Sandbox Code Playgroud)
为了在Android客户端之间进行点对点通信,我维护了一个信令服务器,该服务器可以在客户端A和B之间准确共享映射地址。
但是,当我尝试使用作为通信协议的UDP或TCP套接字启动对等通信时,它们之间没有这种通信。
我无法理解我在哪里做错了?我也尝试过这种解决方案:
我在我的一个项目中使用RTCmulticonnection一切正常,除非它不能在不同的网络上工作。我已经经历了Github 问题,该问题表明它需要转向服务器才能在不同的网络上运行它。但我已经根据文档配置了转向服务器。
这是我的代码
<script src="https://rtcmulticonnection.herokuapp.com/dist/RTCMultiConnection.min.js"></script>
<script src="https://rtcmulticonnection.herokuapp.com/socket.io/socket.io.js"></script>
<script>
var connection = new RTCMultiConnection();
// this line is VERY_important
connection.socketURL = 'https://rtcmulticonnection.herokuapp.com:443/';
// if you want audio+video conferencing
connection.session = {
audio: true,
video: true
};
// first step, ignore default STUN+TURN servers
connection.iceServers = [];
// second step, set STUN url
connection.iceServers.push({
urls: 'stun:mydimain.com:3478'
});
// last step, set TURN url (recommended)
connection.iceServers.push({
urls: 'turn:mydimain.com:3478',
credential: 'mypassword',
username: 'myusername'
}); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 WebRTC 将视频流式传输到浏览器。我收到的错误是WebRTC: ICE failed, add a STUN server and see about:webrtc for more details. 这对我来说有点令人惊讶,因为在我的代码中,我在对等连接的配置对象中提到了谷歌 STUN 服务器之一,如下所示:
const config = {
iceServers: [
{
urls: ['stun:stun.l.google.com:19302']
}
]
};
Run Code Online (Sandbox Code Playgroud)
我已经在 PC 上对此进行了测试,该项目正在运行并且能够在那里看到流。现在我想通过 ssh 隧道访问该网站。我转发了端口,现在可以在浏览器中打开 localhost:4000 并查看网站,但是视频不会显示,我会收到所描述的错误。
如何将视频也传输到远程 PC,或者为什么它无法通过 ssh 隧道工作?提前致谢!
我读过ICE是 WebRTC 服务器上的代理,它将用户的 SDP 信息发送到 STUN 或 TURN 服务器。
STUN 和 TURN 服务器提供此 SDP 信息并为用户建立 P2P 连接。
真的吗?
那么,STUN 和 TURN 服务器之间的确切区别是什么?
如果ICE代理配置了TURN服务器,数据流会发生什么?在这种情况下,TURN 只是充当数据报转发器?