2013-04-08 7 views
4

일부 rtmp 스트리밍을 재생하고 녹음하기 위해 하나의 프로그램을 개발하려고합니다. 이 프로그램은 Qt에서 개발되었습니다.여러 개의 FIFO가있는 Linux tee 명령. fifo blocks tee

저는 rtmpdump 및 mplayer를 사용하고 있습니다. 둘 다 별도의 프로세스에서 실행되기 때문에, 나는 rtmpdump에서 mplayer로 스트림을 전달하기 위해 FIFO를 사용하고 있습니다. mplayer는 사용자가 제어해야하므로 별도의 프로세스가 필요합니다. 그래서 mplayer는 슬레이브 모드로 실행됩니다.

스트림 재생에 문제가 없습니다.

이제 스트림을 다른 파일에 녹화하려고합니다. 나는 그것을하기 위해 mplayer를 사용할 수 있다는 것을 알고 있습니다. 그러나 단일 mplayer를 사용하면 재생 또는 녹음 만 지원하므로 불가능합니다. 그래서 tee 명령을 사용하여 스트림을 분할하고 녹음 및 재생 용으로 2mplayer 프로세스를 사용할 것을 고려했습니다.

현재 스트림이

rtmpdump | tee fifo_for_playing fifo_for recording 

MPlayer는 하나가 fifo_for_playing를 판독하고, 또 다른 fifo_for_recording을 읽고 같이 흐른다.

이제는 문제가됩니다. 사용자가 녹음 버튼을 누르면 녹음 할 mplayer가 시작되므로 fifo_for_recording은 티가 열리지 않을 때이를 차단합니다. 그래서 연주도 시작되지 않습니다.

누구나 솔루션을 제안하거나 더 좋은 방법으로이를 수행 할 수 있습니까? 내가 뭘하려고하는지는 비 차단 FIFO를 가진 티입니다. 따라서 하나의 FIFO가 열리지 않으면 티가 차단되지 않습니다.

답변

0

Fifos에는 버퍼가 없습니다 (또는 매우 작은 경우). 당신이 그것에 쓰고 아무도 당신을 읽고 있다면, 당신이 알아내는 것처럼 막습니다.

fifo를 읽고이를 메모리 나 디스크에 버퍼하는 작은 프로그램을 작성할 수 있습니다. 아마 dd 프로그램이 그렇게 할 수 있을까요?

또는 루프에서 -stop 옵션을 사용하여 rtmpdump를 호출하고 출력을 파일에 기록하도록 할 수 있습니다. 그런 다음 FIFO없이 구식 방식으로 파일을 처리합니다.

관련 문제