2014-10-25 2 views
0

을 OpenCV 2.4.9 :에서 OpenCV videocapture 열 수 없습니다 MJPEG 스트림

VideoCapture cap; 
cap.open("http://127.0.0.1:8080/?action=stream&type=.mjpg"); 
if (!cap.isOpened()) // if not success, exit program 
{ 
    cout << "Cannot open the video cam" << endl; 
    return -1; 
} 

내가 비디오를 사용 GST-출시를 볼 수 있습니다 VideoCapture이 MJPG-트리머를 열어 두지. this처럼 많이 검색했고 this처럼 fifo를 시도했지만 여전히 열 수는 없습니다.

내가 opencv로 디버깅하고 CMAKE_BUILD_TYPE = DEBUG로 opencv를 컴파일하고 싶지만 GDB는 open function.any 아이디어로 넘어갈 수 없습니까?

내 메이크 : 그런데

OpencvDebugLibDir=/home/ry/lib 
CFLAGS = -g -I$(OpencvDebugLibDir)/include/opencv -I$(OpencvDebugLibDir) 
LIBS = $(OpencvDebugLibDir)/lib/*.so 

target : main.cpp 
    g++ $(CFLAGS) $(LIBS) -o [email protected] $< 

, 나는 동일한 코드로, 나는

윈 7에서 비디오를 열고 감사 할 수 opensue13.1에서입니다.

는 업데이트 지금은 같은 몇 가지 기능을 한 단계 수 있습니다 imshow, waitKey하지만, 내가 좋아하는 다른 사람에 단계 수 없습니다 imread, namedWindow, 그것은 보여줍니다

29   image = cv::imread(name); 
(gdb) s 
std::allocator<char>::allocator (this=0x7fffffffdc7f) 
    at /usr/src/debug/gcc-4.8.1-20130909/obj-x86_64-suse-linux/x86_64-suse-linux/libstdc++-v3/include/bits/allocator.h:113 
113   allocator() throw() { } 

test4.cpp :

#include <stdio.h> 
#include <opencv2/opencv.hpp> 

using namespace cv; 

int main(int argc, char** argv) 
{ 

Mat image; 
image = imread("LinuxLogo.jpg", 1); 

if (!image.data) 
{ 
    printf("No image data \n"); 
    return -1; 
} 
namedWindow("Display Image", CV_WINDOW_AUTOSIZE); 
imshow("Display Image", image); 

waitKey(0); 

return 0; 
} 

내 메이크 :

OpencvDebugLibDir=/home/ry/lib 
CFLAGS=-g -I$(OpencvDebugLibDir)/include/opencv -I$(OpencvDebugLibDir) 
LIBS=$(OpencvDebugLibDir)/lib 

test4:test4.cpp 
    g++ $(CFLAGS) -o [email protected] $< -L$(LIBS) -lopencv_highgui -lopencv_core -Wl,-rpath=/home/ry/lib/lib 

실행 GDB :

gdb test4 -d /home/ry/learn/opencv/install/OpenCV/opencv-2.4.9/modules/core/src -d /home/ry/learn/opencv/install/OpenCV/opencv-2.4.9/modules/highgui/src 

답변

0

에서 OpenCV videocapture 나는 FFMPEG 지원을 OpenCV를 컴파일하지 않는, 열지 MJPEG 스트림 수 있기 때문이다. 세부 사항 : OpenCV의 cmake : 그래서 cmake가 FFMPEG을 찾을 수없는

FFMPEG:      NO 
--  codec:      NO 
--  format:     NO 
--  util:      NO 
--  swscale:     NO 
--  gentoo-style:    NO 

:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=ON -D WITH_TBB=ON -D WITH_OPENMP=ON -D WITH_OPENCL=ON -D WITH_CUDA=ON -D WITH_GTK=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=ON -D WITH_OPENGL=ON -D BUILD_JPEG=ON -D BUILD_PNG=ON -D BUILD_JASPER=ON -D BUILD_ZLIB=ON -D WITH_JPEG=ON -D WITH_PNG=ON -D WITH_JASPER=ON -D WITH_ZLIB=ON -D WITH_OPENEXR=OFF .. 

당신이 뭔가를 얻을 수 있습니다. 나는 내 컴퓨터 (오픈 수세 13.1)에 libffmpeg-(STABLE)를 설치해야합니다 다음 PKG-설정은이와 함께 확인할 수 FFMPEG을 찾을 수 있습니다

pkg-config --list-all | grep libavcodec 

다시 위의 cmake 명령을 실행, 내가 얻을 :

FFMPEG:      YES 
--  codec:      YES (ver 55.69.100) 
--  format:     YES (ver 55.48.100) 
--  util:      YES (ver 52.92.100) 
--  swscale:     YES (ver 2.6.100) 
--  gentoo-style:    YES 

make 그리고 opencv 비디오 캡쳐를 통해 MJPG_Streamer를 열 수 있습니다.

추신 : 이유를 찾으려면 디버그 버전의 opencv를 컴파일하고 VideoCapture의 open 함수 및 "opencv-2.4.9/modules/highgui/src/cap"의 icvInitFFMPEG() 함수 작성 단계로 이동하십시오. 통화 당 "

#elif defined HAVE_FFMPEG 
    icvCreateFileCapture_FFMPEG_p = (CvCreateFileCapture_Plugin)cvCreateFileCapture_FFMPEG; 
    icvReleaseCapture_FFMPEG_p = (CvReleaseCapture_Plugin)cvReleaseCapture_FFMPEG; 
    icvGrabFrame_FFMPEG_p = (CvGrabFrame_Plugin)cvGrabFrame_FFMPEG; 
    icvRetrieveFrame_FFMPEG_p = (CvRetrieveFrame_Plugin)cvRetrieveFrame_FFMPEG; 
    icvSetCaptureProperty_FFMPEG_p = (CvSetCaptureProperty_Plugin)cvSetCaptureProperty_FFMPEG; 
    icvGetCaptureProperty_FFMPEG_p = (CvGetCaptureProperty_Plugin)cvGetCaptureProperty_FFMPEG; 
    icvCreateVideoWriter_FFMPEG_p = (CvCreateVideoWriter_Plugin)cvCreateVideoWriter_FFMPEG; 
    icvReleaseVideoWriter_FFMPEG_p = (CvReleaseVideoWriter_Plugin)cvReleaseVideoWriter_FFMPEG; 
    icvWriteFrame_FFMPEG_p = (CvWriteFrame_Plugin)cvWriteFrame_FFMPEG; 
#endif 

그냥이 코드를 통해 단계, 그래서이 과정을 컴파일에 정의 된 HAVE_FFMPEG이 없기 때문에 나는 알고있다.

관련 문제