【发布时间】:2011-09-18 02:49:00
【问题描述】:
参考this 问题,如您所见,我设法运行并从程序接收数据。
但是我没有设法向它提交数据,例如,在转换文件时,按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 已开启。
注意:正如您在我上一个问题的answer 中看到的那样,ffmpeg 的交互方式不同,我认为知道答案的人将是(也许我错了)有 ffmpeg 经验的人。
【问题讨论】:
-
你
RedirectStandardInput了吗? -
@SLaks,我已经为这个问题开了一个赏金。如果您对 ffmpeg 有一些经验,请分享您的知识!根据您的评论,
RedirectStandardInput是真的,我只是忘了在我的问题中指出,现在更新了。 -
我觉得用ffmpreg-sharp项目会容易很多:code.google.com/p/ffmpeg-sharp
-
@SimonMourier,我愿意,但它最后一次更新是在 2008 年。我不能依赖非活动项目。
标签: .net process ffmpeg interaction