Example #1
0
        static async Task PlayAsync(SingleStreamSimulator simulator, CancellationToken cancellationToken)
        {
            var source = new Uri(Sources[0]);

            if (source.HasExtension(".pls"))
            {
                using (var client = new HttpClient())
                using (var response = await client.GetAsync(source, HttpCompletionOption.ResponseContentRead, cancellationToken).ConfigureAwait(false))
                {
                    response.EnsureSuccessStatusCode();

                    using (var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
                    using (var reader = new StreamReader(stream))
                    {
                        var pls = new PlsParser(response.RequestMessage.RequestUri);

                        if (!await pls.ParseAsync(reader).ConfigureAwait(false))
                            throw new FileNotFoundException("Unable to parse PLS playlist");

                        var track = pls.Tracks.FirstOrDefault();

                        if (null == track)
                            throw new FileNotFoundException("Empty PLS playlist");

                        Uri trackUrl;
                        if (!Uri.TryCreate(pls.BaseUrl, track.File, out trackUrl))
                            throw new FileNotFoundException("Invalid URL in PLS playlist");

                        source = trackUrl;
                    }
                }
            }

            await simulator.StartAsync(source, cancellationToken).ConfigureAwait(false);
        }
Example #2
0
        /// <summary>
        /// </summary>
        /// <param name="parser"> </param>
        /// <param name="baseUrl"></param>
        /// <param name="stream"> </param>
        /// <param name="encoding"> </param>
        public static void Parse(this M3U8Parser parser, Uri baseUrl, Stream stream, Encoding encoding = null)
        {
            if (null == encoding)
                encoding = baseUrl.HasExtension(".m3u") ? SmEncodings.Latin1 : Encoding.UTF8;

            using (var sr = new StreamReader(stream, encoding))
            {
                parser.Parse(baseUrl, sr);
            }
        }