【问题标题】:How to get camera timestamp for received frame?如何获取接收帧的相机时间戳?
【发布时间】:2022-08-06 04:40:30
【问题描述】:

我有 gstreamer 管道,它接受来自 RTSP 流的输入,将其转换并将其接收到appsink

data.source = gst_element_factory_make(\"uridecodebin\", \"source\");
data.convert = gst_element_factory_make(\"videoconvert\", \"conv\");
data.app_sink = gst_element_factory_make(\"appsink\", \"app_sink\");

我学会了如何将媒体缓冲区提取到我的应用程序中,但我想知道的是时间戳。媒体附带了我认为相机硬件在左下角预渲染的时钟,有没有办法让我得到那个时间?我看了看RTP header 它应该有时间戳信息。我查看了 Gstreamer 信息和教程以及 buffer description,其中有 ptsdts 时间戳,但我认为这不是我需要的,这听起来像是本地机器时间。

总结问题,如何从 RTSP 流中提取相机时间戳?

    标签: gstreamer live-streaming


    【解决方案1】:

    您可以使用 PTS 变量检索每个帧的 RTP 时间戳。例如,如果您的相机是 25 FPS,您应该将 PTS 乘以 9/1000000 以获得 RTP 时间戳。这不是你想要的,但它很方便。

    为了查看实际的时间戳,您想使用 RTCPBuffer 并检索每个 RTCPPacket,即实时传输控制协议包,包括 NTP 和 RTP 时间戳,在缓冲区中使用gst_rtcp_packet_sr_get_sender_info(...) 方法查看这些时间戳。然后,您将在每次收到新的 RTCP 数据包时同步 NTP 和 RTP 时间戳。

    您必须进行计算才能找到在 NTP 时间中对应的 RTP 时间戳间隔以执行此同步。

    【讨论】:

      猜你喜欢
      • 2022-06-12
      • 2012-02-20
      • 2014-06-05
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多