Ejemplo n.º 1
0
        public override async Task Open()
        {
            metaSize = 0; metaCount = 0; metaOffset = 0; readAheadLength = 0; metaInt = 0;
            bool           hasMetaTitles = MetaHeaderCallback != null;
            HttpWebRequest request       = (HttpWebRequest)WebRequest.Create(url);

            request.ApplyProxy();
            request.UserAgent = UserAgent;
            //request.Timeout=connectionTimeout;
            request.Timeout          = 3000;
            request.ReadWriteTimeout = 5000;
            // Pieprasa ICE meta datus.
            if (hasMetaTitles)
            {
                request.Headers.Add("Icy-MetaData", "1");
            }
            response = null;
            try {
                response = (HttpWebResponse)(await request.GetResponseAsync());
            } catch (WebException) {
                /*if (connectionTimeout == 30000) connectionTimeout=5000;
                 * else connectionTimeout+=5000;
                 * unexpectedStop.BeginInvoke(null, null);*/
                throw;
            }

            hasMetaTitles = hasMetaTitles && ushort.TryParse(response.GetResponseHeader("icy-metaint"), out metaInt);
            System.Diagnostics.Debug.WriteLine("metaint=" + metaInt);
            sourceStream = response.GetResponseStream();
        }
Ejemplo n.º 2
0
        /// <summary>Atver kārtējo MP3 fragmentu kā <see cref="sourceStream"/>.</summary>
        public override async Task Open()
        {
            try {
                if (urlFormat == null)
                {
                    using (var client = new ProperWebClient(System.Text.Encoding.ASCII)) {
                        string playlist = await client.DownloadStringTaskAsync(baseUrl + "chunklist.m3u8");

                        urlFormat = baseUrl + "media_{0}.mp3" + new Regex("\\?wowzasessionid=([0-9]+)").Match(playlist).Value;
                        chunkIdx  = int.Parse(new Regex("MEDIA-SEQUENCE:([0-9]+)").Match(playlist).Groups[1].Value);
                    }
                }
                else if (sourceStream != null)
                {
                    sourceStream.Dispose();
                }

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(urlFormat, chunkIdx));
                request.ApplyProxy(); request.Timeout = 3000;               // Trīs sekundes.
                HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync());
                sourceStream = response.GetResponseStream();
            } catch (Exception) {
                // Lai nākošreiz mēģina iegūt jaunu atskaņošanas adresi.
                urlFormat = null;
                throw;
            }
            chunkIdx++;
        }