GStreamer查询NVR时startTime参数叠加异常问题求助
针对你遇到的GStreamer拉取NVR回放流时时间叠加的问题,以下是几个排查和解决方向:
强制rtspsrc禁用本地时区转换
GStreamer的rtspsrc可能默认会对时间参数做本地时区适配,而VLC/ffplay是直接透传参数给NVR。试试给rtspsrc加上do-timestamp=false参数,禁止它自动处理时间戳:gst-launch-1.0 rtspsrc do-timestamp=false location="rtsp://-NVR ip-:-NVRport-/?uuid=-cameraIP-&startTime=20220823170000000&endTime=20220824080200000" ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink直接使用UTC时间作为请求参数
既然你的电脑和NVR有3小时时差,直接把startTime和endTime转换成NVR所在时区的时间(也就是你预期的startTime+3、endTime+3对应的时间)填入URL,跳过本地时区转换的环节。比如原本的本地起始时间20220823170000000,换成NVR时区的20220823200000000,再发起请求。抓包对比RTSP请求差异
用Wireshark分别捕获GStreamer和VLC发起的RTSP请求,重点对比两者PLAY请求中的时间范围字段(比如Range头部)。GStreamer可能对URL里的时间参数做了二次解析转换,导致时间叠加,而VLC是原封不动传递参数。通过抓包找到差异后,就能针对性调整GStreamer的配置。改用uridecodebin替代rtspsrc
uridecodebin是GStreamer的高层封装元素,会自动处理RTSP参数的解析逻辑,可能避开rtspsrc的时区处理bug。试试这个管道:gst-launch-1.0 uridecodebin uri="rtsp://-NVR ip-:-NVRport-/?uuid=-cameraIP-&startTime=20220823170000000&endTime=20220824080200000" ! autovideosink检查GStreamer版本
不同版本的rtspsrc在时间参数处理上可能存在兼容性问题,试试升级到GStreamer最新稳定版,或者回退到和NVR适配的旧版本,看是否能解决时间叠加的问题。
内容的提问来源于stack exchange,提问作者stacy.kolinto

