gpt4 book ai didi

c# - C# 中的简单 Webrtc 中继桥服务器

转载 作者:行者123 更新时间:2023-12-04 04:20:47 24 4
gpt4 key购买 nike

我有一个完全工作的 peerTopeer (P1, P2) webRTC。为了处理 peerTopeer 故障,我正在尝试通过服务器在 Windows 机器上的 P1 和 P2 之间通过 c# 中的服务器进行简单的字节交换,因为我不想按规范开发轮流服务器。我也试图找到一个开源的 c# 服务器 turn serverturn message但它不工作(能够解析请求但响应似乎不被最新的 chrome/MS Edge chromium based 接受)

简单的 C# 中继桥服务器:

通过简单的 udp/tcp 监听器和与对等方交换字节(P1 到 P2 和 P2 到 P1)并强制桥接机 IP 作为候选 我能够实现连接和流数据(字节)交换。然而,无法在对等方上看到视频/听到音频,并且在进行了一些交换后,连接被断开,客户端的连接状态失败

Q1。它应该是有效的,出了什么问题?

Q2。 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)

最佳答案

简单地修改从 P2P 获得的 ice candidate 不太可能奏效,因为 TCP candidates 的工作方式有点不同。 TURN 服务器与简单的网桥非常不同。

下面的 SDP 包含一个 tcp 类型为 passive 的 TCP 候选者,它将使另一方与其建立连接。将其输入 setRemoteDescription,然后创建一个答案并使用该答案调用 setLocalDescription。

v=0
o=- 2576067654554894849 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:2698387310 1 tcp 25042943 127.0.0.1 31337 typ host tcptype passive generation 0
a=ice-ufrag:server
a=ice-pwd:Kv6yCw1HiZ1/6uNExYcE28pO
a=fingerprint:sha-256 22:46:36:8D:B1:CD:08:7B:A1:60:86:BF:95:90:06:4B:EA:47:D9:74:24:FF:6D:2F:1C:09:5B:C1:F5:8D:CC:B2
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1

浏览器应与本地主机上的端口 31337 建立连接(请注意,默认情况下,Firefox 不允许本地主机 ICE,因此请先在 Chrome 中尝试此操作)。从那里,您将必须处理 ICE、解密 SRTP 等。

关于c# - C# 中的简单 Webrtc 中继桥服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59428438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com