OpenCV+GStreamer が実時間よりちょうど 2 秒遅れるのはなぜですか?

OpenCV+GStreamer が実時間よりちょうど 2 秒遅れるのはなぜですか?

私はRTSPプロトコルでh264カメラを通してライブフィードをキャプチャしようとしています。ターミナルでは、次のgst-起動-1.0コマンドはほぼリアルタイムのフィードを提供します:

gst-launch-1.0 playbin uri=rtsp://IP:PORT/live uridecodebin0::source::latency=0

変換した URI を OpenCV VideoCapture に入力すると、動作しますが、常に 2 秒遅れます。次の 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 秒の遅延を実現するのも困難でした。

現時点で理解している限りでは、Gstreamer が uridecodebin でパイプを解析できないため、デフォルトでパラメータなしの 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);

この質問は数か月前のものだと承知していますが、この回答が他の人の役に立つことを願っています。

関連情報