public void Abort() { if (!IsRunning) { return; } // insert kill file into the directory to stop the streamer SendDebugMessage("FF Runner: Abort signalled."); if (shellRunner != null) { lock (shellRunner.StandardOutputReceivedLock) { // Unhook events shellRunner.StandardErrorReceivedLine -= new EventHandler <GenericEventArgs <string> >(shellRunner_StandardErrorReceivedLine); shellRunner.StandardOutputReceived -= new EventHandler <GenericEventArgs <byte[]> >(shellRunner_StandardOutputReceived); shellRunner.ProcessFinished -= new EventHandler <GenericEventArgs <processfinishedEventArgs> >(shellRunner_ProcessFinished); } // Kill the shell runner shellRunner.KillNow(); } shellRunner = null; IsRunning = false; }
void shellRunner_ProcessFinished(object sender, GenericEventArgs <processfinishedEventArgs> e) { if (sender != shellRunner) { return; } if (!e.Value.WasAborted) // If finished normally, write the [final] segment to disk { processRemainingBytes(); finaliseCurrentSegment(); } SendDebugMessage("FF Runner: Shell process is finished. ("); shellRunner = null; IsRunning = false; }
void Initialise() { shellRunner = new ShellCmdRunner(); shellRunner.ProcessFinished += new EventHandler <GenericEventArgs <processfinishedEventArgs> >(shellRunner_ProcessFinished); shellRunner.FileName = Path.Combine(PathToTools, "ffmpeg.exe"); shellRunner.StandardErrorReceivedLine += new EventHandler <GenericEventArgs <string> >(shellRunner_StandardErrorReceivedLine); shellRunner.StandardOutputReceived += new EventHandler <GenericEventArgs <byte[]> >(shellRunner_StandardOutputReceived); // Incoming data from ffmpeg STDOUt - mangements InitTempWriter(); // Set up objects cmdArguments = new CommandArguments(); segmentArguments = new CommandArguments(); // Arguments ConstructArguments(); shellRunner.Arguments = cmdArguments.ToString(); }
public void StartProbeAsync() { ShellCmdRunner shellProber = new ShellCmdRunner(); // From parameters probeRunner = new ShellCmdRunner(); probeRunner.ProcessOutputReceived += new EventHandler <GenericEventArgs <string> >(probeRunner_ProcessOutputReceived); probeRunner.FileName = Path.Combine(PathToTools, "ffprobe.exe"); // No need to monitor the children here probeRunner.MonitorChildren = false; // Set up objects probeArguments = new CommandArguments(); ConstructProbeArguments(); probeRunner.Arguments = probeArguments.ToString(); AVStreams = new List <AVStream>(); string txtResult = ""; if (!probeRunner.Start(ref txtResult, true)) { // Failure - return ProbeFinished = false; // We didnt' get to finish ProbeSuccess = false; ProbeReport = txtResult; probeHandle.Set(); return; } // Doesn't really finish, I think it launches more threads... ...give it 3 seconds System.Threading.Thread.CurrentThread.Join(3000); // Probe has finished - we waited for exit.. ..let's analyse ProbeFinished = true; processOutputBuffer(); // Must do this first! AnalyseStreams(); }
void shellRunner_ProcessFinished(object sender, GenericEventArgs<processfinishedEventArgs> e) { if (sender != shellRunner) return; if (!e.Value.WasAborted) // If finished normally, write the [final] segment to disk { processRemainingBytes(); finaliseCurrentSegment(); } SendDebugMessage("FF Runner: Shell process is finished. ("); shellRunner = null; IsRunning = false; }
void Initialise() { shellRunner = new ShellCmdRunner(); shellRunner.ProcessFinished += new EventHandler<GenericEventArgs<processfinishedEventArgs>>(shellRunner_ProcessFinished); shellRunner.FileName = Path.Combine(PathToTools, "ffmpeg.exe"); shellRunner.StandardErrorReceivedLine += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine); shellRunner.StandardOutputReceived += new EventHandler<GenericEventArgs<byte[]>>(shellRunner_StandardOutputReceived); // Incoming data from ffmpeg STDOUt - mangements InitTempWriter(); // Set up objects cmdArguments = new CommandArguments(); segmentArguments = new CommandArguments(); // Arguments ConstructArguments(); shellRunner.Arguments = cmdArguments.ToString(); }
public void Abort() { if (!IsRunning) return; // insert kill file into the directory to stop the streamer SendDebugMessage("FF Runner: Abort signalled."); if (shellRunner != null) { lock (shellRunner.StandardOutputReceivedLock) { // Unhook events shellRunner.StandardErrorReceivedLine -= new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine); shellRunner.StandardOutputReceived -= new EventHandler<GenericEventArgs<byte[]>>(shellRunner_StandardOutputReceived); shellRunner.ProcessFinished -= new EventHandler<GenericEventArgs<processfinishedEventArgs>>(shellRunner_ProcessFinished); } // Kill the shell runner shellRunner.KillNow(); } shellRunner = null; IsRunning = false; }
public void StartProbeAsync() { ShellCmdRunner shellProber = new ShellCmdRunner(); // From parameters probeRunner = new ShellCmdRunner(); probeRunner.ProcessOutputReceived += new EventHandler<GenericEventArgs<string>>(probeRunner_ProcessOutputReceived); probeRunner.FileName = Path.Combine(PathToTools, "ffprobe.exe"); // No need to monitor the children here probeRunner.MonitorChildren = false; // Set up objects probeArguments = new CommandArguments(); ConstructProbeArguments(); probeRunner.Arguments = probeArguments.ToString(); AVStreams = new List<AVStream>(); string txtResult = ""; if (!probeRunner.Start(ref txtResult, true)) { // Failure - return ProbeFinished = false; // We didnt' get to finish ProbeSuccess = false; ProbeReport = txtResult; probeHandle.Set(); return; } // Doesn't really finish, I think it launches more threads... ...give it 3 seconds System.Threading.Thread.CurrentThread.Join(3000); // Probe has finished - we waited for exit.. ..let's analyse ProbeFinished = true; processOutputBuffer(); // Must do this first! AnalyseStreams(); }
void Initialise() { shellRunner = new ShellCmdRunner(); shellRunner.ProcessFinished += new EventHandler<GenericEventArgs<processfinishedEventArgs>>(shellRunner_ProcessFinished); shellRunner.FileName = Path.Combine(PathToTools, "ffmpeg.exe"); String workingFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "RemotePotato"); workingFolderPath = workingFolderPath+"\\static\\"; if (!Directory.Exists(workingFolderPath)) Directory.CreateDirectory(workingFolderPath); shellRunner.BatchFile = Path.Combine(workingFolderPath, "ffmpeg" + DateTime.Now.ToString().Replace(" ", "").Replace(":", "") + ".bat"); shellRunner.DurationBeforeMediaIsReopened = EncodingParameters.DurationBeforeMediaIsReopened; shellRunner.StandardErrorReceivedLine += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine); shellRunner.StandardOutputReceived += new EventHandler<GenericEventArgs<byte[]>>(shellRunner_StandardOutputReceived); // Incoming data from ffmpeg STDOUt - mangements InitTempWriter(); // Set up objects cmdArguments = new CommandArguments(); segmentArguments = new CommandArguments(); // Arguments ConstructArguments(); shellRunner.Arguments = cmdArguments.ToString(); SendDebugMessage("Initialized to run: " + shellRunner.BatchFile + " " + shellRunner.Arguments); shellRunner.CreateBatchFile(shellRunner.BatchFile, EncodingParameters.DurationBeforeMediaIsReopened); }
void shellRunner_ProcessFinished(object sender, GenericEventArgs<processfinishedEventArgs> e) { if (sender != shellRunner) return; if (request.LiveTV) { //if (VideoEncodingParameters.EOSDetected) // VideoEncodingParameters.EOSDetected = false; SendDebugMessage("FF Runner: Shell process is finished in live TV. ("); shellRunner = null; IsRunning = false; if (!e.Value.WasAborted) //finished normally { string txtResult = ""; SendDebugMessage("FF Runner finished normally: Restart runner for the following segments"); beginNextSegment(); this.Start(incomingSegment.Number, ref txtResult, incomingSegment.FileIndex); } } else if (request.NewLiveTV) { SendDebugMessage("FF Runner: Shell process is finished in new live TV. ("); shellRunner = null; IsRunning = false; if (!e.Value.WasAborted) //finished normally { SendDebugMessage("FF Runner finished normally."); } } else { if (!e.Value.WasAborted) // If finished normally, write the [final] segment to disk { processRemainingBytes(); finaliseCurrentSegment(); } SendDebugMessage("FF Runner: Shell process is finished in non-live tv. ("); shellRunner = null; IsRunning = false; } }
void Initialise(int startAtSegment, string ID) { shellRunner = new ShellCmdRunner(request.LiveTV, request.NewLiveTV, request.UseNewerFFMPEG, ID, this); shellRunner.ProcessFinished += new EventHandler<GenericEventArgs<processfinishedEventArgs>>(shellRunner_ProcessFinished); if (request.NewLiveTV) { shellRunner.PathToTools = PathToTools; shellRunner.preferredAudioStreamIndex = request.UseAudioStreamIndex; shellRunner.latestffmpeg = Path.Combine(PathToTools, "ffmpeglatest.exe"); shellRunner.latestffprobe = Path.Combine(PathToTools, "ffprobelatest.exe"); shellRunner.DummyLoopOrFfmpegOrLatestffmpeg = Path.Combine(PathToTools, "dummyloop.bat"); shellRunner.ProbeFileName = Path.Combine(PathToTools, "ffprobelatest.exe"); shellRunner.mappings = (string.IsNullOrEmpty(MapArgumentsString)) ? "" : MapArgumentsString; shellRunner.request = request; shellRunner.NamedPipeServer = Path.Combine(PathToTools, "NamedPipeServer.exe"); } else if (request.UseNewerFFMPEG) shellRunner.DummyLoopOrFfmpegOrLatestffmpeg = Path.Combine(PathToTools, "ffmpeglatest.exe"); else shellRunner.DummyLoopOrFfmpegOrLatestffmpeg = Path.Combine(PathToTools, "ffmpeg.exe"); shellRunner.StandardErrorReceivedLine += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine); shellRunner.StandardErrorReceivedLine2 += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine2); shellRunner.StandardErrorReceivedLine3 += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine3); shellRunner.StandardErrorReceivedLine4 += new EventHandler<GenericEventArgs<string>>(shellRunner_StandardErrorReceivedLine4); shellRunner.StandardOutputReceived += new EventHandler<GenericEventArgs<byte[]>>(shellRunner_StandardOutputReceived); // Incoming data from ffmpeg STDOUt - mangements InitTempWriter(); // Set up objects cmdArguments = new CommandArguments(); segmentArguments = new CommandArguments(); // Arguments ConstructArguments(startAtSegment); shellRunner.Arguments = cmdArguments.ToString(); shellRunner.inputFile = InputFile; }