示例#1
0
 private void Button_PlayPause(object sender, System.Windows.RoutedEventArgs e)
 {
     if ((SilverlightPlayer.CurrentState == MediaElementState.Stopped) || (SilverlightPlayer.CurrentState == MediaElementState.Paused) || (SilverlightPlayer.CurrentState == MediaElementState.Buffering))
     {
         SilverlightPlayer.Play();
         App.ro.bufferingInProgress = false;
     }
     else if (SilverlightPlayer.CurrentState == MediaElementState.Playing)
     {
         SilverlightPlayer.Pause();
         App.ro.bufferingInProgress = true;
     }
 }
示例#2
0
        private void GeneralUpdate()
        {
            //TODO : Dont get from ui. change to static or const
            // Get values from UI
            App.ro.upperThreshold = Convert.ToDouble(tbUpperThreshold.Text);
            App.ro.lowerThreshold = Convert.ToDouble(tbLowerThreshold.Text);

            // Set values to UI
            //tbRenderedFPS.Text = SilverlightPlayer.RenderedFramesPerSecond.ToString();
            //tbDroppedFrames.Text = SilverlightPlayer.DroppedFramesPerSecond.ToString();
            tbDownloadProgressOffset.Text = SilverlightPlayer.DownloadProgressOffset.ToString();
            //tbMediaTimeline.Text = string.Format("{0:00}:{1:00}:{2:00} / {3:00}:{4:00}:{5:00}",
            //    SilverlightPlayer.Position.Hours,
            //    SilverlightPlayer.Position.Minutes,
            //    SilverlightPlayer.Position.Seconds,
            //    SilverlightPlayer.NaturalDuration.TimeSpan.Hours,
            //    SilverlightPlayer.NaturalDuration.TimeSpan.Minutes,
            //    SilverlightPlayer.NaturalDuration.TimeSpan.Seconds);

            tbMediaTimeline.Text = string.Format("{0:0}:{1:00} / {2:0}:{3:00}",
                                                 SilverlightPlayer.Position.Minutes,
                                                 SilverlightPlayer.Position.Seconds,
                                                 SilverlightPlayer.NaturalDuration.TimeSpan.Minutes,
                                                 SilverlightPlayer.NaturalDuration.TimeSpan.Seconds);

            //position in seconds
            App.ro.overridePosition = SilverlightPlayer.Position.TotalSeconds;
            //download progress in seconds
            App.ro.overrideDownloadProgress = SilverlightPlayer.DownloadProgress *
                                              SilverlightPlayer.NaturalDuration.TimeSpan.TotalSeconds;
            //difference between downloaded and current playback position in seconds
            App.ro.overrideDelta = App.ro.overrideDownloadProgress - App.ro.overridePosition;

            // Set values to UI
            tbOverridePosition.Text         = App.ro.overridePosition.ToString();
            tbOverrideDownloadProgress.Text = App.ro.overrideDownloadProgress.ToString();
            tbOverrideDelta.Text            = App.ro.overrideDelta.ToString();

            if (useOverriding)
            {
                if (SilverlightPlayer.CurrentState == MediaElementState.Playing)
                {
                    //framePerformanceUpdate.Start();

                    //if (!App.ro.bufferingInProgress)//testing disable this
                    {
                        if (SilverlightPlayer.DownloadProgress != 1)                         //only pause and rebuffer if download progress is not complete
                        {
                            //if (App.ro.overrideDownloadProgress < (App.ro.overridePosition + App.ro.lowerThreshold))
                            if (App.ro.overrideDelta < 1.0)
                            {
                                SilverlightPlayer.Pause();
                                App.ro.bufferingInProgress = true;
                                App.ro.rebufferingCounter++;
                                tbRebufferingCounter.Text = App.ro.rebufferingCounter.ToString();
                            }
                        }
                    }
                    //App.ro.droppedFramesCounter = App.ro.droppedFramesCounter + SilverlightPlayer.DroppedFramesPerSecond;
                    //tbDroppedFramesCounter.Text = App.ro.droppedFramesCounter.ToString();
                }
                if (SilverlightPlayer.CurrentState == MediaElementState.Paused || SilverlightPlayer.CurrentState == MediaElementState.Buffering)
                {
                    //framePerformanceUpdate.Stop();

                    if (App.ro.bufferingInProgress)
                    {
                        if (SilverlightPlayer.DownloadProgress == 1)                         // if completed download, theres no need to pause
                        {
                            SilverlightPlayer.Play();
                            App.ro.bufferingInProgress = false;
                        }
                        //else if (App.ro.overrideDownloadProgress > (App.ro.overridePosition + App.ro.upperThreshold))
                        else if (App.ro.overrideDelta > 1.0)
                        {
                            SilverlightPlayer.Play();
                            App.ro.bufferingInProgress = false;
                        }
                    }
                }
            }

            UpdateAnalysis();

            //dirty workaround. sometimes total media time is not updated during mediaopened event. have to pool manually
            pbPlaybackProgress.Maximum = SilverlightPlayer.NaturalDuration.TimeSpan.TotalSeconds;
        }
示例#3
0
 private void btnStop_Click(object sender, System.Windows.RoutedEventArgs e)
 {
     SilverlightPlayer.Stop();
     App.ro.bufferingInProgress = true;
 }
示例#4
0
        private void SilverlightPlayer_MediaOpened(object sender, System.Windows.RoutedEventArgs e)
        {
            // Dirty workaround fixing Mediaelement bug where download progress is 1 (should be less than 1) at start.
            // tears of steel 480 is effected.
            if (SilverlightPlayer.DownloadProgress == 1)
            {
                App.ro.rebufferingCounter = App.ro.rebufferingCounter - 1;
            }

            // Reset values
            App.ro.rebufferingCounter   = 0;
            App.ro.droppedFramesCounter = 0.0;
            defaultRebufferingCounter   = 0;

            if (useOverriding)
            {
                SilverlightPlayer.Pause();
            }

            App.ro.bufferingInProgress = true;

            //Get new values
            //sPlaybackProgress.Maximum = SilverlightPlayer.NaturalDuration.TimeSpan.TotalSeconds;
            pbPlaybackProgress.Maximum = SilverlightPlayer.NaturalDuration.TimeSpan.TotalSeconds;
            tbWidth.Text                = SilverlightPlayer.NaturalVideoWidth.ToString();
            tbHeight.Text               = SilverlightPlayer.NaturalVideoHeight.ToString();
            tbDuration.Text             = SilverlightPlayer.NaturalDuration.ToString();
            tbRebufferingCounter.Text   = App.ro.rebufferingCounter.ToString();
            tbDroppedFramesCounter.Text = App.ro.droppedFramesCounter.ToString();

            //TODO: Finish this. Play selected media instead of recommended resolution.
            {
                int i = 0;
                while (App.myMediaList[i].Resolution != App.ro.SelectedMedia)
                {
                    i++;
                }
                StringBuilder resolution = new StringBuilder();
                resolution.Append(Enum.GetName(typeof(myMediaInfo.Resolutions), App.myMediaList[i].Resolution));
                resolution.Remove(0, 1);
                tbResolution.Text = resolution.ToString();
            }

            generalUpdateTimer.Start();
            tbTimerEnabled.Text = generalUpdateTimer.IsEnabled.ToString();

            //set player width and height
            //SilverlightPlayer.Width = SilverlightPlayer.NaturalVideoWidth;
            //SilverlightPlayer.Height = SilverlightPlayer.NaturalVideoHeight;

            //SilverlightPlayer.Width = gridPlayer.ActualWidth-52;
            //SilverlightPlayer.Height = gridPlayer.ActualHeight-52;

            //bindPlaybackProgress = new Binding("");
            //bindPlaybackProgress.Source = SilverlightPlayer.Position.TotalSeconds;
            //pbPlaybackProgress.SetBinding(ProgressBar.ValueProperty, bindPlaybackProgress);
            playbakProgressTimer.Start();
            //SilverlightPlayer.Visibility = Visibility.Visible;

            //update player window size
            UpdatePlayerSize();
        }
示例#5
0
        private void SilverlightPlayer_CurrentStateChanged(object sender, System.Windows.RoutedEventArgs e)
        {
            tbCurrentState.Text = SilverlightPlayer.CurrentState.ToString();
            if (useOverriding)
            {
                if (SilverlightPlayer.CurrentState == MediaElementState.Playing)
                {
                    generalUpdateTimer.Start();
                    tbTimerEnabled.Text = generalUpdateTimer.IsEnabled.ToString();

                    iconPause.Visibility = Visibility.Collapsed;
                    iconPlay.Visibility  = Visibility.Visible;
                    iconStop.Visibility  = Visibility.Collapsed;
                }
                else if (SilverlightPlayer.CurrentState == MediaElementState.Stopped)
                {
                    generalUpdateTimer.Stop();
                    tbTimerEnabled.Text  = generalUpdateTimer.IsEnabled.ToString();
                    tbMediaTimeline.Text = "0:00 / 0:00";
                    playbakProgressTimer.Stop();

                    iconPause.Visibility = Visibility.Collapsed;
                    iconPlay.Visibility  = Visibility.Collapsed;
                    iconStop.Visibility  = Visibility.Visible;
                }
                else if (SilverlightPlayer.CurrentState == MediaElementState.Buffering)
                {
                    SilverlightPlayer.Pause();
                    App.ro.bufferingInProgress = true;


                    iconPause.Visibility = Visibility.Visible;
                    iconPlay.Visibility  = Visibility.Collapsed;
                    iconStop.Visibility  = Visibility.Collapsed;
                }
                else if (SilverlightPlayer.CurrentState == MediaElementState.Paused)
                {
                    SilverlightPlayer.Pause();
                    App.ro.bufferingInProgress = true;

                    iconPause.Visibility = Visibility.Visible;
                    iconPlay.Visibility  = Visibility.Collapsed;
                    iconStop.Visibility  = Visibility.Collapsed;
                }
            }
            else
            {
                if (SilverlightPlayer.CurrentState == MediaElementState.Buffering)
                {
                    App.ro.bufferingInProgress = true;
                    App.ro.rebufferingCounter++;
                    tbRebufferingCounter.Text = App.ro.rebufferingCounter.ToString();

                    iconPause.Visibility = Visibility.Visible;
                    iconPlay.Visibility  = Visibility.Collapsed;
                    iconStop.Visibility  = Visibility.Collapsed;
                }
                else if (SilverlightPlayer.CurrentState == MediaElementState.Stopped)
                {
                    App.ro.bufferingInProgress = false;

                    iconPause.Visibility = Visibility.Collapsed;
                    iconPlay.Visibility  = Visibility.Collapsed;
                    iconStop.Visibility  = Visibility.Visible;
                }
                else if (SilverlightPlayer.CurrentState == MediaElementState.Playing)
                {
                    App.ro.bufferingInProgress = false;

                    iconPause.Visibility = Visibility.Collapsed;
                    iconPlay.Visibility  = Visibility.Visible;
                    iconStop.Visibility  = Visibility.Collapsed;
                }
            }
        }