/// <summary> /// Removes a participant and does all the necessary cleanup of streams and associations /// </summary> /// <param name="participant"></param> private void RemoveParticipant(RtpParticipant participant) { lock(participants) { if(participants.ContainsKey(participant.CName)) { foreach(uint ssrc in participant.SSRCs) { if(streamsAndIPs[ssrc].stream != null) { RemoveSSRC(ssrc); } participant.RemoveSSRC(ssrc); ssrcToParticipant.Remove(ssrc); } participants.Remove(participant.CName); ssrcToParticipant.Remove(participant.SSRC); RaiseParticipantRemovedEvent(participant); } } }