public async Task<ISegmentManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            var subProgram = await _hlsPlaylistSegmentManagerPolicy.CreateSubProgramAsync(parameters.Source, parameters.ContentType ?? contentType, parameters.StreamContentType, cancellationToken).ConfigureAwait(false);

            var segmentManager = new HlsPlaylistSegmentManager(subProgram.Video, parameters.ContentType ?? contentType, parameters.StreamContentType, _platformServices, cancellationToken);

            return segmentManager;
        }
        public Task<ISegmentManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            var webReader = parameters.WebReader ?? _webReaderManager.CreateRootReader(ContentKind.AnyMedia, contentType);

            var segmentManager = new SimpleSegmentManager(webReader, parameters.Source, parameters.ContentType ?? contentType, parameters.StreamContentType);

            return Task.FromResult<ISegmentManager>(segmentManager);
        }
        public async Task<ISegmentReaderManager> CreateAsync(ISegmentManagerParameters parameters, CancellationToken cancellationToken)
        {
            ISegmentManager playlist;

            var contentType = parameters.ContentType;

            if (null == contentType)
                playlist = await _segmentManagerFactory.CreateAsync(parameters, cancellationToken).ConfigureAwait(false);
            else
                playlist = await _segmentManagerFactory.CreateAsync(parameters, contentType, cancellationToken).ConfigureAwait(false);

            if (null == playlist)
                throw new FileNotFoundException("Unable to create playlist");

            return new SegmentReaderManager(new[] { playlist }, _webMetadataFactory, _retryManager, _platformServices);
        }
        public virtual async Task <ISegmentManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            foreach (var uri in parameters.Source)
            {
                var localUrl       = uri;
                var retry          = _retryManager.CreateWebRetry(3, 333);
                var segmentManager = await retry.CallAsync(async() =>
                {
                    var webReader = _webReaderManager.CreateReader(localUrl, ContentTypes.Pls.Kind, null, ContentTypes.Pls);
                    ISegmentManager segmentManager2;
                    try
                    {
                        using (var webStreamResponse = await webReader.GetWebStreamAsync(localUrl, false, cancellationToken, null, new long?(), new long?()))
                        {
                            if (!webStreamResponse.IsSuccessStatusCode)
                            {
                                webReader.Dispose();
                                segmentManager2 = null;
                            }
                            else
                            {
                                using (var stream = await webStreamResponse.GetStreamAsync(cancellationToken))
                                    segmentManager2 = await ReadPlaylistAsync(webReader, webStreamResponse.ActualUrl, stream, cancellationToken);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        webReader.Dispose();
                        throw;
                    }
                    return(segmentManager2);
                }, cancellationToken);

                if (null == segmentManager)
                {
                    continue;
                }

                return(segmentManager);
            }
            return(null);
        }
Esempio n. 5
0
        public async Task <ISegmentReaderManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            ISegmentManager playlist;

            if ((ContentType)null == contentType)
            {
                playlist = await this._segmentManagerFactory.CreateAsync(parameters, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                playlist = await this._segmentManagerFactory.CreateAsync(parameters, contentType, cancellationToken).ConfigureAwait(false);
            }
            if (null == playlist)
            {
                throw new FileNotFoundException("Unable to create playlist");
            }
            return((ISegmentReaderManager) new SegmentReaderManager((IEnumerable <ISegmentManager>) new ISegmentManager[1]
            {
                playlist
            }, this._webMetadataFactory, this._retryManager, this._platformServices));
        }
Esempio n. 6
0
        public async Task <ISegmentReaderManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            ISegmentManager playlist;

            if (null == contentType)
            {
                playlist = await _segmentManagerFactory.CreateAsync(parameters, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                playlist = await _segmentManagerFactory.CreateAsync(parameters, contentType, cancellationToken).ConfigureAwait(false);
            }

            if (null == playlist)
            {
                throw new FileNotFoundException("Unable to create playlist");
            }

            var segmentManagers = new[] { playlist };

            return(new SegmentReaderManager(segmentManagers, _webMetadataFactory, _retryManager, _platformServices));
        }
Esempio n. 7
0
 public static Task <ISegmentReaderManager> CreateAsync(this ISegmentReaderManagerFactory factory, ISegmentManagerParameters parameters, CancellationToken cancellationToken)
 {
     return(factory.CreateAsync(parameters, (ContentType)null, cancellationToken));
 }
 public static Task<ISegmentReaderManager> CreateAsync(this ISegmentReaderManagerFactory factory, ISegmentManagerParameters parameters, CancellationToken cancellationToken)
 {
     return factory.CreateAsync(parameters, cancellationToken);
 }
        public virtual async Task<ISegmentManager> CreateAsync(ISegmentManagerParameters parameters, ContentType contentType, CancellationToken cancellationToken)
        {
            foreach (var url in parameters.Source)
            {
                var localUrl = url;

                var retry = _retryManager.CreateWebRetry(3, 333);

                var segmentManager = await retry.CallAsync(
                    async () =>
                    {
                        var webReader = _webReaderManager.CreateReader(localUrl, ContentTypes.Pls.Kind, contentType: ContentTypes.Pls);

                        try
                        {
                            using (var webStream = await webReader.GetWebStreamAsync(localUrl, false, cancellationToken).ConfigureAwait(false))
                            {
                                if (!webStream.IsSuccessStatusCode)
                                {
                                    webReader.Dispose();
                                    return null;
                                }

                                using (var stream = await webStream.GetStreamAsync(cancellationToken).ConfigureAwait(false))
                                {
                                    return await ReadPlaylistAsync(webReader, webStream.ActualUrl, stream, parameters.ContentType, parameters.StreamContentType, cancellationToken).ConfigureAwait(false);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            webReader.Dispose();
                            throw;
                        }
                    },
                    cancellationToken);

                if (null != segmentManager)
                    return segmentManager;
            }

            return null;
        }