Example #1
0
        public PeerConnectionAdapter(
            PeerConnectionFactory peerConnectionFactory,
            VideoRouter videoRouter,
            IRoom room,
            IRemoteDevice device,
            IReadOnlyList <string> stunUrls)
        {
            if (peerConnectionFactory is null)
            {
                throw new ArgumentNullException(nameof(peerConnectionFactory));
            }
            if (stunUrls is null)
            {
                throw new ArgumentNullException(nameof(stunUrls));
            }
            Room         = room ?? throw new ArgumentNullException(nameof(room));
            Device       = device ?? throw new ArgumentNullException(nameof(device));
            _videoRouter = videoRouter
                           ?? throw new ArgumentNullException(nameof(videoRouter));
            var iceServerInfo = new PeerConnectionConfig.IceServerInfo();

            foreach (var url in stunUrls)
            {
                iceServerInfo.Urls.Add(url);
            }
            var config = new PeerConnectionConfig();

            config.IceServers.Add(iceServerInfo);
            _peerConnectionObserverImpl = new PeerConnectionObserver();
            _peerConnectionObserverImpl.IceCandidateAdded   += IceCandidateAdded;
            _peerConnectionObserverImpl.RenegotiationNeeded += RenegotationNeeded;
            _peerConnectionImpl = peerConnectionFactory.CreatePeerConnection(_peerConnectionObserverImpl, config);
        }
 public Task GetTransceivers_NoTransceiver_ReturnsEmptyList()
 {
     return(_signallingThread.ExecuteAsync(delegate
     {
         using (var peerConnectionObserver = new PeerConnectionObserver())
             using (var peerConnection = _peerConnectionFactory.CreatePeerConnection(peerConnectionObserver, _config))
             {
                 Assert.Equal(0, peerConnection.GetTransceivers().Count);
             }
     }));
 }
 public Task AddTransceivers_TransceiverAddedExplicitly_ReturnsTransceiverWithCorrectMediaKind(MediaKind mediaKind)
 {
     return(_signallingThread.ExecuteAsync(delegate
     {
         using (var peerConnectionObserver = new PeerConnectionObserver())
             using (var peerConnection = _peerConnectionFactory.CreatePeerConnection(peerConnectionObserver, _config))
                 using (var transceiver = peerConnection.AddTransceiver(mediaKind, RtpTransceiverDirection.SendOnly))
                 {
                     Assert.NotNull(transceiver);
                     Assert.Equal(mediaKind, transceiver.MediaKind);
                 }
     }));
 }
        public Task GetTransceivers_TransceiversAddedViaAddTrack_ReturnsTransceiverWithCorrectMediaKind()
        {
            return(_signallingThread.ExecuteAsync(delegate
            {
                using var peerConnectionObserver = new PeerConnectionObserver();
                using var peerConnection = _peerConnectionFactory.CreatePeerConnection(peerConnectionObserver, _config);
                using var passiveVideoTrackSource = new PassiveVideoTrackSource();
                using var track = _peerConnectionFactory.CreateVideoTrack("foo", passiveVideoTrackSource);
                using var sender = peerConnection.AddTrack(track, Guid.NewGuid());

                var transceivers = peerConnection.GetTransceivers();

                Assert.Equal(1, transceivers.Count);
                Assert.Equal(MediaKind.Video, transceivers[0].MediaKind);

                peerConnection.RemoveTrack(sender);
                peerConnection.Close();
            }));
Example #5
0
 /// <summary>
 /// 持有一个P2P连接指针
 /// </summary>
 /// <param name="handler">P2P连接指针</param>
 internal PeerConnection(IntPtr handler, IDispatcher dispatcher, PeerConnectionObserver observer) : base(handler)
 {
     this.Dispatcher     = dispatcher;
     this.observer       = observer;
     observer.Connection = this;
 }