private void VideoService_VideoStateChanged(object sender, VideoStateChangedEventArgs e) { switch (e.NewState) { case VideoState.Configured: videoService.ShowDefaultControls = false; videoService.Load("http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"); break; case VideoState.Playing: isPlaying = true; break; case VideoState.Paused: isPlaying = false; break; } }
private void Video_VideoStateChanged(object sender, VideoStateChangedEventArgs e) { var theaterDays = Game.AsTheaterDays(); var helpOverlay = theaterDays.FindSingleElement <HelpOverlay>(); var debugOverlay = theaterDays.FindSingleElement <DebugOverlay>(); var video = theaterDays.FindSingleElement <BackgroundVideo>(); switch (e.NewState) { case MediaEngineEvent.Play: case MediaEngineEvent.Playing: if (helpOverlay != null) { helpOverlay.Hide(); } break; case MediaEngineEvent.CanPlay: case MediaEngineEvent.Pause: case MediaEngineEvent.Ended: if (helpOverlay != null) { helpOverlay.Show(); } break; case MediaEngineEvent.Error: if (debugOverlay != null) { if (video != null) { var error = video.GetError(); var errCode = (MediaEngineErr)error.GetErrorCode(); var hr = error.ExtendedErrorCode; debugOverlay.AddLine($"ERROR: MediaEngine reported an error (Type: {errCode}, {hr})"); } else { // Not reachable. debugOverlay.AddLine("ERROR: MediaEngine reported an error."); } debugOverlay.Show(); } if (helpOverlay != null) { helpOverlay.Hide(); } break; case MediaEngineEvent.Abort: if (debugOverlay != null) { debugOverlay.AddLine("Warning: MediaEngine aborted."); debugOverlay.Show(); } if (helpOverlay != null) { helpOverlay.Hide(); } break; } var audio = theaterDays.FindSingleElement <AudioController>(); var music = audio?.Music; if (music != null) { switch (e.NewState) { case MediaEngineEvent.Play: music.Play(); if (e.OldValidState == MediaEngineEvent.Pause) { if (video != null) { // Force seeking to music time to avoid the lag. // The lag appears when you pause for too many times (about 5 times) during playback. video.CurrentTime = music.CurrentTime; } } break; case MediaEngineEvent.Playing: music.Play(); break; case MediaEngineEvent.Pause: music.Pause(); break; case MediaEngineEvent.CanPlay: case MediaEngineEvent.Ended: case MediaEngineEvent.Error: case MediaEngineEvent.Abort: music.Stop(); theaterDays.AudioManager.Sfx.StopAll(); break; } } var tapPoints = theaterDays.FindSingleElement <TapPoints>(); if (tapPoints != null) { switch (e.NewState) { case MediaEngineEvent.Play: case MediaEngineEvent.Playing: tapPoints.FadeIn(TimeSpan.FromSeconds(1.5)); break; case MediaEngineEvent.Pause: case MediaEngineEvent.Ended: case MediaEngineEvent.Error: case MediaEngineEvent.Abort: tapPoints.FadeOut(TimeSpan.FromSeconds(1.5)); break; } } }