在旧版(GObject-introspection之前)的GStreamer绑定中,可以通过.data
属性或将其强制转换为str
来访问gst.Buffer
数据。然而,现在不再支持这种方式:
>>> p buf.data
*** AttributeError: 'Buffer' object has no attribute 'data'
>>> str(buf)
'<GstBuffer at 0x7fca2c7c2950>'
在最近的版本中,要访问 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()
。