private Task SyncStream(SynchronizationData streamState, CancellationToken token) { var playerClock = _playerClockSource.Clock; var targetClock = streamState.Pts - StreamClockMinimumOverhead; if (targetClock - playerClock >= MinimumDelayDuration) { Logger.Info($"{streamState.StreamType}: Pts {streamState.Pts} to {playerClock} resume {targetClock}"); return(_playerClockSource.PlayerClockObservable() .FirstAsync(pClock => pClock >= targetClock) .ToTask(token)); } return(Task.CompletedTask); }
private async Task StreamSync(SynchronizationData streamState, CancellationToken token) { var playerClock = _playerClockSource.LastClock; var clockDiff = streamState.Pts - playerClock - StreamClockMinimumOverhead; if (clockDiff <= TimeSpan.Zero) { return; } var desiredClock = playerClock + clockDiff; Logger.Info($"{streamState.StreamType}: Sync {streamState.Dts} to {playerClock} Restart ({desiredClock})"); await _playerClockSource.PlayerClockObservable() .FirstAsync(pClock => pClock >= desiredClock) .ToTask(token) .ConfigureAwait(false); }
private Task StreamSync(SynchronizationData streamState, CancellationToken token) { var playerClock = PlayerClockProvider.LastClock; if (playerClock < TimeSpan.Zero) { playerClock = streamState.FirstPts; } var clockDiff = streamState.Pts - playerClock - StreamClockMinimumOverhead; if (clockDiff <= TimeSpan.Zero) { return(Task.CompletedTask); } var desiredClock = playerClock + clockDiff; Logger.Info($"{streamState.StreamType}: Sync {streamState.Dts} to {playerClock} ({clockDiff}) Restart {desiredClock}"); return(_playerClockSource.PlayerClockObservable() .FirstAsync(pClock => pClock >= desiredClock) .ToTask(token)); }
public IObservable <TimeSpan> PlayerClock() { return(_playerClock.PlayerClockObservable()); }
public IObservable <TimeSpan> TimeUpdated() { return(_playerClock.PlayerClockObservable().Sample(ClockInterval)); }