我有USB抓取器v4 l2源,我想三通流到autovideosink和x264 enc文件(现在作为假黑洞)
当我禁用一个或另一个分支时,它可以工作,但管道一起运行:
Pipeline state changed from Null to Ready
Pipeline state changed from Ready to Paused
并且一直呆在那里,从不切换到玩
具有类似功能的gst-launch-1.0运行良好。
gst::Element::link_many(&[&pw_video, &v_caps, &vid_queuey, &vid_tee]).unwrap();
gst::Element::link_many(&[&vid_queue1, &autovideoconvert, &vid_queuex, &autovideosink]).unwrap();
gst::Element::link_many(&[&vid_queue2, &autovideoconvert_x264, &vid_queue3, &x264, &vid_queue4, &fake]).unwrap();
let tee_display_pad = vid_tee.request_pad_simple("src_10").unwrap();
let vid_queue1_pad = vid_queue1.static_pad("sink").unwrap();
tee_display_pad.link(&vid_queue1_pad).unwrap();
let tee_convert_pad = vid_tee.request_pad_simple("src_20").unwrap();
let vid_queue2_pad = vid_queue2.static_pad("sink").unwrap();
tee_convert_pad.link(&vid_queue2_pad).unwrap();
我怎样才能正确使用生 rust 的球座来拥有两个分支的可玩管道?
更新:我读了一些关于增加队列大小的帖子,所以我尝试了这个,然后所有队列:
let vid_queue1 = gst::ElementFactory::make("queue")
.name("queue1")
.property("max-size-buffers", 5000 as u32)
.property("max-size-bytes", 1048576000 as u32)
.property("max-size-time", 60000000000 as u64)
.build()
.expect("queue1");
但这并没有帮助,所以我尝试设置零延迟:
let x264 = gst::ElementFactory::make("x264enc")
.name("x264")
.property_from_str("speed-preset", "ultrafast")
.property_from_str("pass", "qual")
.property_from_str("tune", "zerolatency")
.property("quantizer", 0 as u32)
.property("threads", 8 as u32)
.build()
.expect("!x264");
现在它可以工作了。但是类似的gst-launch-1.0设置没有这样的选项-只是队列大小增加了。
除了设置零延迟,还有其他选择吗?
1条答案
按热度按时间eh57zj3b1#
你有没有尝试在autovideosink和filesink元素中设置“async”属性为false?