GStreamer。 rtph265pay之后的探测从未调用过

问题描述 投票:1回答:1

我有rtsp服务器,我想扩展rtp缓冲区头。为此,我向rtph265pay的src添加了探针,但从未调用过。我的管道:

( appsrc name=vsrc ! nvvidconv ! video/x-raw(memory:NVMM),format=NV12 !
omxh265enc MeasureEncoderLatency=true bitrate=20000000 control-rate=2 !
rtph265pay name=pay0 pt=96 ) 

我连接探针的代码:

static GstPadProbeReturn test_probe (GstPad *pad, GstPadProbeInfo *info,
gpointer user_data)
{
    cout << "i'm here";
}



 void mediaConfigure (GstRTSPMediaFactory* factory, GstRTSPMedia* media,
gpointer user_data)
{
        GstElement *element, *rtph265pay; GstPad *pad;
        element = gst_rtsp_media_get_element (media);
        rtph265pay = gst_bin_get_by_name_recurse_up (GST_BIN (element), "pay0");
        pad = gst_element_get_static_pad (rtph265pay, "src");
        gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
        (GstPadProbeCallback) test_probe, NULL, NULL);
        gst_object_unref (pad);
}

如果我将“ sink”设置为“ src”,则探针可以工作,但是我需要“ src”来更改rtp缓冲区标头...怎么了

gstreamer rtp
1个回答
0
投票

我不太熟悉这种类型的gstreamer语法,但是-您可以尝试按照文档描述的方式创建管道吗?我的意思是使用他们在这里使用的模板:Basic tutorial 3: Dynamic pipelines这样,探针始终为我工作:GStreamer: Sending string to another pipeline via UDP

特别是,在创建管道并链接了所有元素之后,并且在播放管道之前,我完全按照您的方式添加了探针:

rtph264pay_src_pad = gst_element_get_static_pad(rtph264pay_HD, "src");
gst_pad_add_probe (rtph264pay_src_pad, GST_PAD_PROBE_TYPE_BUFFER,
                   (GstPadProbeCallback) set_x_to_rtp_header, NULL, NULL);
gst_object_unref (rtph264pay_src_pad);

[另一个想法:可能是因为rtph265pay的src填充板未链接到任何其他填充板-意味着rtph265pay是管道的末端-元素未将任何缓冲区传递到其src填充板?也许尝试在rtph265pay之后附加一个假钞。

© www.soinside.com 2019 - 2024. All rights reserved.