private async Task <TimeSpan> SeekAsync(TimeSpan position) { Debug.WriteLine("SmMediaManager.SeekAsync()"); TimeSpan timeSpan; if (_playbackCancellationTokenSource.IsCancellationRequested) { timeSpan = TimeSpan.MinValue; } else { try { if (IsSeekInRange(position)) { return(position); } else { IMediaReader[] readers = _readers; if (readers == null || readers.Length < 1) { return(TimeSpan.MinValue); } else { await TaskEx.WhenAll(readers.Select(reader => reader.StopAsync())).ConfigureAwait(false); if (_playbackCancellationTokenSource.IsCancellationRequested) { return(TimeSpan.MinValue); } else { foreach (IMediaReader mediaReader in readers) { mediaReader.IsEnabled = true; } State = MediaManagerState.Seeking; TimeSpan actualPosition = await _readerManager.SeekAsync(position, _playbackCancellationTokenSource.Token).ConfigureAwait(false); StartReaders(); timeSpan = actualPosition; return(timeSpan); } } } } catch (Exception ex) { Debug.WriteLine("SmMediaManager.SeekAsync() failed: " + ex.Message); } timeSpan = TimeSpan.MinValue; } return(timeSpan); }
public static async Task <TimeSpan> StartAsync(this ISegmentReaderManager segmentManager, CancellationToken cancellationToken) { await segmentManager.StartAsync().ConfigureAwait(false); return(await segmentManager.SeekAsync(TimeSpan.Zero, cancellationToken).ConfigureAwait(false)); }