我正在尝试通过 RTSP 协议上的 h264 摄像头捕获实时视频。在终端上,以下gst-启动-1.0命令提供几乎实时的反馈:
gst-launch-1.0 playbin uri=rtsp://IP:PORT/live uridecodebin0::source::latency=0
当我将转换后的 uri 放入 OpenCV VideoCapture 时,它可以工作,但总是落后两秒。以下两个 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 级别运行您的程序,例如:“GST_DEBUG=1 ./yourprogram”、“GST_DEBUG=2 ./yourprogram”等,以查看哪里出了问题。就我而言,我最终使用了
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);
虽然我知道这个问题是几个月前提出的,但我希望这个答案能够对其他人有所帮助。