CLI works, C code not, udpsrc

I have a simple sh program that works

#!/bin/sh
gst-launch-1.0 -v pulsesrc device=alsa_input.usb-Sensoray_Co.__Inc._Sensoray_Model_2263_551656-04.analog-stereo !  queue ! audioconvert ! audioresample ! audio/x-raw,rate=22000,channels=1 !vrtpL24pay ! udpsink host=127.0.0.1 port=5000

And a simple C code that does not

audiod "pulsesrc device=alsa_input.usb-Sensoray_Co.__Inc._Sensoray_Model_2263_551656-04.analog-stereo ! queue ! audioconvert ! audioresample ! audio/x-raw,rate=22000,channels=1 ! rtpL24pay ! udpsink host=127.0.0.1 port=5000"

(I show the complete code just in case
invoked as (Not from a shell, argv[1] is the complete pipeline (exactly as the sh)

#include <gst/gst.h>

int main (int argc, char *argv[])
{
    GstElement *pipeline;
    GstBus *bus;
    GstMessage *msg;

	// usage
	if (argc < 2) {
		g_printerr ("usage: audiod pipeline\n");
		exit (1);
	}

    /* Initialize GStreamer */
    gst_init (&argc, &argv);

    /* Build the pipeline */
    pipeline = gst_parse_launch (argv[1], NULL);

    /* Start playing */
    gst_element_set_state (pipeline, GST_STATE_PLAYING);

    /* Wait until error or EOS */
    bus = gst_element_get_bus (pipeline);
    msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

    /* See next tutorial for proper error message handling/parsing */
    if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
      g_printerr ("An error occurred! Re-run with the GST_DEBUG=*:WARN environment variable set for more details.\n");
    }

    /* Free resources */
    gst_message_unref (msg);
    gst_object_unref (bus);
    gst_element_set_state (pipeline, GST_STATE_NULL);
    gst_object_unref (pipeline);
    return 0;
}

Is there something magical, as hinted by google, about udpsrc and localhost ?

How does the C code not work, what happens?

Silence. ss -l |grep 5000
$ (nothing)