【问题标题】:gstreamer: pass frame PTS in command line APIgstreamer:在命令行 API 中传递帧 PTS
【发布时间】:2018-03-06 19:57:13
【问题描述】:

目前我有这样的设置。

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

【问题讨论】:

  • 是我的应用程序,抽出 gst-buffer 在这种情况下,您只需在抽出之前设置缓冲区的 pts,因为您已经在进行 videoparse 一切都应该小心。例如,以下管道设置了 pts (gst-launch-1.0 videotestsrc do-timestamp=true ! fakesink dump=true | gst-launch-1.0 -v fdsrc !videoparse !identity silent=false ! fakesink)
  • 以上评论不属实。 fakesink 将转储原始图像数据,仅丢弃任何 DTS/PTS 或其他 GstBuffer 数据,videoparse 也将仅处理原始视频数据而没有任何其他信息。 gdp 插件旨在处理这些类型的用例。
  • @FlorianZwoch 感谢您的纠正,pts 是由 videoparse 元素添加的!
  • 是的,您的示例很棘手,因为可能 videotestsrc 和 videoparse 在默认配置下生成相同的时间戳,看起来就像它们传输一样。

标签: gstreamer gstreamer-1.0


【解决方案1】:

我猜你可以为videoparse 元素设置一个framerate。你也可以试试do-timestamp=true 换成fdsrc - 也许它需要两者的结合。

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

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

您可以通过以下管道接收数据:

fdsrc ! gdpdepay ! videoconvert ! ..

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

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

appsrc ! gdppay ! fakesink dump=true

您可以将带有 PTS 的图像缓冲区推送到应用程序接收器。

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

【讨论】:

  • 我确实有 my-app 中的时间戳,我想将其传递给 gstreamer。
  • 看起来do-timestamp=true 没有记录在fdsrc 插件中。所以如果你有它,一旦帧到达,它就会得到当前时间的时间戳?如果您对编码器有压力,这看起来不是很有用,因为这会使 gsteamer 管道无法跟上,并且当操作系统缓冲区已满时,它会阻塞。
  • 是的,在你的情况下这些 PTS 代表什么还不太清楚 - 如果你是实时的、恒定的帧速率等。
  • @Sogartar 要在操作系统压力过大时消除阻塞,您可以添加一个队列,该队列将缓冲区保存 X 时间(fdsrc ! queue min-threshold-buffers=0 min -threshold-bytes=0 min-threshold-time=X ! ..)。注意 X 以纳秒为单位
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2012-07-11
  • 1970-01-01
  • 2017-05-07
  • 2012-09-09
相关资源
最近更新 更多