示例#1
0
        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));
        }