Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }
Пример #5
0
        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;
        }
Пример #6
0
        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();
        }
Пример #7
0
        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);
        }
Пример #10
0
        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;
            }
        }
Пример #11
0
        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;
        }