Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
 public IObservable <TimeSpan> PlayerClock()
 {
     return(_playerClock.PlayerClockObservable());
 }
Example #5
0
 public IObservable <TimeSpan> TimeUpdated()
 {
     return(_playerClock.PlayerClockObservable().Sample(ClockInterval));
 }