【发布时间】:2014-05-21 22:39:43
【问题描述】:
我在将 rtmpdump 进程的输出通过管道传输到 ffmpeg 时遇到问题,我认为问题在于我的进程正在窃取 rtmpdump 的输出。
在我的研究中,我听说过尝试使用 cmd.exe 进程并在其中将 rtmpdump.exe 作为 /C 命令运行,但这个问题是我失去了对由此产生的 rtmpdump.exe 进程的引用,并且我需要能够在我的程序中管理多个 rtmpdump 进程,并有时选择性地杀死某些进程。
我最初尝试了类似这样的简单方法:
var p = new Process();
p.StartInfo.FileName = "rtmpdump.exe";
p.StartInfo.Arguments = "-v -r rtmp://somehost.com/app-name -o - | ffmpeg.exe -loglevel quiet -i - -c:v copy -c:a libvo_aacenc -b:a 128k \"test.mp4\"";
这根本不起作用。
以“cmd.exe”作为初始进程:
var p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/C rtmpdump.exe -v -r rtmp://somehost.com/app-name -o - | ffmpeg.exe -loglevel quiet -i - -c:v copy -c:a libvo_aacenc -b:a 128k \"test.mp4\"";
这让我更接近我需要它启动一个 rtmpdump 进程并重定向到 ffmpeg,但现在“p”将引用一个不存在的“cmd.exe”进程,该进程运行命令以启动 rtmpdump,然后是“cmd.exe”终止。
我唯一关心的是能够保持对创建的 rtmpdump.exe 进程的引用。 ffmpeg 会在 rtmpdump 关闭后自行终止,可以忽略它的进程。
编辑: 如果问题不清楚。我正在尝试将 rtmpdump 的输出通过管道传输到 ffmpeg。使用重定向运算符 | 作为命令参数的一部分执行此操作的正常方式不起作用。并且无法根据需要使用“cmd.exe”进程。
【问题讨论】:
-
到底是什么问题?
-
我正在尝试将 rtmpdump 的输出通过管道传输到 ffmpeg,但使用 |重定向运算符作为进程参数的一部分不起作用。
-
@LittleBill902 也许您可以尝试将
taskkill /im "rtmpdump.exe"作为杀戮过程。我不确定如何获取 PID 并使用它。 -
一次可以有多个“rtmpdump.exe”进程。
标签: c# .net process rtmp piping