protected override void OnElementChanged(ElementChangedEventArgs <View> e) { base.OnElementChanged(e); if (e.NewElement is VideoPlayer parentPlayer) { _player = new AVPlayer(); _playerLayer = AVPlayerLayer.FromPlayer(_player); _contentType = parentPlayer.ContentType; var url = _contentType == Constants.ContentType.Remote ? new NSUrl(parentPlayer.Source) : new NSUrl(parentPlayer.Source, false); _asset = AVAsset.FromUrl(url); _playerItem = new AVPlayerItem(_asset); _player.ReplaceCurrentItemWithPlayerItem(_playerItem); videoLengthThread = new Thread(new ThreadStart(() => { _totalLength = _player.CurrentItem.Asset.Duration.Seconds; InvokeOnMainThread(() => { parentPlayer.SoundLength?.Invoke(this, _totalLength); }); })); videoLengthThread.Start(); parentPlayer.Play += (sender, innere) => { if (videoLengthThread.IsAlive) { videoLengthThread.Abort(); _totalLength = _player.CurrentItem.Asset.Duration.Seconds; parentPlayer.SoundLength?.Invoke(this, _totalLength); } StartTimeObserver(parentPlayer); _player.Play(); }; parentPlayer.Pause += (sender, innere) => { _player.Pause(); }; parentPlayer.Stop += (sender, innere) => { EndTimeObserver(); _player.Stop(); }; parentPlayer.GoToTime += (sender, sec) => { _player.SeekAsync(CoreMedia.CMTime.FromSeconds(sec, Constants.NSEC_PER_SEC)); }; } }
public void SetData(Constants.ContentType contentType, string source) { ContentType = contentType; Source = source; }
public void SetData(Constants.ContentType type, string source) { _contentType = type; _soundUrl = _contentType == Constants.ContentType.Remote ? new NSUrl(source) : new NSUrl(source, false); _player.ReplaceCurrentItemWithPlayerItem(AVPlayerItem.FromUrl(_soundUrl)); }