Il'*_*nin 2 gstreamer live-streaming
我有 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");
Run Code Online (Sandbox Code Playgroud)
我学会了如何将媒体缓冲区提取到我的应用程序中,但我想知道的是它的时间戳。媒体在左下角附带了我认为相机硬件预渲染的时钟,有没有办法让我得到那个时间?我查看了RTP 标头
,其中应该包含时间戳信息。我查看了 Gstreamer 信息和教程以及具有时间戳的缓冲区描述,但我认为这不是我需要的,它听起来像本地机器时间。ptsdts
总结一下问题,如何从 RTSP 流中提取相机时间戳?
小智 7
您可以使用 PTS 变量检索每个帧的 RTP 时间戳。例如,如果您的相机为 25 FPS,则应将 PTS 乘以 9/1000000 以获得 RTP 时间戳。这不是您想要的,但它很方便。
为了查看实际的时间戳,您需要使用 RTCPBuffer 并检索缓冲区中的每个 RTCPPacket(包括 NTP 和 RTP 时间戳的实时传输控制协议数据包)以使用方法查看这些时间戳gst_rtcp_packet_sr_get_sender_info(...)。然后,每次收到新的 RTCP 数据包时,您都会同步 NTP 和 RTP 时间戳。
您必须进行计算才能找到 RTP 时间戳间隔与 NTP 时间相对应的时间才能执行此同步。
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |