private IdentificationResponse streamJob(JobInput input)
        {
            // perform
            Console.WriteLine("Installing ffmpeg...");
            var ffmpegPath = InstallDependencies.Run();

            Console.WriteLine("Getting m3u8 link...");
            var m3u8Link = M3U8.GetAudioOnlyM3U8(input.Identifier);

            Console.WriteLine("Listening to channel...");
            var mp3 = ListenToChannel.Listen(m3u8Link);

            Console.WriteLine("Running recognition...");
            var result = Recognition.Run(mp3);

            Console.WriteLine(result);
            Console.WriteLine("Finished...");

            // cleanup
            Console.WriteLine("Cleaning up...");
            System.IO.File.Delete("/tmp/audio.mp3");
            System.IO.File.Delete("/tmp/audio.mp3.cli.lo");

            return(result);
        }
        private async void Play()
        {
            string url       = selectedQuality.url;
            string lastindex = string.Empty;
            int    startLine = 9;

            try
            {
                while (isStreamDownloading)
                {
                    string response = await httpClient.GetStringAsync(url);

                    string[] playlist = M3U8.Build(response);
                    if (lastindex == string.Empty)
                    {
                        lastindex = playlist[19]; //?
                    }
                    bool isLastFound = false;
                    for (int i = 0; i < 6; i++)
                    {
                        string chunkName = playlist[startLine + (i * 2)];
                        if (!isLastFound)
                        {
                            if (lastindex != chunkName)
                            {
                                continue;
                            }
                            else
                            {
                                isLastFound = true;
                                continue;
                            }
                        }
                        lastindex = chunkName;
                        string chunkPath = url.ToString().Replace("index-live.m3u8", chunkName).Split('?')[0];
                        byte[] chunk     = await httpClient.GetByteArrayAsync(chunkPath);

                        lock ( chunks )
                        {
                            chunks.Enqueue(new TwitchDownload(chunkName, chunk));
                        }
                    }
                    lastindex = playlist[19];
                    Thread.Sleep(1000);
                }
            }
            catch
            {
                isStreamDownloading = false;
            }

            lock ( chunks )
            {
                chunks.Clear();
            }

            isStreamStopped = true;
        }
        private async Task <Dictionary <string, TwitchQuality> > GetQualityPlaylist(string channelName)
        {
            TwitchAccessToken accessToken;

            try
            {
                accessToken = await GetAccessToken(channelName);
            }
            catch
            {
                return(null);
            }

            if (accessToken == null)
            {
                return(null);
            }

            Uri site = new Uri("http://usher.twitch.tv/api/channel/hls/"
                               + channelName.ToLower()
                               + ".m3u8?player=twitchweb&token="
                               + ""
                               + accessToken.token
                               + "&sig="
                               + accessToken.sig
                               + "&allow_audio_only=true&allow_source=true&type=any&p=121222");

            string response;

            try
            {
                response = await httpClient.GetStringAsync(site);
            }
            catch
            {
                return(null);
            }

            string[] qualityPlaylist = M3U8.Build(response);

            return(ParseQualityPlaylist(qualityPlaylist));
        }