如何在Python中访问GStreamer缓冲区的数据?

3

在旧版(GObject-introspection之前)的GStreamer绑定中,可以通过.data属性或将其强制转换为str来访问gst.Buffer数据。然而,现在不再支持这种方式:

>>> p buf.data
*** AttributeError: 'Buffer' object has no attribute 'data'
>>> str(buf)
'<GstBuffer at 0x7fca2c7c2950>'
1个回答

6

在最近的版本中,要访问 Gst.Buffer 的内容,你必须首先使用 map() 函数将缓冲区映射为 Gst.MapInfo,该对象具有类型为 bytes(在 Python 2 中为 str)的 data 属性。

(result, mapinfo) = buf.map(Gst.MapFlags.READ)
assert result

try:
    # use mapinfo.data here
    pass
finally:
    buf.unmap(mapinfo)

您还可以使用get_memory()访问缓冲区的成分Gst.Memory元素,并逐个进行映射。(据我所知,调用Buffer.map()相当于调用.get_all_memory()并映射结果Memory。)
不幸的是,即使设置了Gst.MapFlags.WRITE标志,使用Python表示它们时也会将其表示为不可变类型,因此无法向这些缓冲区写入。相反,您需要创建一个具有修改后数据的新Gst.Memory,并使用Gst.Buffer.replace_all_memory()

如果您的目标是 CentOS 7,则其不足够的 gi 绑定中没有这样的方法,但是有一个解决方法在此处记录:https://bugzilla.gnome.org/show_bug.cgi?id=678663#c73 - totaam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接