private static IEnumerator SignalingPeers(RTCPeerConnection offerPc, RTCPeerConnection answerPc) { offerPc.OnIceCandidate = candidate => answerPc.AddIceCandidate(ref candidate); answerPc.OnIceCandidate = candidate => offerPc.AddIceCandidate(ref candidate); var offerOption = new RTCOfferOptions {offerToReceiveVideo = true}; var answerOption = new RTCAnswerOptions {iceRestart = false}; var pc1CreateOffer = offerPc.CreateOffer(ref offerOption); yield return pc1CreateOffer; Assert.False(pc1CreateOffer.IsError); var offerDesc = pc1CreateOffer.Desc; var pc1SetLocalDescription = offerPc.SetLocalDescription(ref offerDesc); yield return pc1SetLocalDescription; Assert.False(pc1SetLocalDescription.IsError); var pc2SetRemoteDescription = answerPc.SetRemoteDescription(ref offerDesc); yield return pc2SetRemoteDescription; Assert.False(pc2SetRemoteDescription.IsError); var pc2CreateAnswer = answerPc.CreateAnswer(ref answerOption); yield return pc2CreateAnswer; Assert.False(pc2CreateAnswer.IsError); var answerDesc = pc2CreateAnswer.Desc; var pc2SetLocalDescription = answerPc.SetLocalDescription(ref answerDesc); yield return pc2SetLocalDescription; Assert.False(pc2SetLocalDescription.IsError); var pc1SetRemoteDescription = offerPc.SetRemoteDescription(ref answerDesc); yield return pc1SetRemoteDescription; Assert.False(pc1SetRemoteDescription.IsError); var waitConnectOfferPc = new WaitUntilWithTimeout(() => offerPc.IceConnectionState == RTCIceConnectionState.Connected || offerPc.IceConnectionState == RTCIceConnectionState.Completed, 5000); yield return waitConnectOfferPc; Assert.True(waitConnectOfferPc.IsCompleted); var waitConnectAnswerPc = new WaitUntilWithTimeout(() => answerPc.IceConnectionState == RTCIceConnectionState.Connected || answerPc.IceConnectionState == RTCIceConnectionState.Completed, 5000); yield return waitConnectAnswerPc; Assert.True(waitConnectAnswerPc.IsCompleted); var checkSenders = new WaitUntilWithTimeout(() => offerPc.GetSenders().Any(), 5000); yield return checkSenders; Assert.True(checkSenders.IsCompleted); var checkReceivers = new WaitUntilWithTimeout(() => answerPc.GetReceivers().Any(), 5000); yield return checkReceivers; Assert.True(checkReceivers.IsCompleted); }
void RemoveTracks(string id, RTCPeerConnection pc) { foreach (var sender in pc.GetSenders()) { if (m_mapTrackAndSenderList.TryGetValue(sender.Track, out var list)) { list.Remove(sender); } } foreach (var receiver in pc.GetReceivers()) { foreach (var viewer in m_listVideoReceiveViewer) { viewer.RemoveTrack(id, receiver.Track); } } }
public void Construct() { var peer = new RTCPeerConnection(); Assert.AreEqual(0, peer.GetReceivers().Count()); Assert.AreEqual(0, peer.GetSenders().Count()); Assert.AreEqual(0, peer.GetTransceivers().Count()); Assert.AreEqual(RTCPeerConnectionState.New, peer.ConnectionState); Assert.That(() => peer.LocalDescription, Throws.InvalidOperationException); Assert.That(() => peer.RemoteDescription, Throws.InvalidOperationException); Assert.That(() => peer.PendingLocalDescription, Throws.InvalidOperationException); Assert.That(() => peer.PendingRemoteDescription, Throws.InvalidOperationException); Assert.That(() => peer.CurrentLocalDescription, Throws.InvalidOperationException); Assert.That(() => peer.CurrentRemoteDescription, Throws.InvalidOperationException); peer.Close(); Assert.AreEqual(RTCPeerConnectionState.Closed, peer.ConnectionState); peer.Dispose(); }
public IEnumerator Signaling() { offerPc.OnIceCandidate = candidate => answerPc.AddIceCandidate(candidate); answerPc.OnIceCandidate = candidate => offerPc.AddIceCandidate(candidate); var pc1CreateOffer = offerPc.CreateOffer(); yield return(pc1CreateOffer); Assert.That(pc1CreateOffer.IsError, Is.False, () => $"Failed {nameof(pc1CreateOffer)}, error:{pc1CreateOffer.Error.message}"); var offerDesc = pc1CreateOffer.Desc; var pc1SetLocalDescription = offerPc.SetLocalDescription(ref offerDesc); yield return(pc1SetLocalDescription); Assert.That(pc1SetLocalDescription.IsError, Is.False, () => $"Failed {nameof(pc1SetLocalDescription)}, error:{pc1SetLocalDescription.Error.message}"); var pc2SetRemoteDescription = answerPc.SetRemoteDescription(ref offerDesc); yield return(pc2SetRemoteDescription); Assert.That(pc2SetRemoteDescription.IsError, Is.False, () => $"Failed {nameof(pc2SetRemoteDescription)}, error:{pc2SetRemoteDescription.Error.message}"); var pc2CreateAnswer = answerPc.CreateAnswer(); yield return(pc2CreateAnswer); Assert.That(pc2CreateAnswer.IsError, Is.False, () => $"Failed {nameof(pc2CreateAnswer)}, error:{pc2CreateAnswer.Error.message}"); var answerDesc = pc2CreateAnswer.Desc; var pc2SetLocalDescription = answerPc.SetLocalDescription(ref answerDesc); yield return(pc2SetLocalDescription); Assert.That(pc2SetLocalDescription.IsError, Is.False, () => $"Failed {nameof(pc2SetLocalDescription)}, error:{pc2SetLocalDescription.Error.message}"); var pc1SetRemoteDescription = offerPc.SetRemoteDescription(ref answerDesc); yield return(pc1SetRemoteDescription); Assert.That(pc1SetRemoteDescription.IsError, Is.False, () => $"Failed {nameof(pc1SetRemoteDescription)}, error:{pc1SetRemoteDescription.Error.message}"); var waitConnectOfferPc = new WaitUntilWithTimeout(() => offerPc.IceConnectionState == RTCIceConnectionState.Connected || offerPc.IceConnectionState == RTCIceConnectionState.Completed, 5000); yield return(waitConnectOfferPc); Assert.That(waitConnectOfferPc.IsCompleted, Is.True); var waitConnectAnswerPc = new WaitUntilWithTimeout(() => answerPc.IceConnectionState == RTCIceConnectionState.Connected || answerPc.IceConnectionState == RTCIceConnectionState.Completed, 5000); yield return(waitConnectAnswerPc); Assert.That(waitConnectAnswerPc.IsCompleted, Is.True); var checkSenders = new WaitUntilWithTimeout(() => offerPc.GetSenders().Any(), 5000); yield return(checkSenders); Assert.That(checkSenders.IsCompleted, Is.True); var checkReceivers = new WaitUntilWithTimeout(() => answerPc.GetReceivers().Any(), 5000); yield return(checkReceivers); Assert.That(checkReceivers.IsCompleted, Is.True); }