나는 ffmpeg로 rtp로 들어오는 비디오 스트림을 가지고 있으며이 스트림을 라이브 스트리밍 처리를위한 OpenCV 도구로 보내고 싶습니다. 들어오는 데이터를 파일로 보내고 재생할 수 있거나 (또는 ffplay를 통해 재생되는 경우) rtp 연결이 작동합니다. 파일과 웹캠에서 비디오를 캡처 할 수 있기 때문에 OpenCV 구현도 기능적입니다.ffmpeg에서 비디오를 스트리밍하고 OpenCV로 캡처
문제는 OpenCV로 스트리밍하는 것입니다. 이 작업은 명명 된 파이프를 사용하여 수행 할 수 있다고 들었습니다. 먼저 ffmpeg 출력을 파이프로 스트리밍 한 다음 OpenCV에서이 파이프를 열고 처리를 시작할 수 있습니다.
나는 시도했다 :
$ mkfifo stream_pipe
다음 내가 RTP에서 스트림을 당겨로 보내 내는 FFmpeg 명령을 사용하여
내가 의해 내 Cygwin에서의 떠들썩한 파티에서 명명 된 파이프를 만들 파이프 :이 명명 된 파이프에 스트림을 전송에 대해 갈 수있는 올바른 방법 인 경우$ ffmpeg -f avi -i rtp://xxx.xxx.xxx.xxx:1234 -f avi -y out.avi > stream_pipe
나는 확실하지 않다하지만 나 때문에 비트 전송률을 제공는 FFmpeg의 출력 명령과 작업을 받아들이는 것 같다 fps 등.
$ ./cvcap.exe stream_pipe
cvcap.cpp의 코드는이 귀결 :
cv::VideoCapture *pIns = new cv::VideoCapture(argv[1]);
프로그램이 도달 할 때 중지 것으로 보인다
다음 내 OpenCV의 캡처 기능에 명명 된 파이프를 사용 한 줄, 그래서, 이것이 이것이 올바른 방향인지 궁금합니다. 이전에 명명 된 파이프를 사용 해본 적이 없으며 이것이 올바른 사용인지 확실하지 않습니다. 또한 OpenCV에서 이름이 지정된 파이프를 다르게 처리해야할지 모르겠다. 이런 종류의 입력을 받아들이려면 코드를 바꿔야한다. 제가 말했듯이, 내 코드는 이미 파일과 카메라 입력을 받아들입니다. 나는 들어오는 스트림에 매달렸습니다. OpenCV 용으로 명명 된 파이프를 사용할 수 있다는 것을 들었습니다. 실제 코드 나 명령을 전혀 보지 못했습니다!
도움이나 의견을 보내 주시면 감사하겠습니다.
UPDATE :
내가 명명 된 파이프는 내가 의도 한 방식으로 작동하지 않을 수 믿습니다. this cygwin 포럼 게시물에서 볼 수 있듯이 :
Cygwin의 FIFO 구현은 매우 버그가 있습니다. 나는 단순한 애플리케이션이 아닌 FIFO를 사용하는 것을 권장하지 않습니다.
다른 방법을 찾아야 할 수도 있습니다. 나는 정상적인 파일에 ffmpeg 출력 파이프를 시도하고 OpenCV 동시에 그것을 읽으려고했습니다. 이것은 어느 정도는 작동하지만, 파일에서 동시에 읽고 쓰는 것은 위험 할 수 있습니다. 누가 일어날 지 알고 있습니다!
나는 비슷한 것을하려고 노력해 왔습니다. 파이프/기타에 대해 설명하는 기사를 찾았습니까? –
ffmpeg-users 포럼에이 작은 게시물 http://ffmpeg-users.933282.n4.nabble.com/h264-problem-td2574908.html이 있음을 알게되었습니다. 또한 VLC http://forum.videolan.org/viewtopic.php?f=32&t=69351 및 x264와 비슷한 것을 시도하는 사람을 발견했습니다. http://forums.creativecow.net/readpost/291/84 – chembrad