Пример #1
0
        private void PlaylistView_ItemClick(object sender, ItemClickEventArgs e)
        {
            var item = e.ClickedItem as MediaModel;

            LoggerControl.Log("Clicked item: " + item.Title);

            // Start the background task if it wasn't running
            playbackList.MoveTo((uint)playbackList.Items.IndexOf(item.MediaPlaybackItem));

            if (MediaPlaybackState.Paused == mp.PlaybackSession.PlaybackState)
            {
                mp.Play();
            }
        }
Пример #2
0
        /// <summary>
        /// MediaPlayer state changed event handlers.
        /// Note that we can subscribe to events even if Media Player is playing media in background
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        ///
        private async void PlaybackSession_PlaybackStateChanged(MediaPlaybackSession sender, object args)
        {
            LoggerControl.Log($"Current playback state changed to: {sender.PlaybackState}");

            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                var currentState = sender.PlaybackState;

                // Update state label
                txtCurrentState.Text = currentState.ToString();

                // Update controls
                UpdateTransportControls(currentState);
            });
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Create the media source and supplement with external timed text sources.
            var source = MediaSource.CreateFromUri(rootPage.UncaptionedMediaUri);

            msLogger = new MediaSourceLogger(LoggerControl, source);

            var ttsEnUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_en.srt");
            var ttsEn    = TimedTextSource.CreateFromUri(ttsEnUri);

            ttsMap[ttsEn] = ttsEnUri;

            var ttsPtUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_pt.srt");
            var ttsPt    = TimedTextSource.CreateFromUri(ttsPtUri);

            ttsMap[ttsPt] = ttsPtUri;

            var ttsSvUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_sv.srt");
            var ttsSv    = TimedTextSource.CreateFromUri(ttsSvUri);

            ttsMap[ttsSv] = ttsSvUri;

            ttsEn.Resolved += Tts_Resolved;
            ttsPt.Resolved += Tts_Resolved;
            ttsSv.Resolved += Tts_Resolved;

            source.ExternalTimedTextSources.Add(ttsEn);
            source.ExternalTimedTextSources.Add(ttsPt);
            source.ExternalTimedTextSources.Add(ttsSv);

            // Create the playback item from the source
            var playbackItem = new MediaPlaybackItem(source);

            mpiLogger = new MediaPlaybackItemLogger(LoggerControl, playbackItem);

            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (item, args) =>
            {
                LoggerControl.Log($"TimedMetadataTracksChanged, Number of tracks: {item.TimedMetadataTracks.Count}");
                playbackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
            };

            // Set the source to start playback of the item
            this.mediaPlayerElement.Source = playbackItem;
            LoggerControl.Log($"Loaded: {rootPage.UncaptionedMediaUri}");
        }
        private async void VideoTracks_SelectedIndexChanged(ISingleSelectMediaTrackList sender, object args)
        {
            var videoTrackIndex = sender.SelectedIndex;

            LoggerControl.Log("Switched to video track #" + (videoTrackIndex + 1)
                              + " | Id: " + this.item.VideoTracks[videoTrackIndex].Id
                              + " | Label: " + this.item.VideoTracks[videoTrackIndex].Label);

            // Forces a new frame to be rendered when we are paused.
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                //Make sure to call the mediaPlayerElement on the UI thread:
                if (mediaPlayerElement.MediaPlayer.PlaybackSession.PlaybackState == MediaPlaybackState.Paused)
                {
                    mediaPlayerElement.MediaPlayer.StepForwardOneFrame();
                }
            });
        }
Пример #5
0
        /// <summary>
        /// Given:
        /// y = m * x + b
        /// x = (y - b) /m
        ///
        /// Where from above:
        ///  b = MinPosition
        ///  m = (MaxPosition - MinPosition) / sliderFullScale
        ///
        /// We have:
        ///  Position = (PlaybackPosition - MinPosition) * sliderFullScale / (MaxPosition - MinPosition)
        ///
        /// </summary>
        public double GetSliderPositionAtPlaybackPosition(TimeSpan playbackPosition, double sliderFullScale, TimeSpan MinPosition, TimeSpan MaxPosition)
        {
            if ((MaxPosition - MinPosition).Ticks == 0)
            {
                return(0);
            }

            if (playbackPosition == TimeSpan.Zero)
            {
                LoggerControl.Log("Transient playbackPosition == TimeSpan.Zero", LogViewLoggingLevel.Error);
            }

            var interpolatedPosition = (playbackPosition - MinPosition).Ticks * sliderFullScale / (MaxPosition - MinPosition).Ticks;

            if (interpolatedPosition < 0)
            {
                interpolatedPosition = 0;
                LoggerControl.Log("Transient calculatedPosition < 0", LogViewLoggingLevel.Error);
            }

            return(interpolatedPosition);
        }
Пример #6
0
 private void Log(string message)
 {
     LoggerControl.Log(message);
 }
Пример #7
0
 private void PlaybackSession_PlaybackRateChanged(MediaPlaybackSession sender, object args)
 {
     LoggerControl.Log($"Current playback rate changed to: {sender.PlaybackRate}");
 }
Пример #8
0
 private void InitLoggerControl()
 {
     _loggerControl = new LoggerControl();
     splitContainer1.Panel2.Controls.Add(_loggerControl);
     _loggerControl.Dock = DockStyle.Fill;
 }