Gstreamer udp源pcm播放

Gstreamer udp-source pcm playback

我有这些 gst 启动参数可以满足我的要求:

gst-launch-1.0.exe udpsrc port=22122 ! audio/x-raw,format=S16LE,rate=16000,channels=1 ! autoaudiosink

但是,我无法将其转换为代码。我正在尝试以下操作:

GstElement *pipeline = gst_pipeline_new("audio-player");

GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
guint bus_watch_id = gst_bus_add_watch(bus, bus_call, m_gstMainLoop);
gst_object_unref(bus);

GstElement *source = gst_element_factory_make("udpsrc", "udpsrc0");
GstElement *sink = gst_element_factory_make("autoaudiosink", "autoaudiosink0");

g_object_set(G_OBJECT(source), "port", 7200, "buffer-size", 1000000, NULL);
gst_bin_add_many(GST_BIN(pipeline), source, sink, NULL);   

GstCaps *caps = gst_caps_new_simple("audio/x-raw",
                                    "format",   G_TYPE_STRING,  "S16LE",
                                    "layout",   G_TYPE_STRING,  "INTERLEAVED",
                                    "rate",     G_TYPE_INT,     16000,
                                    "channels", G_TYPE_INT,     1, 
                                    NULL);

gst_element_link_filtered(source, sink, caps);
gst_caps_unref(caps);

gst_element_set_state(pipeline, GST_STATE_PLAYING);
g_main_loop_run(m_gstMainLoop);

在点图中,它们看起来几乎相似,但不完全相似,尽管我不知道我遗漏了什么。

不知道为什么,但是如果我省略了 INTERLEAVED(如果输入的话应该是小写的)它会起作用,而且我还错过了我输入了错误的端口号(doh!)。