Ejemplo n.º 1
0
        public FFmpegCrawler(ILoggerFactory factory, ICompressor compressor, string ffmpegDir)
        {
            _logger      = factory.CreateFileLogger();
            _compressor  = compressor;
            _ffmpegDir   = ffmpegDir;
            _infoBinPath = Path.Combine(_ffmpegDir, InfoBinName);

            if (File.Exists(_infoBinPath))
            {
                CurrentFFmpegVersion = _compressor.DeCompress <RemoteFFmpegVersion>(File.ReadAllBytes(_infoBinPath));
                _logger.Info($"Local FFmpeg info found");
                _logger.Info($"Local FFmpeg version = [{CurrentFFmpegVersion.Version}]");
            }
        }
Ejemplo n.º 2
0
        public bool TryLoadLatestVersion()
        {
            try
            {
                List <RemoteFFmpegVersion> links = new List <RemoteFFmpegVersion>();

                string         url     = "https://ffmpeg.zeranoe.com/builds/win64/static/";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string          html    = reader.ReadToEnd();
                        Regex           regex   = new Regex("^<a href=\".*\">(?<name>.*)</a>\\s+(?<date>\\S* \\S*)\\s+(?<size>.*)", RegexOptions.Multiline);
                        MatchCollection matches = regex.Matches(html);
                        if (matches.Count > 0)
                        {
                            ProcessMatches(links, matches);
                        }
                    }

                var latestFromWeb = links.OrderByDescending(x => x.Date).FirstOrDefault();

                _logger.Info($"Remote FFmpeg info found");
                _logger.Info($"Remote FFmpeg version = [{latestFromWeb.Version}]");

                if (CurrentFFmpegVersion == null || latestFromWeb.Version > CurrentFFmpegVersion.Version)
                {
                    CurrentFFmpegVersion = latestFromWeb;
                    File.WriteAllBytes(_infoBinPath, _compressor.Compress(CurrentFFmpegVersion));

                    CleanUpOldFFmpegExecutables();

                    DownloadLatest();

                    _logger.Info($"Remote FFmpeg downloaded");
                }

                return(true);
            }
            catch (Exception ex)
            {
                _logger.Fatal(ex);
                return(false);
            }
        }