0

目前我有这样的设置。

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 插件,但我试图避免这种情况。

4

1 回答 1

1

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

如果你有 PTS,my-app你可能需要将缓冲区和 PTS 包装在一个真实的中GstBuffergdppaygdpdepay用作链接之间的有效负载。

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

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

fdsrc ! gdpdepay ! videoconvert ! ..

也不需要分辨率和格式,因为它也是协议的一部分。如果设置,您也将拥有 PTS。

如果您可以在其中使用 GStreamer lib,则可以使用my-app一些类似这样的管道:

appsrc ! gdppay ! fakesink dump=true

并且您将使用 PTS 将图像缓冲区推送到应用程序接收器。

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

于 2018-03-06T11:05:19.800 回答