Esempio n. 1
0
 private void SetupStream(out IceCastStream radioStream, string url)
 {
     radioStream = new IceCastStream(url, false);
     radioStream.Start();
     radioStream.OnStreamUpdate += new StreamUpdate(IceCastStreamUpdate);
     dtLastEvent = DateTime.Now;
 }
Esempio n. 2
0
        public Stream StartStreaming(string host, string password, string mountPoint, string mimeType, bool isPublic, string name, string description,
                                     string url, string genre, int port = 8000)
        {
            IceCastStream iceCastStream = new IceCastStream(host, port);

            byte[] byteArray = Encoding.ASCII.GetBytes($"source:{password}");
            string basicAuth = Convert.ToBase64String(byteArray);

            StreamWriter streamWriter = new StreamWriter(iceCastStream, Encoding.ASCII);
            StreamReader streamReader = new StreamReader(iceCastStream, Encoding.ASCII);

            streamWriter.WriteLine($"PUT /{mountPoint} HTTP/1.1");

            streamWriter.WriteLine($"Host: {host}:{port}");
            streamWriter.WriteLine($"Authorization: Basic {basicAuth}");
            streamWriter.WriteLine("User-Agent: icecaster");
            streamWriter.WriteLine("Accept: */*");
            streamWriter.WriteLine("Transfer-Encoding: chunked");
            streamWriter.WriteLine($"Content-Type: {mimeType}");
            streamWriter.WriteLine($"Ice-Public: {(isPublic ? 1 : 0)}");
            streamWriter.WriteLine($"Ice-Name: {name}");
            streamWriter.WriteLine($"Ice-Description: {description}");
            streamWriter.WriteLine($"Ice-URL: {url}");
            streamWriter.WriteLine($"Ice-Genre: {genre}");
            streamWriter.WriteLine("Expect: 100-continue");
            streamWriter.WriteLine();
            streamWriter.Flush();
            string response = streamReader.ReadLine();

            if (response == null)
            {
                throw new IceCastException("Server didn't respond");
            }

            string responseCode = Regex.Replace(response, @"^HTTP/\d\.\d\s+(\d+ .*?)\s*$", "$1");

            switch (responseCode)
            {
            case "100 Continue":
                break;

            default:
                throw new IceCastException(responseCode);
            }

            return(iceCastStream);
        }
Esempio n. 3
0
        public void RunChannel(string radioChannelCode)
        {
            DataRow row;

            if (!Exec_MySQL_RADIOCHANNEL_S(radioChannelCode, out row))
            {
                Console.WriteLine("No radiochannel available. Please set correct 'RadioCode' in ini file");
                return;
            }

            dict = new ConcurrentDictionary <string, DetectSong>();

            radioName    = row["RADIONAME"].ToString();
            radioCode    = row["NAMECODE"].ToString();
            radioChannel = Convert.ToInt32(row["RADIOCHANNEL_ID"]);
            GetSettings();
            SetWindowTitle();

            try
            {
                CDR.Ini.IniFile ini = new CDR.Ini.IniFile(CDR.DB_Helper.FingerprintIniFile);
                wsAPICDRNL_User = ini.IniReadValue("Muziekweb", "wsAPICDRNL_User", wsAPICDRNL_User);
            }
            catch { }

            // Are we using the muziekweb dataset, Yes than metadata can be requested
            // other datasets can not be used, because ID's do not match
            retrieveMetadataFromMuziekweb = (Exec_MySQL_TITELNUMMERTRACK_ID_COUNT() > 1000000); // this is probally the muziekweb dataset


            Console.WriteLine(string.Format("Listing to '{0}'.", radioName));

            // Kies een tijd uit waarbij de minuut in het uur ('s nachts 2 uur) random is gekozen
            // (zodat ze niet allemaal tegelijktijd stoppen met werken)
            Random   random          = new Random();
            DateTime dtStopListening = DateTime.Now.Date.Add(new TimeSpan(1, 2, random.Next(0, 59), 0, 0));

            SetupStream(out radioStream, row["URL"].ToString());
            try
            {
                bool stop = false;
                do
                {
                    if (Console.KeyAvailable)
                    {
                        ConsoleKeyInfo key = Console.ReadKey(true);
                        if (key.KeyChar == '\r')
                        {
                            stop = true;
                            break;
                        }
                        else if (char.ToUpper(key.KeyChar) == 'W')
                        {
                            doWriteChunksToWAVFile = !doWriteChunksToWAVFile;
                            SetWindowTitle();
                        }
                        else if (char.ToUpper(key.KeyChar) == 'A')
                        {
                            doAudioOn = !doAudioOn;
                            SetWindowTitle();
                            radioStream.Listen = doAudioOn;
                        }
                    }

                    Thread.Sleep(100);
                    if ((DateTime.Now - dtLastEvent).TotalSeconds > 30)
                    {
                        // Het is telang geleden dat we enig leven van de icestream class hebben gekregen
                        // Kill het en maak een nieuwe aan.
                        dtLastEvent = DateTime.MaxValue;
                        Console.WriteLine();
                        Console.WriteLine(radioName + ": Killing app and restarting it");

                        Program.StoreConsoleWindowPosition(radioChannelCode);

                        // terminate this process and restart it (to avoid block/lock problems)
                        System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location, GetCommandParameters());
                        stop = true;
                        break;
                    }

                    if ((DateTime.Now - dtStopListening).TotalSeconds > 0)
                    {
                        // we stoppen zonder stop te zetten!
                        System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location, GetCommandParameters());
                        break;
                    }
                } while (!stop);

                CleanUpDict(true);
            }
            finally
            {
                if (radioStream != null)
                {
                    radioStream.Stop(); // close is the same
                    radioStream = null;
                }
            }
        }