2011-03-12 1 views
1

파이프 학습/사용을 시작한 후 응용 프로그램의 파일 출력을 파이프로 라우트하여 다른 응용 프로그램에서 사용할 수 있는지 궁금해졌습니다.파이프를 사용하여 파일을 다른 프로세스로 채널 변환

정확히 말하면, ffmpeg의 출력 (코드 변환 된 비디오 데이터)을 내 응용 프로그램에 파이프하여 사용하고 싶습니다. /tmp/out.mp4과 같은 명명 된 파이프를 만들어 ffmpeg에 출력 파일 이름으로 제공하면 ffmpeg가이 파일을 다시 작성하려고 시도합니다. 아마도이 파이프를 덮어 쓸 것입니다. 이런 상황을 어떻게 다룰 것인가?

투명하게 응용 프로그램의 파일 IO를 전환시키는 일반적인 방법은 무엇입니까?

(스트리밍 중 mpeg4와 같은 친숙한 형식으로 avi와 같은 형식을 트랜스 코딩하는 비디오 스트리밍 서버를 작성하려고합니다.이 목적을 달성하기에는 너무 느리다는 것을 알았습니다. 2 초는 부진 알려져 내 설치/PC 또는는 FFmpeg의 문제가 1 개 초 비디오 :(

를 트랜스 코딩 )

PS를 : 나는이 방법으로 에서 C을이 쓰고

합니다.

답변

3

ffmpeg를 출력하도록 설득 할 수 있습니다. 파이프에 "-"

ffmpeg -i whatever.avi -f mp4 - 

대신 파일의 stdout에 출력을 지시하고, "-f"는 출력 파일이 있어야 할 어떤 출력을 알려줍니다.

물론 명명 된 파이프로 리디렉션 할 수 있지만 popen을 사용하여 출력을 파일 설명자로 직접 가져 오는 것은 나에게로가는 길 같습니다.

+0

Freiheit 많은 고마워, 내가 어떤 문제에 직면하면 컴백을 시도합니다 ... – Microkernel

+0

안녕 freiheit, 이것 좀 봐 주시겠습니까 http://stackoverflow.com/questions/5302196/popen-to-pass- 2 진 - 데이터 - 프로세스 간 – Microkernel

0

는 FFmpeg은 표준 입력에서 읽고 다음과 같이 stdout에 기록 할 수 있습니다 :

ffmpeg -i pipe:0 -f wav pipe:1 

경우 0과 1은 표준 POSIX 파일 설명이다.