我正在使用Amazon的示例代码从IP摄像头上传一个rtsp流到Kinesis视频流。代码如下:https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/samples/kvs_gstreamer_sample.cpp
我想从摄像机获取每一帧的NTP时间。我的理解是,这样做的第一步是阅读RTCP发送器报告,以获取摄像机的RTP和NTP时间的同步时间。
为此,我在接收RTCP数据包时添加了回调,如下所示:g_signal_connect_after(session, "on-receiving-rtcp", G_CALLBACK(on_rtcp_callback), data);
然后,在从缓冲区获取SR数据包后,在回调函数中,我尝试获取两个时间戳:
gst_rtcp_packet_sr_get_sender_info (packet, ssrc, ntptime, rtptime, packet_count, octet_count);
当我将这里得到的“ntptime”和“rtptime”变量与我在Wireshark中看到的进行比较时,rtp时间完全匹配。但是,我在C++代码中得到的NTP时间非常错误,它显示的是大约一个月前的时间,而Wireshark数据包显示的NTP时间似乎是正确的。
是否有一些设置导致gstreamer覆盖我的发送方报告数据包中的NTP时间,如果是,我如何禁用该设置?
1条答案
按热度按时间vql8enpb1#
gst_rtcp_packet_sr_get_sender_info提供的NTP时间不是我以前见过的任何格式。要转换成有意义的时间戳,你必须使用gst_rtcp_ntp_to_unix,它会给你一个实际上有意义的unix时间。