You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Gst.Pipeline为videoconvert元素添加属性及转换字符串管线?

GStreamer 两个问题的解决方法

一、将字符串管线转为Gst.Pipeline实例

直接用Gst.parse_launch()函数就能搞定,它可以把你熟悉的字符串格式管线直接解析成Gst.Pipeline(或Gst.Bin)实例,示例代码:

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst

Gst.init(None)

# 字符串格式的管线
pipeline_str = "<some src...> ! videoconvert ! video/x-raw,format=I420 ! <some enc...>"
# 解析为Pipeline实例
pipeline = Gst.parse_launch(pipeline_str)

# 后续可正常操作管线,比如启动
pipeline.set_state(Gst.State.PLAYING)

二、正确设置videoconvert后的格式约束

你之前的错误核心是:video/x-raw,format=I420并不是videoconvert的属性,它是一个格式过滤器(Caps Filter),需要单独创建这个元素,或者在链接元素时指定格式约束。

方法1:创建capsfilter元素(对应字符串管线的写法)

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst

Gst.init(None)

# 创建管线和各个元素
pipeline = Gst.Pipeline.new("my-pipeline")
src = Gst.ElementFactory.make("<your-src-element>", "src")
convert = Gst.ElementFactory.make("videoconvert", "convert")
# 创建格式过滤器并设置目标格式
caps_filter = Gst.ElementFactory.make("capsfilter", "caps-filter")
caps_str = "video/x-raw,format=I420"
caps = Gst.Caps.from_string(caps_str)
caps_filter.set_property("caps", caps)
encoder = Gst.ElementFactory.make("<your-enc-element>", "encoder")

# 将所有元素添加到管线
elements = [src, convert, caps_filter, encoder]
for elem in elements:
    pipeline.add(elem)

# 依次链接元素
Gst.Element.link_many(src, convert, caps_filter, encoder)

# 启动管线
pipeline.set_state(Gst.State.PLAYING)

如果不想单独创建capsfilter元素,可以用link_filtered方法在链接videoconvert和编码器时直接指定格式约束:

# 前面创建src、convert、encoder的步骤同上
# 先链接src到convert
src.link(convert)
# 用link_filtered链接convert和encoder,传入目标格式caps
convert.link_filtered(encoder, caps)

这两种写法都能实现和字符串管线! videoconvert ! video/x-raw,format=I420 !完全一致的格式约束效果。

内容的提问来源于stack exchange,提问作者HiRod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:32:57