GStreamer动态调整videocrop参数报GstVideoCrop无caps属性如何解决
问题原因说明
你操作方式有误,报错提示是准确的:GstVideoCrop 元件本身不存在名为 caps 的属性,你的用法混淆了GStreamer两个不同的概念:
Gst.caps_from_string()是用来构造媒体能力描述的,仅用于描述音视频帧的格式、分辨率等参数,不能用来设置元件的自有属性videocrop的裁剪参数top/left/right/bottom本身就是独立的可动态修改属性,不需要通过caps设置
正确实现方式
你直接对获取到的videocrop实例分别设置四个裁剪属性即可,裁剪参数修改实时生效,不需要将流水线切到READY状态也能操作。
修正后的代码如下:
import gi gi.require_version('Tcam', '0.1') gi.require_version('Gst', '1.0') from gi.repository import GObject, Gst, Tcam GObject.threads_init() Gst.init(()) # 初始流水线定义不变 p = Gst.parse_launch("tcambin name=src ! video/x-raw, format=BGRx ! videocrop name=try top=0 left=300 right=150 bottom=0 ! videoconvert ! ximagesink") p.set_state(Gst.State.PLAYING) # 获取videocrop元件实例 m = p.get_by_name("try") # 直接修改对应裁剪属性即可,不需要操作caps m.set_property("top", 500) m.set_property("left", 300) m.set_property("right", 150) m.set_property("bottom", 0) GObject.MainLoop.run()
补充说明
如果你需要批量设置元件属性,也可以用m.props对象批量赋值,写法更简洁:
m.props.top = 500 m.props.left = 300 m.props.right = 150 m.props.bottom = 0
内容的提问来源于stack exchange,提问作者helpneeded
相关产品推荐
相关产品推荐

