如何使用 Python 绑定编写修改 gstreamer 缓冲区?

问题描述 投票:0回答:1

我正在使用 gstreamer 版本 1.14.5 及其 Python 绑定。我实现了一个新的插件,该插件将在视频帧上绘制几何形状(例如矩形)。我正在使用 PyCairo 来绘制这些形状。

为了实现这个插件,我重写了父类的

do_transform_ip
函数
GstBase.BaseTransform
:

class MyPlugin(GstBase.BaseTransform):

    def do_transform_ip(self, buffer: Gst.Buffer) -> Gst.FlowReturn:
        (result, mapinfo) = buffer.map(Gst.MapFlags.READ | Gst.MapFlags.WRITE)
        assert result
        try:
            # use mapinfo.data here
            # modify the buffer using a graphics library such as PyCairo
        finally:
            buffer.unmap(mapinfo)
        return Gst.FlowReturn.OK

但是我遇到了这个错误:

(gst-launch-1.0:638):GStreamer-CRITICAL **:14:37:41.515:在不可写缓冲区上请求写入映射

我不知道如何修复这个错误。

gstreamer gstreamer-1.0 python-gstreamer
1个回答
0
投票

我知道这已经是很久以前的事情了,但是你找到解决方案了吗?

目前我已经看到这个可以使缓冲区可写: https://lifestyletransfer.com/how-to-make-gstreamer-buffer-writable-in-python/

但是该示例似乎不适用于真正的 GStreamer 管道插件,因为 do_transform_ip 中的特定缓冲区仍然无法使用它进行写入。也许引用计数太高了?

© www.soinside.com 2019 - 2024. All rights reserved.