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