gstreamer:在命令行中传递帧 PTS API
gstreamer: pass frame PTS in command line API
目前我有这样的设置。
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 插件,但我试图避免这种情况。
我猜你可以为 videoparse
元素设置一个 framerate
。您也可以尝试 do-timestamp=true
作为 fdsrc
- 也许它需要两者的结合。
如果你在 my-app
中有 PTS,你可能需要将缓冲区和 PTS 包装在一个真正的 GstBuffer
中,并使用 gdppay
和 gdpdepay
作为负载之间link.
例如,如果您的 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 | 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 插件,但我试图避免这种情况。
我猜你可以为 videoparse
元素设置一个 framerate
。您也可以尝试 do-timestamp=true
作为 fdsrc
- 也许它需要两者的结合。
如果你在 my-app
中有 PTS,你可能需要将缓冲区和 PTS 包装在一个真正的 GstBuffer
中,并使用 gdppay
和 gdpdepay
作为负载之间link.
例如,如果您的 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。