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}]"); } }
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); } }