GStreamer. Сонда след rtph265pay никога не се е обаждала

имам rtsp сървър и искам да разширя заглавката на rtp буфера. За тази цел добавих сонда към src на rtph265pay, но тя никога не се обади. Моят тръбопровод:

( 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 буфера... Какво не е наред тук?


person bronstein87    schedule 22.03.2020    source източник


Отговори (1)


Може би защото src подложката на rtph265pay не е свързана с друга подложка - което означава, че rtph265pay е краят на конвейера - елементът не предава никакви буфери към своята src подложка?
Опитайте да прикачите фалшива мивка след rtph265pay.

person Inbar    schedule 26.03.2020
comment
благодаря, бяхте прав, добавих елемент за самоличност след заплащане и сега всичко работи. но имам още един въпрос. как да добавя данни към разширението, ако е по-голямо от 16 бита? например искам да добавя дълго дълго. Това означава ли, че трябва да разделя данните си и да извикам функцията за разширение на набор 4 пъти? - person bronstein87; 30.03.2020
comment
Всъщност не съм сигурен - когато го използвах, трябваше да предам две стойности, всяка по 16 бита. Така че, тъй като нямах време да експериментирам и не исках да объркам нещо, разделих тръбопровода на два потока (всеки със собствен rtph264pay) и зададох стойността x в разширението на едно и стойността y върху продължението на другия. Съжалявам, че не можах да помогна с този въпрос и се радвам, че можах да помогна с първия ви :) - person Inbar; 31.03.2020