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(); }));
/// <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; }