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);
        }
Ejemplo n.º 2
0
 public static IWebReader CreateRootReader(this IWebReaderManager webReaderManager, ContentKind contentKind, ContentType contentType = null)
 {
     return(webReaderManager.CreateReader((Uri)null, contentKind, (IWebReader)null, contentType));
 }