udpsink "client-added" and "client-removed" signals don't seem to work (or I am using it incorrectly!)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

udpsink "client-added" and "client-removed" signals don't seem to work (or I am using it incorrectly!)

enthusiastic geek
This post was updated on .
A part of my code looks like



app->launch_string_[0] = "videotestsrc ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink name=udpsink0 host=127.0.0.1 port=1234";
    app->launch_string_[1] = "videotestsrc ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink name=udpsink0 host=127.0.0.1 port=5678";

...
...
...

g_signal_connect (app->pipeline_[index]->Gst::Bin::get_element("udpsink0")->gobj(), "client-added",  G_CALLBACK(&VideoBroadcast::client_added), NULL);// (gpointer) &index);
    //Experimental
    g_signal_connect (app->pipeline_[index]->Gst::Bin::get_element("udpsink0")->gobj(), "client-removed",  G_CALLBACK(&VideoBroadcast::client_removed), NULL);// (gpointer) &index);

g_signal_connect (app->pipeline_[index]->Gst::Bin::get_element("udpsink0")->gobj(), "client-added",  G_CALLBACK(&VideoBroadcast::on_client_added), NULL);// (gpointer) &index);
    //Experimental
    g_signal_connect (app->pipeline_[index]->Gst::Bin::get_element("udpsink0")->gobj(), "client-removed",  G_CALLBACK(&VideoBroadcast::on_client_removed), NULL);// (gpointer) &index);

...
...
...

void VideoBroadcast::client_added(GstElement* sink, gint fd, gpointer data)
{
  gint num_fds;
  g_object_get(G_OBJECT(sink), "num_fds", &num_fds, NULL);
  g_print("fdsink: successfully added client %d (sink has now %d fds)", fd, num_fds);
}


void VideoBroadcast::client_removed(GstElement* sink, gint fd, gpointer data)
{
  gint num_fds;
  g_object_get(G_OBJECT(sink), "num_fds", &num_fds, NULL);
  g_print("fdsink: successfully removed client %d (sink has now %d fds)", fd, num_fds);
}


void VideoBroadcast::on_client_added (GstElement *multiudpsink, gchar *host, gint port, gpointer user_data)
{
   g_print("[added]\n");
}

void VideoBroadcast::on_client_removed (GstElement *multiudpsink, gchar *host, gint port, gpointer user_data)
{
   g_print("[removed]\n");
}


I tried both the variants of the add/remove function above and was expecting to see the clients added/removed events as soon as I start decoding the pipeline.

If I run my binary with

 GST_DEBUG=*udpsink*:5 gdb --args ./udpencode


and start my decoding pipeline

 gst-launch udpsrc port=1234 ! "application/x-rtp, payload=96" ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false


I clearly see the debug statements where clients are connected. It also appears that udpsink inherits properties from udpmultisink


Starting program: /home/virgo/rtsptest/udpencode
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
 Initializing Broadcast
0:00:00.376603243  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1061:gst_multiudpsink_add_internal:<GstUDPSink@0x8428010> adding client on host localhost, port 4951
0:00:00.385241637  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1089:gst_multiudpsink_add_internal:<GstUDPSink@0x8428010> add client with host localhost, port 4951
0:00:00.385335665  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1099:gst_multiudpsink_add_internal:<GstUDPSink@0x8428010> added client on host localhost, port 4951
0:00:00.385513588  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1141:gst_multiudpsink_remove:<udpsink0> found 1 clients with host localhost, port 4951
0:00:00.385569414  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1145:gst_multiudpsink_remove:<udpsink0> remove client with host localhost, port 4951
0:00:00.385620154  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1061:gst_multiudpsink_add_internal:<udpsink0> adding client on host 127.0.0.1, port 4951
0:00:00.385677584  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1089:gst_multiudpsink_add_internal:<udpsink0> add client with host 127.0.0.1, port 4951
0:00:00.385746937  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1099:gst_multiudpsink_add_internal:<udpsink0> added client on host 127.0.0.1, port 4951
0:00:00.385825239  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1141:gst_multiudpsink_remove:<udpsink0> found 1 clients with host 127.0.0.1, port 4951
0:00:00.385882764  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1145:gst_multiudpsink_remove:<udpsink0> remove client with host 127.0.0.1, port 4951
0:00:00.385930357  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1061:gst_multiudpsink_add_internal:<udpsink0> adding client on host 127.0.0.1, port 1234
0:00:00.385981052  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1089:gst_multiudpsink_add_internal:<udpsink0> add client with host 127.0.0.1, port 1234
0:00:00.386023699  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1099:gst_multiudpsink_add_internal:<udpsink0> added client on host 127.0.0.1, port 1234
State = NULL
0:00:00.387784474  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:936:gst_multiudpsink_init_send:<udpsink0> creating sockets
0:00:00.387847873  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:945:gst_multiudpsink_init_send:<udpsink0> have socket
0:00:00.387952219  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:988:gst_multiudpsink_init_send:<udpsink0> could not get udp buffer size
0:00:00.388011564  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:868:gst_multiudpsink_configure_client:<udpsink0> configuring client 0x842a1a8
0:00:00.388053845  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:885:gst_multiudpsink_configure_client:<udpsink0> setting unicast ttl to 64
[New Thread 0xb63e4b40 (LWP 5826)]
0:00:00.393963527  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1061:gst_multiudpsink_add_internal:<GstUDPSink@0x84283a0> adding client on host localhost, port 4951
0:00:00.394302912  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1089:gst_multiudpsink_add_internal:<GstUDPSink@0x84283a0> add client with host localhost, port 4951
0:00:00.394388170  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1099:gst_multiudpsink_add_internal:<GstUDPSink@0x84283a0> added client on host localhost, port 4951
0:00:00.394497939  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1141:gst_multiudpsink_remove:<udpsink0> found 1 clients with host localhost, port 4951
0:00:00.394547867  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1145:gst_multiudpsink_remove:<udpsink0> remove client with host localhost, port 4951
0:00:00.394627071  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1061:gst_multiudpsink_add_internal:<udpsink0> adding client on host 127.0.0.1, port 4951
0:00:00.394698533  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1089:gst_multiudpsink_add_internal:<udpsink0> add client with host 127.0.0.1, port 4951
0:00:00.394755793  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1099:gst_multiudpsink_add_internal:<udpsink0> added client on host 127.0.0.1, port 4951
0:00:00.394821757  5823  0x83f7560 DEBUG           multiudpsink gstmultiudpsink.c:1141:gst_multiudpsink_remove:<udpsink0> found 1 clients with host 127.0.0.1, port 4951


UDP multicast is not connection oriented. Right?
Any ideas what is the issue?