DeepStream 中的 NTP 时间戳#
DeepStream 5.0+ 支持为每帧设置 NTP 时间戳。计算出的 NTP 时间戳可在 NvDsFrameMeta 的 ntp_timestamp 字段中找到。DeepStream 通过两种方式计算 NTP 时间戳
当帧被 DeepStream 管道中的 NvStreamMux 插件接收时,使用主机系统时间作为 NTP 时间戳。
此方法要求您将主机系统与 NTP 时钟同步。要将主机系统时间作为 NTP 时间戳附加,您需要在 nvstreammux 上将 attach-sys-ts 设置为 TRUE。在 DeepStream 参考应用程序的应用程序配置文件中的 [streammux] 组中,将 attach-sys-ts-as-ntp 配置参数设置为 1。
在 RTSP 源附加时使用 NTP 时间戳 - 仅当 RTSP 源发送 RTCP 发送者报告 (SR) 时才支持。
要配置管道以附加这些时间戳
在 nvstreammux 上将 attach-sys-ts 设置为 FALSE。在 DeepStream 参考应用程序的应用程序配置文件中的 [streammux] 组中,将 attach-sys-ts-as-ntp 配置参数设置为 0。
创建 “rtspsrc” 元素或 “uridecodebin” 元素后,应用程序必须调用 configure_source_for_ntp_sync() 函数并将 GstElement 指针传递给此 API。(请参考 deepstream_source_bin.c 文件中的 create_rtsp_src_bin()。)该 API 在内部配置管道以解析发送者报告并为每帧计算 NTP 时间戳。
确保 RTSP 源可以发送 RTCP 发送者报告。
通过在主机上从源开始流式传输并在同一主机上使用 Wireshark 或 Tshark 等工具查看数据包来验证这一点,以确认发送者报告 (SR) 的存在。
使用 Wireshark 等工具检查 RTSP 源是否发送 RTCP 发送者报告的示例方法
注意
我们假设 RTSP 源的 IP 地址为
192.168.1.100
在主机上安装 tshark:
sudo apt-get install tshark
找到将接收 RTP/RTCP 数据包的主机网络接口
$ sudo tshark -D ... eno1 ...使用 tshark 工具启动监控。根据需要更换网络接口和源 IP
$ sudo tshark -i eno1 -f "src host 192.168.1.100" -Y "rtcp"在同一主机上,仅在启动监控工具后才从 RTSP 源开始流式传输。可以使用任何客户端
$ gst-launch-1.0 rtspsrc location= <RTSP URL e.g. rtsp://192.168.1.100/stream1> ! fakesink
tshark 监控工具的输出应包含包含
"Sender Report Source description"
的行。这是一个示例输出
6041 10.500649319 192.168.1.100 → 192.168.1.101 RTCP 94 Sender Report Source description