DeepStream 中的 NTP 时间戳#

DeepStream 5.0+ 支持为每帧设置 NTP 时间戳。计算出的 NTP 时间戳可在 NvDsFrameMetantp_timestamp 字段中找到。DeepStream 通过两种方式计算 NTP 时间戳

  1. 当帧被 DeepStream 管道中的 NvStreamMux 插件接收时,使用主机系统时间作为 NTP 时间戳。

此方法要求您将主机系统与 NTP 时钟同步。要将主机系统时间作为 NTP 时间戳附加,您需要在 nvstreammux 上将 attach-sys-ts 设置为 TRUE。在 DeepStream 参考应用程序的应用程序配置文件中的 [streammux] 组中,将 attach-sys-ts-as-ntp 配置参数设置为 1

  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

    1. 在主机上安装 tshark:sudo apt-get install tshark

    2. 找到将接收 RTP/RTCP 数据包的主机网络接口

      $ sudo tshark -D
      ...
      eno1
      ...
      
    3. 使用 tshark 工具启动监控。根据需要更换网络接口和源 IP

      $ sudo tshark -i eno1 -f "src host 192.168.1.100" -Y "rtcp"
      
    4. 在同一主机上,仅在启动监控工具后才从 RTSP 源开始流式传输。可以使用任何客户端

      $ gst-launch-1.0 rtspsrc location= <RTSP URL e.g. rtsp://192.168.1.100/stream1> ! fakesink

    5. tshark 监控工具的输出应包含包含 "Sender Report   Source description" 的行。这是一个示例输出

      6041 10.500649319 192.168.1.100 192.168.1.101 RTCP 94 Sender Report   Source description