gstreamer:在命令行API中传递帧PTS

问题描述 投票:0回答:1

目前我有这样的设置。

my-app | gst-launch-1.0 -e fdsrc ! \
    videoparse format=GST_VIDEO_FORMAT_BGR width=640 height=480 ! \
    videoconvert ! 'video/x-raw, format=I420' ! x265enc ! h265parse ! \
    matroskamux ! filesink location=my.mkv

my-app我将原始BGR帧缓冲区流式传输到gst。我怎样才能为这些帧传递表示时间戳(PTS)?我有点完全控制my-app。我可以从它打开其他管道到gst。

我知道我可以选择使用gstreamer C / C ++ API或编写gstreamer插件,但我试图避免这种情况。

gstreamer gstreamer-1.0
1个回答
1
投票

我想你可以为framerate元素设置一个videoparse。你也可以尝试do-timestamp=truefdsrc - 也许它需要两者的组合。

如果你在my-app中有PTS,你可能需要在真正的GstBuffer中包装缓冲区和PTS,并使用gdppaygdpdepay作为链接之间的有效载荷。

例如,如果您的my-app将以下列格式转储图像:https://github.com/GStreamer/gstreamer/blob/master/docs/random/gdp(不确定此信息文档最近是多少)

您可以使用以下管道接收数据:

fdsrc ! gdpdepay ! videoconvert ! ..

无需解析和格式,因为它也是协议的一部分。如果设置你也会有PTS。

如果你可以在my-app中使用GStreamer lib,你可以使用这样的soome管道:

appsrc ! gdppay ! fakesink dump=true

你可以用PTS将你的图像缓冲区推送到appsink。

有关https://github.com/GStreamer/gst-plugins-bad/tree/master/gst/gdp如何用作协议的一些示例,请参阅gdp

© www.soinside.com 2019 - 2024. All rights reserved.