private void MediaPlayer_Opened(object sender, RoutedEventArgs args)
        {
            _Phase = Phase.Opened;

            // If a shutdown request has occured during the opening process, then we execute our shutdown
            if (_ShutdownRequest)
            {
                Shutdown();
            }
            else
            {
                if (MediaOpened != null)
                {
                    MediaOpened.Invoke(sender, args);
                }

                // If another open request has occured during the opening process, then we execute that open
                if (_OpenRequest != null)
                {
                    Uri uri = _OpenRequest;
                    _OpenRequest = null; // Null thee request before using it so that unexpected things will not happen

                    // Feed the request back into the Open() function
                    Open(uri);
                }
            }
        }
Exemplo n.º 2
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            if (Source == null)
            {
                return;
            }

            try
            {
                // Reset player
                TryDisposePlayer();
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;
                SetVideoSource(((MediaSource)Source).Uri);

                _player.PrepareAsync();

                MediaOpened?.Invoke(this, null);
            }
            catch (global::System.Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
Exemplo n.º 3
0
 private void Player_MediaStarted(object sender, EventArgs e)
 {
     MediaOpened?.Invoke(this, e);
     //Dispatcher.Invoke(() => {
     //    Player.Volume((int)GetValue(VolumeProperty));
     //});
 }
Exemplo n.º 4
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            // Reset player
            TryDisposePlayer();

            if (Source == null)
            {
                return;
            }

            try
            {
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;

                _player.CurrentItem?.RemoveObserver(_observer, new NSString("duration"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(_observer, new NSString("status"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(_observer, new NSString("loadedTimeRanges"), _player.Handle);

                switch (Source)
                {
                case MediaPlaybackList playlist:
                    Play(playlist);
                    break;

                case MediaPlaybackItem item:
                    Play(item.Source.Uri);
                    break;

                case MediaSource source:
                    Play(source.Uri);
                    break;

                default:
                    throw new InvalidOperationException("Unsupported media source type");
                }

                _player.CurrentItem.AddObserver(_observer, new NSString("duration"), NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(_observer, new NSString("status"), NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(_observer, new NSString("loadedTimeRanges"), NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, _player.Handle);

                _player.CurrentItem.SeekingWaitsForVideoCompositionRendering = true;

                // Adapt pitch to prevent "metallic echo" when changing playback rate
                _player.CurrentItem.AudioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.TimeDomain;

                MediaOpened?.Invoke(this, null);
            }
            catch (Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
 internal void PostMediaOpenedEvent(MediaInfo mediaInfo)
 {
     LogEventStart(nameof(MediaOpened));
     Library.GuiContext.EnqueueInvoke(() =>
     {
         MediaOpened?.Invoke(this, new MediaOpenedEventArgs(mediaInfo));
         LogEventDone(nameof(MediaOpened));
     });
 }
Exemplo n.º 6
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            // Reset player
            TryDisposePlayer();

            if (Source == null)
            {
                return;
            }

            try
            {
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;

                _player.CurrentItem?.RemoveObserver(_observer, new NSString("duration"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(_observer, new NSString("status"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(_observer, new NSString("loadedTimeRanges"), _player.Handle);

                if (Source is MediaPlaybackList)
                {
                    var items = ((MediaPlaybackList)Source).Items;
                    foreach (var item in items)
                    {
                        var asset = AVAsset.FromUrl(DecodeUri(item.Source.Uri));
                        _player.InsertItem(new AVPlayerItem(asset), null);
                    }
                }
                else
                {
                    var nsAsset       = AVAsset.FromUrl(DecodeUri(((MediaSource)Source).Uri));
                    var streamingItem = AVPlayerItem.FromAsset(nsAsset);

                    _player.ReplaceCurrentItemWithPlayerItem(streamingItem);
                }

                _player.CurrentItem.AddObserver(_observer, new NSString("duration"), NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(_observer, new NSString("status"), NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(_observer, new NSString("loadedTimeRanges"), NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, _player.Handle);

                _player.CurrentItem.SeekingWaitsForVideoCompositionRendering = true;

                // Adapt pitch to prevent "metallic echo" when changing playback rate
                _player.CurrentItem.AudioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.TimeDomain;

                MediaOpened?.Invoke(this, null);
            }
            catch (Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
Exemplo n.º 7
0
        public async Task Open(Video video, TimeSpan?position)
        {
            if (video != null)
            {
                await MediaPlayer.Open(new Uri(video.Path));

                MediaPlayer.Position = position ?? TimeSpan.Zero;
                MediaOpened?.Invoke(this, new MediaOpenedEventArgs(video));
            }
        }
Exemplo n.º 8
0
        public void Player_MediaOpened(object sender, EventArgs e)
        {
            Dispatcher.Invoke(() => {
                if (IsWindow && !Window.GetWindow(this).IsVisible)
                {
                    Window.GetWindow(this).Show();
                }

                SeekBar.Maximum = Duration;
                SetControlsEnabled(true);
                MediaOpened?.Invoke(this, new EventArgs());
            });
        }
Exemplo n.º 9
0
 protected override void OnApplyTemplate()
 {
     MediaElement = (MediaElement)GetTemplateChild("MainMediaElement");
     if (MediaElement != null)
     {
         MediaElement.CurrentStateChanged += (s, e) => CurrentStateChanged?.Invoke(this, e);
         MediaElement.MediaEnded          += (s, e) => MediaEnded?.Invoke(this, e);
         MediaElement.MediaOpened         += (s, e) => MediaOpened?.Invoke(this, e);
         MediaElement.MediaFailed         += (s, e) => MediaFailed?.Invoke(this, e);
         MediaElement.SeekCompleted       += (s, e) => SeekCompleted?.Invoke(this, e);
         MediaElement.VolumeChanged       += (s, e) => VolumeChanged?.Invoke(this, e);
     }
     base.OnApplyTemplate();
 }
Exemplo n.º 10
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            if (Source == null)
            {
                return;
            }

            try
            {
                // Reset player
                TryDisposePlayer();
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;

                var nsAsset       = AVAsset.FromUrl(DecodeUri(((MediaSource)Source).Uri));
                var streamingItem = AVPlayerItem.FromAsset(nsAsset);

                _player.CurrentItem?.RemoveObserver(this, new NSString("duration"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(this, new NSString("status"), _player.Handle);
                _player.CurrentItem?.RemoveObserver(this, new NSString("loadedTimeRanges"), _player.Handle);

                _player.ReplaceCurrentItemWithPlayerItem(streamingItem);

                _player.CurrentItem.AddObserver(this, new NSString("duration"), NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(this, new NSString("status"), NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial, _player.Handle);
                _player.CurrentItem.AddObserver(this, new NSString("loadedTimeRanges"), NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, _player.Handle);

                _player.CurrentItem.SeekingWaitsForVideoCompositionRendering = true;

                // Adapt pitch to prevent "metallic echo" when changing playback rate
                _player.CurrentItem.AudioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.TimeDomain;

                // Disable subtitles if any
                var mediaSelectionGroup = _player.CurrentItem.Asset.MediaSelectionGroupForMediaCharacteristic(AVMediaCharacteristic.Legible);
                if (mediaSelectionGroup != null)
                {
                    _player.CurrentItem.SelectMediaOption(null, mediaSelectionGroup);
                }

                MediaOpened?.Invoke(this, null);
            }
            catch (Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
Exemplo n.º 11
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            // Reset player
            TryDisposePlayer();

            if (Source == null)
            {
                return;
            }

            try
            {
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;

                Uri uri;
                switch (Source)
                {
                case MediaPlaybackList playlist when playlist.Items.Count > 0:
                    SetPlaylistItems(playlist);
                    uri = _playlistItems[0];
                    break;

                case MediaPlaybackItem item:
                    uri = item.Source.Uri;
                    break;

                case MediaSource source:
                    uri = source.Uri;
                    break;

                default:
                    throw new InvalidOperationException("Unsupported media source type");
                }

                SetVideoSource(uri);

                _player.PrepareAsync();

                MediaOpened?.Invoke(this, null);
            }
            catch (global::System.Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
Exemplo n.º 12
0
        protected virtual void InitializeSource()
        {
            PlaybackSession.NaturalDuration    = TimeSpan.Zero;
            PlaybackSession.PositionFromPlayer = TimeSpan.Zero;

            // Reset player
            TryDisposePlayer();

            if (Source == null)
            {
                return;
            }

            try
            {
                InitializePlayer();

                PlaybackSession.PlaybackState = MediaPlaybackState.Opening;

                if (Source is MediaPlaybackList)
                {
                    _playlistItems = new List <Uri>();

                    var playlist = Source as MediaPlaybackList;
                    foreach (var mediaItem in playlist.Items)
                    {
                        _playlistItems.Add(mediaItem.Source.Uri);
                    }
                }

                var uri = _playlistItems?.Count > 0
                                        ? _playlistItems[0]
                                        : ((MediaSource)Source).Uri;

                SetVideoSource(uri);

                _player.PrepareAsync();

                MediaOpened?.Invoke(this, null);
            }
            catch (global::System.Exception ex)
            {
                OnMediaFailed(ex);
            }
        }
Exemplo n.º 13
0
 private void CountingStartTimeOffset(MediaPlayer sender, object args)
 {
     if (!isInitialReady)
     {
         ++renderedCounts;
         if (renderedCounts > 2)
         {
             StartOffset    = sender.PlaybackSession.Position;
             renderedCounts = 0;
             isInitialReady = true;
             MediaPlayer.VideoFrameAvailable      -= CountingStartTimeOffset;
             MediaPlayer.VideoFrameAvailable      += MediaPlayer_VideoFrameAvailable;
             MediaPlayer.IsVideoFrameServerEnabled = false;
             MediaStatus = FrameMediaStatus.Opened;
             MediaOpened?.Invoke(this, null);
         }
     }
 }
Exemplo n.º 14
0
 internal void RaiseMediaOpened()
 {
     MediaOpened?.Invoke(this, EventArgs.Empty);
 }
 private void MediaElement_MediaOpened(object sender, RoutedEventArgs e)
 {
     MediaOpened.IfNotNull(i => i(this));
 }
 private void Player_MediaOpened(object player, EventArgs args)
 {
     MediaOpened.IfNotNull(i => i(this, null));
 }
Exemplo n.º 17
0
 private void HandleMediaOpened(object?sender, RoutedEventArgs?e)
 {
     MediaOpened?.Invoke(sender, new OnlyMMediaOpenedEventArgs());
 }
Exemplo n.º 18
0
 protected virtual void OnMediaOpened()
 {
     MediaOpened?.Invoke(this, EventArgs.Empty);
 }
Exemplo n.º 19
0
 private void Player_MediaOpened(MediaPlayer sender, object args)
 {
     MediaOpened?.Invoke(sender, args);
 }
Exemplo n.º 20
0
 private void HandleMediaOpened(object sender, RoutedEventArgs e)
 {
     MediaOpened?.Invoke(sender, e);
 }
Exemplo n.º 21
0
 protected void RaiseMediaOpened()
 {
     MediaOpened?.Invoke();
 }