private void DetectPlaybackEnded(MediaType main) { var playbackEndClock = MediaCore.Blocks[main].Count > 0 ? MediaCore.Blocks[main].RangeEndTime : Container.Components.PlaybackEndTime ?? TimeSpan.MaxValue; var isAtEndOfPlayback = MediaCore.PlaybackPosition.Ticks >= playbackEndClock.Ticks || MediaCore.Timing.HasDisconnectedClocks; // Check End of Media Scenarios if (Commands.HasPendingCommands == false && MediaCore.HasDecodingEnded && isAtEndOfPlayback) { // Rendered all and nothing else to render if (State.HasMediaEnded == false) { MediaCore.PausePlayback(); MediaCore.ChangePlaybackPosition(playbackEndClock); State.UpdateMediaEnded(true, playbackEndClock); State.UpdateMediaState(PlaybackStatus.Stop); MediaCore.InvalidateRenderers(); } } else { State.UpdateMediaEnded(false, TimeSpan.Zero); } }