我有一个完全工作的点对点 (P1, P2) WebRTC。为了处理点对点故障,我正在尝试在 Windows 机器上通过 C# 服务器进行字节简单交换来实现 P1 和 P2 之间的通信,因为我不想按规格开发转换服务器。我还尝试找到一个开源的 C# 服务器(转换服务器)和(转换消息),但它无法使用(能够解析请求,但响应似乎不能被最新的 Chrome / MS Edge 基于Chromium内核接受)。
简单的 C# 中继桥服务器:
通过简单的UDP/TCP监听器并与对等方(P1 到 P2 和 P2 到 P1)交换字节来强制桥接机器IP作为候选者,我能够建立连接并交换数据(字节)。然而,在对等方无法看到视频/听到音频,并且在一些交换之后,连接会因客户端的连接状态失败而断开。
Q1.它应该能够工作,出了什么问题?
Q2.是否有stun和turn的开源C#实现(简单的)?
我非常感谢在这方面提供任何帮助。
服务器和客户端代码示例:
监听TCP/UDP(不在示例中)
处理数据(交换流字节)
在客户端(Javascript/TypeScript)中,强制将候选人作为桥接服务器。
简单的 C# 中继桥服务器:
通过简单的UDP/TCP监听器并与对等方(P1 到 P2 和 P2 到 P1)交换字节来强制桥接机器IP作为候选者,我能够建立连接并交换数据(字节)。然而,在对等方无法看到视频/听到音频,并且在一些交换之后,连接会因客户端的连接状态失败而断开。
Q1.它应该能够工作,出了什么问题?
Q2.是否有stun和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));
}
}
处理数据(交换流字节)
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)