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; } } }
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; }
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; }