Ich versuche, Live-Feeds über eine h264-Kamera mit RTSP-Protokoll aufzunehmen. Auf einem Terminal wird Folgendes angezeigtgst-start-1.0Befehl liefert Feed nahezu in Echtzeit:
gst-launch-1.0 playbin uri=rtsp://IP:PORT/live uridecodebin0::source::latency=0
Wenn ich die konvertierte URI in OpenCV VideoCapture eingebe, funktioniert es, ist aber immer genau zwei Sekunden im Rückstand. Die folgenden beiden URLs scheinen das gleiche Ergebnis zu liefern:
cv2.VideoCapture("uridecodebin uri=rtsp://IP:PORT/live latency=0 ! videoconvert ! appsink")
cv2.VideoCapture("rtsp://IP:PORT/live", cv2.CAP_GSTREAMER)
Gibt es so etwas wie OpenCV, das einen Puffer des Videos verwaltet? Oder fehlt in der konvertierten URL etwas? Wenn der erste Fall zutrifft, kann der Puffer entfernt werden?
Antwort1
Ich hatte auch Schwierigkeiten, diese 2 Sekunden Latenz zu erreichen.
So wie ich es im Moment verstehe, wird Ihr Flag „latency=0“ nicht analysiert, da Gstreamer standardmäßig rtspsrc ohne Parameter verwendet, da Ihre Pipe nicht mit uridecodebin analysiert werden kann. Versuchen Sie, Ihr Programm mit steigenden GST_DEBUG-Levels wie folgt auszuführen: „GST_DEBUG=1 ./IhrProgramm“, „GST_DEBUG=2 ./IhrProgramm“ usw., um zu sehen, wo es schief geht. In meinem Fall habe ich am Ende Folgendes verwendet:
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);
Obwohl ich weiß, dass diese Frage schon ein paar Monate alt ist, hoffe ich, dass die Antwort anderen hilft.