public WsTransceiverMetadata(TransceiverMetadata other) { TransceiverMid = other.TransceiverMid; Quality = other.Quality; Kind = other.Kind; SourceDeviceId = other.SourceDeviceId == Guid.Empty ? (Guid?)null : other.SourceDeviceId; }
public void SetRemoteTransceiverMetadata(TransceiverMetadata transceiverMetadata) { // Ignore audio tracks for now if (transceiverMetadata.Kind != MediaKind.Video) { return; } _signallingThread.EnsureCurrentThread(); // Prepare the source for this quality, if it was not created var client = _clients.GetOrThrow(transceiverMetadata.SourceDeviceId); var videoSource = client.VideoSources.ContainsKey(transceiverMetadata.Quality) ? client.VideoSources[transceiverMetadata.Quality] : null; if (null == videoSource) { videoSource = _clients.CreateVideoSource(transceiverMetadata.SourceDeviceId, transceiverMetadata.Quality); videoSource.VideoTrackSource = new PassiveVideoTrackSource(); videoSource.VideoSinkAdapter = new VideoSinkAdapter(videoSource.VideoTrackSource, false); _logger.Info($"Created {videoSource}"); OnVideoSourceAdded(client, videoSource, transceiverMetadata.Quality); } // Flag this source to say it should be // linked with the provided track videoSource.ExpectedTransceiverMid = transceiverMetadata.TransceiverMid; _logger.Info($"Associated {videoSource} with transceiver mid {transceiverMetadata.TransceiverMid}"); }
public void EnqueueLocalTransceiverMetadata( IPeerConnection peerConnection, TransceiverMetadata transceiverMetadata) { if (peerConnection is null) { throw new ArgumentNullException(nameof(peerConnection)); } if (transceiverMetadata is null) { throw new ArgumentNullException(nameof(transceiverMetadata)); } _negotiationQueue.Enqueue(new LocalTransceiverMetadataMessage(transceiverMetadata, peerConnection)); }
public void Handle(IRemoteDevice remoteDevice, TransceiverMetadata metadata) { // Find the PeerConnection: // As the server uses only 1 PeerConnection // to send media, // the first PeerConnection is alwaus the one this ack is for. var peerConnection = remoteDevice.GetCustomData().PeerConnections.FirstOrDefault(); if (null == peerConnection) { throw new InvalidOperationException($"Device {remoteDevice} has no PeerConnection - ack what?"); } _negotiationService.EnqueueLocalTransceiverMetadataAck(peerConnection, metadata); }
public LocalTransceiverMetadataMessage(TransceiverMetadata transceiverMetadata, IPeerConnection peerConnection) : base(peerConnection) { TransceiverMetadata = transceiverMetadata; }
public TransceiverMetadataUpdatedEvent(IPeerConnection peerConnection, TransceiverMetadata transceiverMetadata) { Require.NotNull(transceiverMetadata); PeerConnection = peerConnection; TransceiverMetadata = transceiverMetadata; }
public LocalTransceiverMetadataAckMessage(IPeerConnection peerConnection, TransceiverMetadata transceiverMetadata) : base(peerConnection) { Acked = transceiverMetadata; }
public void EnqueueTransceiverMetadata(TransceiverMetadata transceiverMetadata) { _ = SendAsync("TransceiverMetadata", new WsTransceiverMetadata(transceiverMetadata)); }
public void EnqueueLocalTransceiverMetadataAck( IPeerConnection peerConnection, TransceiverMetadata transceiverMetadata) { _negotiationQueue.Enqueue(new LocalTransceiverMetadataAckMessage(peerConnection, transceiverMetadata)); }