Пример #1
0
        private void TryDisposePlayer()
        {
            if (_player != null)
            {
                try
                {
                    _videoLayer.RemoveObserver(this, new NSString("videoRect"), _videoLayer.Handle);
                    _videoLayer.RemoveFromSuperLayer();

                    _player.CurrentItem?.RemoveObserver(this, new NSString("loadedTimeRanges"), _player.Handle);
                    _player.CurrentItem?.RemoveObserver(this, new NSString("status"), _player.Handle);
                    _player.CurrentItem?.RemoveObserver(this, new NSString("duration"), _player.Handle);
                    _player.RemoveObserver(this, new NSString("rate"), RateObservationContext.Handle);
                    _player.RemoveTimeObserver(_periodicTimeObserverObject);
                    _player.RemoveAllItems();
                }
                finally
                {
                    _itemFailedToPlayToEndTimeNotification?.Dispose();
                    _playbackStalledNotification?.Dispose();
                    _didPlayToEndTimeNotification?.Dispose();

                    _videoLayer?.Dispose();

                    _player?.CurrentItem?.Dispose();
                    _player?.Dispose();
                    _player = null;
                }
            }
        }
Пример #2
0
 protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayer> e)
 {
     base.OnElementChanged(e);
     if (Control == null)
     {
         _timer          = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
         _timer.Elapsed += _timer_Elapsed;
     }
     if (e.OldElement != null)
     {
         _timer?.Stop();
         _timer?.Dispose();
         _timer = null;
         _asset?.Dispose();
         _asset = null;
         _playerItem?.Dispose();
         _playerItem = null;
         _player?.Dispose();
         _player = null;
         _playerLayer?.Dispose();
         _playerLayer = null;
     }
     if (e.NewElement != null)
     {
     }
 }
 protected override void Dispose(bool disposing)
 {
     base.Dispose(disposing);
     _player?.Dispose();
     _playerLayer?.Dispose();
     _playerItem?.Dispose();
     _asset?.Dispose();
     _timeObserver?.Dispose();
 }
 void RemovePlayerLayer()
 {
     if (playerLayer != null)
     {
         playerLayer.Player.Pause();
         playerLayer.RemoveFromSuperLayer();
         playerLayer.Dispose();
     }
 }
        private void PlatformStop()
        {
            var movieView = _currentVideo.Player;

            movieView.Pause();
            movieView.Seek(CoreMedia.CMTime.Zero);

            nsWindow.ContentView.WillRemoveSubview(view);
            view.RemoveFromSuperview();
            view.Dispose();
            view = null;
            layer.Dispose();
            layer = null;
        }
Пример #6
0
 public void Open(string videoFileName)
 {
     _playerLoaded = false;
     if (_player != null)
     {
         try
         {
             _player.Pause();
             _player.Dispose();
             _player = null;
             foreach (var subView in View.VideoView.Subviews)
             {
                 subView.RemoveFromSuperview();
             }
             foreach (var subLayer in View.VideoView.Layer.Sublayers)
             {
                 subLayer.RemoveFromSuperLayer();
             }
             _playerLayer.Dispose();
             _playerItem.Dispose();
             _asset.Dispose();
         }
         catch
         {
         }
     }
     ShowPlayImage(false);
     _asset                = AVAsset.FromUrl(NSUrl.FromFilename(videoFileName));
     _playerItem           = new AVPlayerItem(_asset);
     _player               = new AVPlayer(_playerItem);
     _playerLayer          = AVPlayerLayer.FromPlayer(_player);
     _videoView            = new NSMyVideoView(new CoreGraphics.CGRect(0, 0, View.VideoView.Frame.Width, View.VideoView.Frame.Width), View.VideoView, _playerLayer);
     _videoView.WantsLayer = true;
     View.VideoView.AddSubview(_videoView);
     View.VideoView.WantsLayer = true;
     _playerLayer.Frame        = View.VideoView.Bounds;
     View.VideoView.Layer.AddSublayer(_playerLayer);
     _videoView.ResizeWithCorrectAspectRatio();
     _playerLoaded = true;
 }