2014-05-21 9 views
1

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 프로세스에 대한 참고 만하면됩니다. rtmpdump가 닫히면 ffmpeg가 자동으로 종료됩니다. 프로세스가 무시 될 수 있습니다.

편집 : 질문에 분명하지 않은 경우. rtmpdump의 출력을 ffmpeg로 파이프 처리하려고합니다. 명령 인수의 일부로이를 수행하는 정상적인 f}은 경로 재 지정 연산자를 사용하여 작동하지 않습니다. "cmd.exe"프로세스를 사용하면 필요에 따라 작동하지 않습니다.

+0

정확히 무엇이 문제입니까? – DavidG

+0

rtmpdump의 출력을 ffmpeg로 파이프하려고하는데, | 리디렉션 연산자가 프로세스 인수의 일부로 작동하지 않습니다. – m4tta

+0

@ LittleBill902 어쨌든'taskkill/im "rtmpdump.exe"를 살인 프로세스로 시도 할 수 있습니다. 나는 PID를 얻고 그것을 사용하는 방법을 잘 모르겠다. – Keugyeol

답변

2

간단한 해결책이 있습니다.

CMD 프로세스를 시작 프로세스로 사용.

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\""; 
test.Start(); 

마지막으로 생성 된 rtmpdump 프로세스를 얻기 위해 프로세스를 시작한 직후에이 비트의 코드를 사용하십시오.

0

나는 여기서 내가 대답하는 것만큼 배우고있다.

동일한 이름 (이 경우 rtmpdump.exe)으로 여러 프로세스를 관리하는 쉬운 방법이없는 것 같습니다.

프로세스 이름이나 PID를 사용하는 대신 콘솔 명령 START을 사용하고 다른 윈도우 제목 이름을 START으로 시작하여 다른 방법으로 보입니다. 명령 콘솔에서

, 당신은 같은 것을 입력합니다 :

C:\>start "dumpProc01" rtmpdump.exe -v -r ....... 
C:\>start "dumpProc02" rtmpdump.exe -v -r ....... 
C:\>start "dumpProc03" rtmpdump.exe -v -r ....... 

을 그리고 taskkill 명령으로 하나 개의 특정 프로세스를 종료. 예를 들어 :

C:\>taskkill /fi "windowtitle eq dumpProc01" 

프로세스 생성에 START을 적용하려면, 프로세스 인수는 다음과 같습니다

Process kp = new Process(); 
kp.StartInfo.FileName = "taskkill.exe"; 
kp.StartInfo.Arguments = "/fi \"windowtitle eq dumpProc01\" "; 
kp.Start(); 
:
// from this 
p.StartInfo.Arguments = "/C rtmpdump.exe .... 

// to this 
p.StartInfo.Arguments = "/C start \"dumpProc01\" rtmpdump.exe -v -r .... 

그리고 특정 프로세스를 죽이는

당신이 taskkill 과정을 만들 것

창을 최소화하려면 start /min ...과 같은 시작 명령에 /min 옵션을 지정할 수 있습니다.

+0

이것은 rtmpdump의 출력을 파이프 할 수 없기 때문에 작동하지 않습니다. 대신 리디렉션 운영자가 START 명령을 리디렉션하려고 시도합니다. – m4tta