/// <inheritdoc/> protected internal override void OnUnpaired(MediaTrack track) { Debug.Assert(track is RemoteVideoTrack); Debug.Assert(VideoTrack == track); VideoTrack = null; VideoStreamStopped.Invoke(VideoTrack); }
/// <inheritdoc/> protected internal override void OnPaired(MediaTrack track) { var remoteVideoTrack = (RemoteVideoTrack)track; Debug.Assert(VideoTrack == null); VideoTrack = remoteVideoTrack; VideoStreamStarted.Invoke(VideoTrack); }
private void TearDown() { try { _nativeVideo?.DisableRemoteVideo(); _nativeVideo?.Dispose(); } finally { _nativeVideo = null; } _source = null; }
/// <summary> /// Callback on remote videa track added. /// /// For simplicity this grabs the first remote video track found and uses it to render its /// content on the right pane of the Tracks window. /// </summary> /// <param name="track">The video track added.</param> /// <seealso cref="RemoteVideoTrack_I420AFrameReady"/> private void OnRemoteVideoTrackAdded(RemoteVideoTrack track) { Logger.Log($"Added remote video track {track.Name} of transceiver {track.Transceiver.Name}."); ThreadHelper.RunOnMainThread(() => { var trvm = Transceivers.SingleOrDefault(tr => tr.Transceiver == track.Transceiver); Debug.Assert(trvm.Transceiver.RemoteVideoTrack == track); trvm.NotifyReceiverChanged(); // this is thread-aware // This raises property changed events in current thread, needs to be main one VideoTracks.Add(new VideoTrackViewModel(track)); }); }
private void Peer_VideoTrackRemoved(Transceiver transceiver, RemoteVideoTrack track) { Debug.Assert(track.Transceiver == null); // already removed // Note: if the transceiver was created by SetRemoteDescription() internally, but the user // did not add any MediaLine in the component, then the transceiver is ignored. // SetRemoteDescriptionAsync() already triggered a warning in this case, so be silent here. MediaLine mediaLine = _mediaLines.Find((MediaLine ml) => ml.Transceiver == transceiver); if (mediaLine != null) { Debug.Assert(mediaLine != null); Debug.Assert(mediaLine.MediaKind == MediaKind.Video); mediaLine.OnUnpaired(track); } }
/// <summary> /// Start rendering the passed source. /// </summary> /// <remarks> /// Can be used to handle <see cref="VideoTrackSource.VideoStreamStarted"/> or <see cref="VideoReceiver.VideoStreamStarted"/>. /// </remarks> public void StartRendering(IVideoSource source) { _source = source as RemoteVideoTrack; Debug.Assert(_source != null, "NativeVideoRender currently only supports RemoteVideoTack"); switch (source.FrameEncoding) { case VideoEncoding.I420A: _i420aFrameQueue = new VideoFrameQueue <I420AVideoFrameStorage>(2); _source.I420AVideoFrameReady += I420AVideoFrameReady; break; case VideoEncoding.Argb32: break; } }
/// <summary> /// Start rendering the passed source. /// </summary> /// <remarks> /// Can be used to handle <see cref="VideoTrackSource.VideoStreamStarted"/> or <see cref="VideoReceiver.VideoStreamStarted"/>. /// </remarks> public void StartRendering(IVideoSource source) { _source = source as RemoteVideoTrack; Debug.Assert(_source != null, "NativeVideoRender currently only supports RemoteVideoTack"); switch (source.FrameEncoding) { case VideoEncoding.I420A: _nativeVideo = new NativeVideo(_source.NativeHandle); _nativeVideo.TextureSizeChanged += TextureSizeChangeCallback; _nativeVideo.EnableRemoteVideo(VideoKind.I420, null); break; case VideoEncoding.Argb32: break; } }
/// <summary> /// Callback on remote video track removed. /// </summary> /// <param name="track">The video track removed.</param> private void OnRemoteVideoTrackRemoved(Transceiver transceiver, RemoteVideoTrack track) { Logger.Log($"Removed remote video track {track.Name} from transceiver {transceiver.Name}."); var vtvm = VideoTracks.Single(vm => vm.TrackImpl == track); VideoTracks.Remove(vtvm); //IVideoTrack newPlaybackVideoTrack = null; //if (LocalVideoTracks.Count > 0) //{ // newPlaybackVideoTrack = LocalVideoTracks[0].Track; //} //else //{ // videoTrackComboBox.IsEnabled = false; // _videoStatsTimer.Stop(); //} //SwitchMediaPlayerSource(_playbackAudioTrack, newPlaybackVideoTrack); }
public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { try { RemoteVideoTrack = p1.RemoteVideoTrack; Listener?.SetRemoteVideoTrack(RemoteVideoTrack); } catch (Exception e) { Methods.DisplayReportResultTrack(e); } }
public void OnVideoTrackUnsubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { try { if (RemoteVideoTrack?.Name != p1.TrackName) { return; } Listener?.RemoveRemoteVideoTrack(RemoteVideoTrack); RemoteVideoTrack = null; } catch (Exception e) { Methods.DisplayReportResultTrack(e); } }
public void OnClientVideoTrackRemoved(Transceiver transceiver, RemoteVideoTrack track) { this.clientVideoTrack.I420AVideoFrameReady -= this.OnClientVideoReceived; this.clientVideoTrack = null; }
public void OnClientVideoTrackAdded(RemoteVideoTrack track) { this.clientVideoTrack = track; this.clientVideoTrack.I420AVideoFrameReady += this.OnClientVideoReceived; }
public void OnVideoTrackUnsubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { if (RemoteVideoTrack.Name != p2.Name) { return; } _listener?.RemoveRemoteVideoTrack(RemoteVideoTrack); RemoteVideoTrack = null; }
public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { RemoteVideoTrack = p2; _listener?.SetRemoteVideoTrack(RemoteVideoTrack); }
public void OnVideoTrackUnsubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { try { if (RemoteVideoTrack.Name != p1.TrackName) { return; } Listener?.RemoveRemoteVideoTrack(RemoteVideoTrack); RemoteVideoTrack = null; } catch (Exception e) { Console.WriteLine(e); } }
public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2) { try { RemoteVideoTrack = p1.RemoteVideoTrack; Listener?.SetRemoteVideoTrack(RemoteVideoTrack); } catch (Exception e) { Console.WriteLine(e); } }
public VideoTrackViewModel(RemoteVideoTrack track) : base(track, null) { }
private void OnVideoTrackAdded2(RemoteVideoTrack track) { videoTrackAddedEvent2_.Set(); }
private void OnVideoTrackRemoved2(Transceiver transceiver, RemoteVideoTrack track) { videoTrackRemovedEvent2_.Set(); }