2011-09-27 2 views
8

나는 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 동시에 그것을 읽으려고했습니다. 이것은 어느 정도는 작동하지만, 파일에서 동시에 읽고 쓰는 것은 위험 할 수 있습니다. 누가 일어날 지 알고 있습니다!

+0

나는 비슷한 것을하려고 노력해 왔습니다. 파이프/기타에 대해 설명하는 기사를 찾았습니까? –

+2

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

답변

9

희망은 대답하기에는 너무 늦지 않았 으면 좋겠지 만, 나는 이전에도 똑같은 것을 시도해 보았습니다.

OpenCV 용 비디오 디코딩 백엔드는 실제로 ffmpeg이므로 모든 facitilites도 OpenCV에서 사용할 수 있습니다.모든 인터페이스가 공개되지는 않으며 일부 문제가 추가되지만 rtp 스트림 주소를 OpenCV로 보낼 수 있습니다.

cap.open("rtp://xxx.xxx.xxx.xxx:1234"); 

중요 : OpenCV의 암호로 보호 RTP 스트림에 액세스 할 수 없습니다. 그렇게하려면 사용자 이름과 비밀번호를 제공해야하며 노출 된 API는 없습니다.

+0

rtp로 파일을 스트리밍하는 데 사용 된 명령을 언급하십시오. 당신은 그것을 위해 ffmpeg만을 사용 했습니까? 또는 다른 것을 설치해야합니까? – user2565010

+0

안녕하세요! opencv를 사용하여 네트워크를 통해 전송할 이미지를 rtmp 스트림에 다시 쓰는 방법을 말씀해 주시겠습니까? 감사! –

관련 문제