如何使用gstreamer从HLS流获取EXT-X-PROGRAM-DATE-TIME ?



我有一个成功读取HLS流的管道,我试图在发现器结构的帮助下获得标签:

tags = gst_discoverer_info_get_tags(info);
gchar * value = nullptr;
gboolean retv = gst_tag_list_get_string(tags, "EXT-X-PROGRAM-DATE-TIME", &value);
if ( value ) {
log_gst.log("EXT-X-PROGRAM-DATE-TIME: {}", value);
g_free(value);
}

但是这个代码不能检索标签。最后,我需要能够获得当前帧的时间戳,我只能获得PTS(从流开始的时间戳),但我需要计算流启动时的确切日期时间。

EXT-X-PROGRAM-DATE-TIME HLS标签是在GStreamer 1.22中作为标签事件添加到hlsdemux中的。

不确定您使用的是哪个GStreamer版本,但是您可以通过迁移到1.22或将此功能反向移植到您的GStreamer版本来实现您想要的功能。

原文:https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/195

这是相关的合并请求:https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1417

您可以在一个简单的管道中看到这些标记事件,如下所示:

GST_DEBUG=GST_EVENT:TRACE gst-launch-1.0 souphttpsrc location=https://mtoczko.github.io/hls-test-streams/test-program-time/playlist.m3u8 ! application/x-hls ! hlsdemux ! fakesink |& grep tag

然后你可以在你的GStreamer元素或GStreamer应用程序中解析这些标签事件,以提取你正在寻找的日期时间。

最新更新