Gstreamer转换和显示视频v4 l2- tee问题在生 rust

suzh9iv8  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(211)

我有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设置没有这样的选项-只是队列大小增加了。
除了设置零延迟,还有其他选择吗?

eh57zj3b

eh57zj3b1#

你有没有尝试在autovideosink和filesink元素中设置“async”属性为false?

相关问题