RTSP 프로토콜의 h264 카메라를 통해 라이브 피드를 캡처하려고 합니다. 터미널에서는 다음과 같습니다gst-launch-1.0명령은 거의 실시간 피드를 제공합니다.
gst-launch-1.0 playbin uri=rtsp://IP:PORT/live uridecodebin0::source::latency=0
변환된 URI를 OpenCV VideoCapture에 넣으면 작동하지만 항상 정확히 2초 뒤쳐집니다. 다음 두 URL은 동일한 결과를 제공하는 것 같습니다.
cv2.VideoCapture("uridecodebin uri=rtsp://IP:PORT/live latency=0 ! videoconvert ! appsink")
cv2.VideoCapture("rtsp://IP:PORT/live", cv2.CAP_GSTREAMER)
OpenCV가 비디오 버퍼를 유지하는 것과 같은 것이 있습니까? 아니면 변환된 URL에 뭔가가 누락되어 있나요? 첫 번째 경우가 참이라면 버퍼를 제거할 수 있나요?
답변1
저도 2초의 대기 시간을 얻는 데 어려움을 겪었습니다.
현재로서는 uridecodebin으로 파이프를 구문 분석할 수 없기 때문에 Gstreamer가 매개변수 없이 rtspsrc로 기본 설정되어 있기 때문에 "latency=0" 플래그가 구문 분석되지 않습니다. "GST_DEBUG=1 ./yourprogram", "GST_DEBUG=2 ./yourprogram" 등과 같이 GST_DEBUG 수준을 높여서 프로그램을 실행해 보고 어디가 잘못되었는지 확인하세요. 내 경우에는 결국 사용하게 되었다.
std::string pipe = "rtspsrc location=rtsp://192.168.1.113:554/user=admin_password=_channel=1_stream=1.sdp latency=0 ! decodebin ! videoconvert ! appsink";
cv::VideoCapture cap(pipe, cv::CAP_GSTREAMER);
이 질문이 몇 달 전의 질문이라는 것을 알고 있지만 이 답변이 다른 사람들에게 도움이 되기를 바랍니다.