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; } }
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; }