Program do słuchania radia - problem, gdy serwer jest wyłączony

0

Witam.
Napisałem w C# program, który pozwala na słuchanie radia internetowego. I niby mi wszystko ładnie działa, ale gdy tracę połączenie z internetem lub serwer radiowy jest wyłączony, to uruchomienie mojego programu kończy się błędem vshost32.clr2

Korzystam z biblioteki wmplib i wszystko robię tak.

  1. tworzę obiekt klasy WindowsMediaPlayer
  wmp = new WindowsMediaPlayer();
  1. następnie podaję adres URL radia
wmp.URL ="http://s2.eradia.net:7902/"; 

Problem polega na tym, że przekazanie adresu do URL powoduje natychmiastowe odtwarzanie.
Chciałbym zrobić tak, że najpierw podaję adres serwera, następnie sprawdzam, czy jest aktualnie nadawany strumień i jeżeli jest, to wywołuję metodę snd.Play();
Dodam, że umieszczenie całego kodu ładującego URL w bloku try/cath nie rozwiązuje problemu, ponieważ nie jest to traktowane jako wyjątek z poziomu samej aplikacji, a raczej jest to błąd zwracany przez bibliotekę wmplib.

Oto jak wygląda kawałek mojego kodu

  WindowsMediaPlayer wmp;
        System.Diagnostics.Process p;
        DateTime dtm;
        string godzina, minuta;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            wmp = new WindowsMediaPlayer();
            try
            {
                wmp.URL ="http://s2.eradia.net:7902/"; @
                wmp.controls.play();
            }
            catch (Exception ex) { }
0

No cześć. Ja to zrobiłem w taki sposób:

public bool StartRadio(string radioName)
        {
            if (!radioList.ContainsKey(radioName)) return false;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(this.radioList[radioName]));
            req.Headers["Icy-Metadata"] = "1"; // shoutcast
            req.Accept = "*/*";
            req.Timeout = 10000; // ms
            req.Method = "GET";
            req.UserAgent =
                "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0"; // Trzeba dodać Mozillę, ponieważ shoutcast obsługuje tylko Mozille (O.o)
            string src = string.Empty;
            try
            {
                Stream stream = req.GetResponse().GetResponseStream();
                if (stream == null) return false;
                src = new StreamReader(stream, Encoding.UTF8).ReadToEnd();
            }
            catch (WebException webException)
            {
                return false;
            }
            catch (NotSupportedException notSupportedException)
            {
                return false;
            }
            catch (ProtocolViolationException protocolViolationException)
            {
                return false;
            }
            catch (InvalidOperationException invalidOperationException)
            {
                return false;
            }

            // Shoutcast: Server is currently up and public.
            // Normalny stream: [Reference]
            bool isStreaming = false;
            if (string.IsNullOrEmpty(src)) return false;
            if (src.Contains("[Reference]")) isStreaming = true;
            if (src.Contains("Server is currently up")) isStreaming = true;
            if (!isStreaming) return false;

            CurrentUrl = radioList[radioName];
            player.URL = CurrentUrl;
            player.settings.volume = 100;
            player.controls.play();

            return true;
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1