Search code examples
gstreamerrtp

GStreamer. Probe after rtph265pay never called


i have rtsp server and i want to extend rtp buffer header. For this purpose i added probe to src of rtph265pay, but it never called. My pipeline:

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

Code where i attach probe:

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);
}

If i set "sink" instead of "src", probe works, but i need "src" to change rtp buffer header... What is wrong here?


Solution

  • Maybe because the rtph265pay's src pad isn't linked to any other pad - meaning rtph265pay is the end of the pipeline - the element doesn't pass any buffers to its src pad?
    Try and attach a fakesink after the rtph265pay.