示例#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;
        }