【发布时间】: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 在默认配置下生成相同的时间戳,看起来就像它们传输一样。