コード例 #1
0
 /// <inheritdoc/>
 protected internal override void OnUnpaired(MediaTrack track)
 {
     Debug.Assert(track is RemoteVideoTrack);
     Debug.Assert(VideoTrack == track);
     VideoTrack = null;
     VideoStreamStopped.Invoke(VideoTrack);
 }
コード例 #2
0
        /// <inheritdoc/>
        protected internal override void OnPaired(MediaTrack track)
        {
            var remoteVideoTrack = (RemoteVideoTrack)track;

            Debug.Assert(VideoTrack == null);
            VideoTrack = remoteVideoTrack;
            VideoStreamStarted.Invoke(VideoTrack);
        }
コード例 #3
0
 private void TearDown()
 {
     try
     {
         _nativeVideo?.DisableRemoteVideo();
         _nativeVideo?.Dispose();
     }
     finally
     {
         _nativeVideo = null;
     }
     _source = null;
 }
コード例 #4
0
        /// <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));
            });
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        /// <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;
            }
        }
コード例 #7
0
        /// <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;
            }
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
 public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2)
 {
     try
     {
         RemoteVideoTrack = p1.RemoteVideoTrack;
         Listener?.SetRemoteVideoTrack(RemoteVideoTrack);
     }
     catch (Exception e)
     {
         Methods.DisplayReportResultTrack(e);
     }
 }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
 public void OnClientVideoTrackRemoved(Transceiver transceiver, RemoteVideoTrack track)
 {
     this.clientVideoTrack.I420AVideoFrameReady -= this.OnClientVideoReceived;
     this.clientVideoTrack = null;
 }
コード例 #12
0
 public void OnClientVideoTrackAdded(RemoteVideoTrack track)
 {
     this.clientVideoTrack = track;
     this.clientVideoTrack.I420AVideoFrameReady += this.OnClientVideoReceived;
 }
コード例 #13
0
 public void OnVideoTrackUnsubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2)
 {
     if (RemoteVideoTrack.Name != p2.Name)
     {
         return;
     }
     _listener?.RemoveRemoteVideoTrack(RemoteVideoTrack);
     RemoteVideoTrack = null;
 }
コード例 #14
0
 public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2)
 {
     RemoteVideoTrack = p2;
     _listener?.SetRemoteVideoTrack(RemoteVideoTrack);
 }
コード例 #15
0
        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);
            }
        }
コード例 #16
0
 public void OnVideoTrackSubscribed(RemoteParticipant p0, RemoteVideoTrackPublication p1, RemoteVideoTrack p2)
 {
     try
     {
         RemoteVideoTrack = p1.RemoteVideoTrack;
         Listener?.SetRemoteVideoTrack(RemoteVideoTrack);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
コード例 #17
0
 public VideoTrackViewModel(RemoteVideoTrack track)
     : base(track, null)
 {
 }
コード例 #18
0
 private void OnVideoTrackAdded2(RemoteVideoTrack track)
 {
     videoTrackAddedEvent2_.Set();
 }
コード例 #19
0
 private void OnVideoTrackRemoved2(Transceiver transceiver, RemoteVideoTrack track)
 {
     videoTrackRemovedEvent2_.Set();
 }