是否存在可强制深度复制GstBuffer的GStreamer元素?
解决GStreamer Tee分支Buffer深度复制的问题
你可以用以下两个轻量元素触发GstBuffer的深度复制,确保每个Tee分支拿到独立的Buffer副本,之后在Pad Probe里修改就不会互相干扰:
queue 元素:给queue加上
copy-buffers=true参数,它会对经过的每个Buffer执行深度复制。同时queue还能提供线程隔离,适合后续有耗时修改操作的场景。
示例分支写法:t. ! queue copy-buffers=true ! video/x-raw,format=NV12 ! ... 你的Pad Probe和后续处理identity 元素:这是专门做透传/Buffer处理的轻量元素,开启
copy=true属性就能触发深度复制,开销比queue更小,适合只需要复制Buffer的场景。
示例分支写法:t. ! identity copy=true ! video/x-raw,format=NV12 ! ... 你的Pad Probe和后续处理
完整Pipeline示例参考:
v4l2src ! video/x-raw,width=1280,height=720,format=NV12 ! tee name=t t. ! queue copy-buffers=true ! pad probe(添加覆盖层A) ! autovideosink t. ! identity copy=true ! pad probe(添加覆盖层B) ! autovideosink
原理很直接:在Tee的每个输出分支最前面加上带复制参数的元素,让每个分支拿到独立的Buffer副本,之后你在Pad Probe里做破坏性修改就不会影响另一个分支的Buffer了。
内容的提问来源于stack exchange,提问作者Vincentz
相关产品推荐
相关产品推荐

