关于这个问题,如您所见,我设法运行并从程序接收数据。
但是我没有设法向它提交数据,例如,在转换文件时,按下q
立即停止转换并停止程序。
我需要我的应用程序也支持停止进程,我认为这应该通过将此参数传递给 ffmpeg 应用程序来完成,因为我希望它处理所有未收集的资源或如果我愿意的话它会留下的任何灰尘去使用process.Kill()
这是我尝试过的:
static int lineCount = 0;
static bool flag;
static void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine("Error ({1:m:s:fff}: {0})", lineCount++,
DateTime.Now);
if (e.Data != null && string.Equals(e.Data,"Press [q] to stop, [?] for help"))
flag = true;
if (flag)
{
flag = false;
Console.WriteLine("Stopping ({0:m:s:fff})...", DateTime.Now);
process.CancelErrorRead();
process.CancelOutputRead();
process.StandardInput.WriteLine("q");
}
Console.WriteLine(e.Data);
Console.WriteLine();
}
但它什么也没做,似乎一旦请求转换,我就无法控制它了,我只能接收它的输出。单独运行它当然可以让我进行交互。
我在这里缺少什么,是提交输出的不同技巧还是先前答案中的代码错误,或者我应该选择不同的方法?
为您的注意,RedirectStandardInput
是。
注意:正如您在我上一个问题的答案中看到的那样,ffmpeg 的交互方式不同,我认为知道答案的人将是(也许我错了)有 ffmpeg 经验的人。