【发布时间】:2020-04-13 03:44:02
【问题描述】:
我有一个可以正常工作的 peerTopeer (P1, P2) webRTC。为了处理 peerTopeer 故障,我正在尝试通过 c# 中的服务器在 Windows 机器上的 P1 和 P2 之间进行简单的字节交换,因为我不想按规范开发转向服务器。我还尝试使用turn message 找到一个开源c# 服务器turn server,但它不起作用(能够解析请求,但响应似乎不被最新的基于铬/MS Edge 铬的接受)
简单的 C# 中继桥服务器:
使用简单的 udp/tcp 侦听器并与对等方交换字节(P1 到 P2 和 P2 到 P1)并强制桥接机器 IP 作为候选 我能够实现连接和流数据(字节)的交换。 但是,无法在对等方上看到视频/听到音频,并且在进行了一些交换之后,连接被丢弃,客户端连接状态失败。
第一季度。应该可以了,怎么回事?
第二季度。任何 stun and turn 的开源 c# 实现(简单)?
感谢您在这方面的任何帮助。
服务器和客户端代码示例:
监听 tcp / udp(不在示例中)
public void ListenTCP(int port) {
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
while (true){
TcpClient tcpClient = listener.AcceptTcpClient();
..........add endpoint to list
var bytes = readfromtcpstream.......;
Task.Run(() => ProcessData(tcpClient.Client.RemoteEndPoint, bytes));
}
}
ProcessData(交换流字节)
private void Process_DATA(IPEndPoint fromEndPoint, byte[] bytes) {
foreach (var endpoint in list) { //distribute to all other peers
if (endpoint == fromEndPoint) continue;
endpoint's TCPClient.Send(bytes);
}
}
在客户端(Javascript / typescript),强制候选人作为桥接服务器
SignalType.Candidate...
candidate = new RTCIceCandidate(Switch the SDP(messageJson.candidate,
BridgeServerAddress, "2525", "tcp"));
m_PeerConnection.addIceCandidate(candidate)
【问题讨论】:
-
您是否正在尝试将您的信令服务器与 TURN 复用?
-
我正在尝试使用 TURN 之类的服务器多路复用流数据,类似于 SFU 盒或那种但非常简单的服务器
-
TURN is 用于在由于 NAT 故障而无法直接连接的对等方之间建立流数据隧道。当您说“流数据”时,您指的是信令过程吗?
-
不,信号不是问题。它是一个没有 TURN 的“PeerBridgePeer”。如果这无法实现,我也在寻找在 C# 中拥有自己的 TURN 服务器的简单方法
-
TURN 是唯一受支持的 P2P 网桥。如果你想实现一个非标准的替代方案,你不会发现浏览器支持基于 UDP 的流式传输,除非从对等方的角度来看,它与 TURN 协议无法区分。
标签: c# server webrtc relay turn