在c#中的ffmpeg中杀死进程

时间:2016-06-26 00:58:00

标签: c# cmd ffmpeg streaming

我使用Process类在ffmpeg中执行命令,如下所示:

string command = "/C ffmpeg -re -i test.mp4 -f mpegts udp://127.0.0.1:" + port.Text;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.Arguments = command;
process.Start();

此代码将视频流式传输到网络,但我想在点击按钮时停止流式传输

我使用了process.kill(),但即使我关闭了应用程序

,该过程仍会流式传输

如何在后台停止处理或向其发送ctrl + c?

2 个答案:

答案 0 :(得分:1)

前导“/ C”表示您是通过cmd.exe启动的吗? 在这种情况下,进程对应于cmd,而cmd又开始ffmpeg。因此杀死cmd并不会杀死ffmpeg。

string command = "-re -i test.mp4 -f mpegts udp://127.0.0.1:" + port.Text;
process.StartInfo.FileName ="ffmpeg";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.Arguments = command;
process.Start();

process.Kill();应该适用。

答案 1 :(得分:0)

我创建了一个杀死ffmpeg进程的方法。

private void KillAllFFMPEG()
{
   Process killFfmpeg = new Process();
   ProcessStartInfo taskkillStartInfo = new ProcessStartInfo
   {
     FileName = "taskkill",
       Arguments = "/F /IM ffmpeg.exe",
       UseShellExecute = false,
       CreateNoWindow = true
   };

   killFfmpeg.StartInfo = taskkillStartInfo;
   killFfmpeg.Start();
}

只需在任何地方打电话即可。

  

更新1

为了只杀死一个FFMPEG进程的实例,我们需要先得到它的PID。为流式传输定义ffmpeg进程时,请在全局范围内定义它,并在初始化后使用以下命令获取PID。

int myProcessId = FfmpegProcess.Id;

然后调用以下

private void KillFFMPEGByPID(int PID)
{
   Process killFfmpeg = new Process();
   ProcessStartInfo taskkillStartInfo = new ProcessStartInfo
   {
     FileName = "taskkill",
       Arguments = "/PID " + Convert.ToString(PID) + " /T",
       UseShellExecute = false,
       CreateNoWindow = true
   };

   killFfmpeg.StartInfo = taskkillStartInfo;
   killFfmpeg.Start();
}

这将仅使用给定的PID杀死进程。参数末尾的/ T标志确定整个进程树将被终止。

干杯