using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; using CommandLine; using CommandLine.Text; using System.IO; namespace TaskRunner { public class Options { [Option("server", HelpText="Task source server", Required = true)] public string server { get; set; } [HelpOption] public string GetUsage() { return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current)); } } public class Program { public static int Main(string[] args) { MainAsync(args).Wait(); return 0; } static async Task MainAsync(string[] args) { var options = new Options(); if (Parser.Default.ParseArguments(args, options)) { Console.WriteLine($"Waiting for tasks from server: {options.server}"); var server = new ServerApi(new Uri(options.server)); try { var taskManager = new TaskManager(); var task = await server.GetTask(); var src = await server.GetStream("asdf", task.SourceStreamId); var dest = await server.GetStream("asdf", task.DestinationStreamId); Console.WriteLine($"Got task {task.TaskId}"); Console.WriteLine($"Source: {src.MimeType}"); Console.WriteLine($"Dest: {dest.MimeType}"); var mp4Parts = new List(); foreach (var strUri in src.Uris) { var uri = new Uri(strUri["Uri"]); var fs = new FileStorage();// @"\Users\Arti.Zirk\Documents\files"); Console.WriteLine($"From location: {uri}"); var srcSwf = await fs.DownloadFile(uri); Console.WriteLine($"Local scrSwf: {srcSwf}"); var justName = Path.GetFileNameWithoutExtension(srcSwf); var destSwf = $"/tmp/{justName}.raw"; var destMp4 = $"/tmp/{justName}.mp4"; Console.WriteLine("RunGnash"); await taskManager.RunGnash(srcSwf, destSwf); File.Delete(srcSwf); Console.WriteLine("RunFfmpeg"); await taskManager.swfRawToMp4(destSwf, destMp4); File.Delete(destSwf); mp4Parts.Add(destMp4); } var outFile = $"/tmp/out.mp4"; await taskManager.Mp4Join(mp4Parts, outFile); var location = await server.UploadFile(outFile); File.Delete(outFile); foreach(var file in mp4Parts) { File.Delete(file); } Console.WriteLine($"New location is {location}"); } catch (FailedToGetTaskException) { Console.WriteLine("No tasks available"); return; } //var taskManager = new TaskManager(); //await taskManager.RunFfmpeg(); } else { //Console.WriteLine(options.GetUsage()); } } } }