From f04556e609fb9496b892f1e569267c2c4a743f82 Mon Sep 17 00:00:00 2001 From: stary <834207172@qq.COM> Date: Thu, 30 Apr 2026 23:27:34 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90m=E3=80=91=E5=BC=80=E5=8F=91=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/Scripts/HostConnection.cs | 10 ++++++---- .../Runtime/Scripts/SignalingManagerInternal.cs | 9 ++++++--- .../Runtime/Scripts/StreamSenderBase.cs | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/HostConnection.cs b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/HostConnection.cs index 65f41e0..c61faf3 100644 --- a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/HostConnection.cs +++ b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/HostConnection.cs @@ -97,6 +97,8 @@ namespace Unity.RenderStreaming public override void DeleteConnection(string connectionId) { // 清理所有Participant连接 + // 注意:不能在这里调用 base.DeleteConnection(participantId),否则会给每个Participant发送disconnect, + // 导致服务器返回多次通知。应该只发一次disconnect关闭房间,Participant的清理由服务器通知触发。 foreach (var participantId in participantIds.ToList()) { DisconnectParticipant(participantId); @@ -152,10 +154,10 @@ namespace Unity.RenderStreaming if (m_participantStreams.TryGetValue(participantId, out var ps)) { // 移除Sender关联 - foreach (var sender in streams.OfType()) - { - RemoveSender(participantId, sender); - } + // foreach (var sender in streams.OfType()) + // { + // RemoveSender(participantId, sender); + // } // 移除Receiver关联 if (ps.videoReceiver != null) RemoveReceiver(participantId, ps.videoReceiver); diff --git a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/SignalingManagerInternal.cs b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/SignalingManagerInternal.cs index 1312392..6fc0f0a 100644 --- a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/SignalingManagerInternal.cs +++ b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/SignalingManagerInternal.cs @@ -395,7 +395,9 @@ namespace Unity.RenderStreaming peer.OnConnectHandler += () => onConnect?.Invoke(connectionId); peer.OnDisconnectHandler += () => { - _signaling?.CloseConnection(connectionId); + // PeerConnection失败时不自动发送disconnect,避免重复断开通知。 + // 主动断开由 Handler 的 DeleteConnection 触发,远端断开由服务器的 disconnect 消息触发。 + // 这里只触发 onDisconnect 事件通知 Handler 进行资源清理。 onDisconnect?.Invoke(connectionId); }; peer.OnDataChannelHandler += channel => onAddChannel?.Invoke(connectionId, channel); ; @@ -473,10 +475,11 @@ namespace Unity.RenderStreaming void OnParticipantLeftHandler(ISignaling signaling, ParticipantEventData e) { - // 参与者离开时,销毁对应的PeerConnection + // 参与者离开时,只销毁对应的PeerConnection,不触发onDeletedConnection事件 + // 因为onParticipantLeft已经会通知Handler进行资源清理,避免重复通知 if (_mapConnectionIdAndPeer.ContainsKey(e.participantId)) { - DestroyConnection(e.participantId); + DeletePeerConnection(e.participantId); } onParticipantLeft?.Invoke(e.connectionId, e.participantId); } diff --git a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/StreamSenderBase.cs b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/StreamSenderBase.cs index 052d290..0c5359e 100644 --- a/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/StreamSenderBase.cs +++ b/Packages/com.unity.renderstreaming@3.1.0-exp.9/Runtime/Scripts/StreamSenderBase.cs @@ -160,7 +160,7 @@ namespace Unity.RenderStreaming { m_transceivers.Remove(connectionId); OnStoppedStream?.Invoke(connectionId); - if (!m_transceivers.Any()) + if (!m_transceivers.Any() && m_track.ReadyState == TrackState.Live) { m_track.Dispose(); m_track = null;