目前我有这样的设置。
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插件,但我试图避免这种情况。
答案 0 :(得分:1)
我猜您可以为framerate
元素设置videoparse
。您也可以do-timestamp=true
尝试fdsrc
- 也许它需要两者的组合。
如果您在my-app
中拥有PTS,则可能需要将缓冲区和PTS包装在实际GstBuffer
中,并使用gdppay
和gdpdepay
作为链接之间的有效负载。
例如,如果您的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。
有关gdp
如何用作协议的一些示例,请参阅https://github.com/GStreamer/gst-plugins-bad/tree/master/gst/gdp。