현재, opencv를 사용하여 Canon VB-H710F 카메라에서 비디오를 읽으려고합니다. 직접 H264로 인코딩 된 스트림에서 읽을 내가 OpenCV의를 사용하고이 경우 RTSP 주소IP 카메라에서 h264 스트림 읽기
VideoCapture cam ("rtsp://root:[email protected]/stream/profile1=u");
while(true)
cam >> frame;
에서 스트림을 읽어
해결 방법 1 :이를 위해
나는 두 개의 서로 다른 솔루션을 시도 (profile1) 그러나 이것은 여기에보고 된 동일한 문제를 야기합니다. http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/ 이전 질문에서 제안했듯이, opencv 설치에서 FFMPEG 지원을 비활성화하려고 시도했는데, h264 디코딩 오류를 해결했지만 다른 문제가 발생했습니다. gstreame에서 지원하는 opencv로 스트림에 액세스 할 때 항상 큰 지연이 연결됩니다. 이 솔루션을 사용하면 15FPS를 얻을 수 있지만 5 초의 지연이 있습니다. 이는 실시간 응용 프로그램이 필요하다고 생각하면 받아 들일 수 없습니다.해결 방법 2 : HTTP 주소에서 프레임을 읽어 동안 (사실) { startTime을 =에 System.currentTimeMillis();
URL url = new URL("h t t p://[IP]/-wvhttp-01-/image.cgi");
URLConnection con = url.openConnection();
BufferedImage image = ImageIO.read(con.getInputStream());
showImage(image);
estimatedTime=System.currentTimeMillis()-startTime;
System.out.println(estimatedTime);
Thread.sleep(5);
}
이 전략은 카메라가 제공하는 URL의 프레임을 간단히 표시합니다. 코드는 Java이지만 C++에서는 curl 라이브러리와 결과가 동일합니다. 이 솔루션은 첫 번째 솔루션의 지연을 피하지만 각 프레임을 잡기 위해 100ms가 넘지 않아 평균 10 FPS 만 달성 할 수 있습니다.
C++ 또는 C++로 개발 된 다른 라이브러리를 사용하여 비디오를 읽는 방법을 알고 싶습니다.
답장을 보내 주셔서 감사합니다. 귀하의 예제에서 ffmpeg는 비디오를 디코딩없이 파일로 복사하기 때문에 제 경우에는 15fps로 비디오를 성공적으로 레코딩 할 수 있지만이 솔루션은 제 목적에 맞지 않습니다. 제 경우에는 실시간으로 디코딩해야합니다. –
예, 프레임을 추출하고 각 프레임에서 처리해야한다는 것을 알고 있습니다.ffmpeg 예제는 입력 신호가 ffmpeg를 사용하여 올바르게 처리 될 수있을뿐만 아니라 처리가 올바른지 테스트하는 것입니다. 확인한 것처럼 이제 ffmpeg 라이브러리를 컴파일하고 ffmpeg lib를 사용하여 코드를 사용하여 프레임을 수동으로 디코딩 할 수 있으며 디코딩 파이프 라인에서 프레임 데이터를 사용할 수 있습니다. 다양한 ffmpeg 개발 매뉴얼이 인터넷에서 제공됩니다. – JasonYang
나는 이미 그것을 시도했지만, 나는 단지 2 초의 프레임에 접근 할 수 있기 때문에 문제가 남아있다. (나는 그것이 ffmpeg의 버퍼 크기와 관련이 있다고 생각한다.) 실시간 디코딩을 유지하면서이 버퍼의 크기를 줄이는 방법을 알고 있습니까? 이미 웹을 검색했지만 어떤 해결책도 찾을 수 없었습니다. 다시 감사합니다 –