private void OnPlayerEvent(PlayerEventArgs args) { switch (args.Event) { case PlayerEvent.StartOfStream: consecutive_errors = 0; break; case PlayerEvent.EndOfStream: EosTransition(); break; case PlayerEvent.Error: if (++consecutive_errors >= 5) { consecutive_errors = 0; player_engine.Close(false); OnStopped(); break; } CancelErrorTransition(); // TODO why is this so long? any reason not to be instantaneous? Application.RunTimeout(250, EosTransition); break; case PlayerEvent.StateChange: if (((PlayerEventStateChangeArgs)args).Current != PlayerState.Loading) { break; } TrackInfo track = player_engine.CurrentTrack; if (changing_to_track != track && track != null) { CurrentTrack = track; } changing_to_track = null; if (!raise_started_after_transition) { transition_track_started = false; OnTrackStarted(); } else { transition_track_started = true; } break; } }
public void Stop() { engine_service.Close(); }