我正在使用 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:在不可写缓冲区上请求写入映射
我不知道如何修复这个错误。
我知道这已经是很久以前的事情了,但是你找到解决方案了吗?
目前我已经看到这个可以使缓冲区可写: https://lifestyletransfer.com/how-to-make-gstreamer-buffer-writable-in-python/
但是该示例似乎不适用于真正的 GStreamer 管道插件,因为 do_transform_ip 中的特定缓冲区仍然无法使用它进行写入。也许引用计数太高了?