<div><br><font color="#800080">hi all<br>&nbsp;&nbsp;&nbsp; i have a trouble when i use gstreamer to develop a small project </font>for sending and receiving udp packets with rtp payloaded <br><br>sender-------&gt;server|----------------&gt;receiver_1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |---------------&gt;receiver_2<br>*****************************************************************<br>sender:<br>gst-launch -v gstrtpbin name=rtpbin \<br>filesrc location=filesrc location=/home/xuxin/desktop/g_p/a.avi ! decodebin name=dec \<br>dec. ! queue ! x264enc byte-stream=false ! rtph264pay ! rtpbin.send_rtp_sink_0 \<br>rtpbin.send_rtp_src_0 ! udpsink port=5000 host=172.21.29.177 name=vrtpsink \<br>dec. ! queue ! audioresample ! audioconvert ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_1 \<br>rtpbin.send_rtp_src_1 ! udpsink port=5002 host=172.21.29.177 ts-offset=0 name=artpsink <br><br>Server( ip:172.21.29.177)<br>gst-launch -v gstrtpbin name=rtpbin latency=200 \<br>udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" port=5000 ! rtpbin.recv_rtp_sink_0 \<br>rtpbin. ! udpsink port=5000 host=224.0.0.1 sync=false ts-offset=0 \<br>udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)PCMA" port=5002 ! rtpbin.recv_rtp_sink_1 \<br>rtpbin. ! udpsink port=5002 host=224.0.0.1 sync=false ts-offset=0 <br><br>receiver (in multigroup)<br><br>gst-launch -v gstrtpbin name=rtpbin latency=200 \<br>udpsrc multigroup="224.0.0.1" caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" port=5000 ! rtpbin.recv_rtp_sink_0 \<br>rtpbin. ! rtph264depay ! decodebin ! xvimagesink \<br>udpsrc multigroup="224.0.0.1" caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)PCMA" port=5002 ! rtpbin.recv_rtp_sink_1 \<br>rtpbin. ! rtppcmadepay ! decodebin ! audioconvert ! audioresample ! alsasink <br>**********************************************************************<br><font color="#f00000">&nbsp;then I write "Server" in C language</font> ,the code is showed below<br>#include &lt;gst/gst.h&gt;<br>#include &lt;glib.h&gt;<br>#include &lt;unistd.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>static gboolean<br>bus_call (GstBus&nbsp;&nbsp;&nbsp;&nbsp; *bus,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GstMessage *msg,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gpointer&nbsp;&nbsp;&nbsp; data)<br>{<br>&nbsp; GMainLoop *loop = (GMainLoop *) data;<br>&nbsp; switch (GST_MESSAGE_TYPE (msg)) {<br>&nbsp;&nbsp;&nbsp; case GST_MESSAGE_EOS:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_print ("End of stream\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_main_loop_quit (loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; case GST_MESSAGE_ERROR: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gchar *debug;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GError *error;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gst_message_parse_error (msg, &amp;error, &amp;debug);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_free (debug);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_printerr ("Error: %s\n", error-&gt;message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_error_free (error);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_main_loop_quit (loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp; }<br>&nbsp; return TRUE;<br>}<br><br>static void on_pad_added(GstElement *element, GstPad *pad, gpointer data)<br>{<br>&nbsp;&nbsp;&nbsp; GstPad *sinkpad;<br>&nbsp;&nbsp;&nbsp; GstElement *udpsink = (GstElement *)data;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; g_print("Dynamic pad created, linking demuxer/decoder\n");<br>&nbsp;&nbsp;&nbsp; sinkpad = gst_element_get_static_pad(udpsink, "sink");<br>&nbsp;&nbsp;&nbsp; gst_pad_link(pad, sinkpad);<br>&nbsp;&nbsp;&nbsp; gst_object_unref(sinkpad);<br>}<br><br>int main(int argc, char **argv)<br>{<br>&nbsp;&nbsp;&nbsp; GMainLoop *loop;<br>&nbsp;&nbsp;&nbsp; GstBus *bus;<br>&nbsp;&nbsp;&nbsp; GstPad *pad;<br>&nbsp;&nbsp;&nbsp; GstCaps *videocap, *audiocap;<br>&nbsp;&nbsp;&nbsp; GstElement *pipeline, *gstrtpbin, *udpsrc1, *udpsrc2,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; *udpsink1, *udpsink2;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gst_init(&amp;argc, &amp;argv);<br>&nbsp;&nbsp;&nbsp; loop = g_main_loop_new(NULL, FALSE);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; pipeline = gst_pipeline_new("server");<br>&nbsp;&nbsp;&nbsp; gstrtpbin = gst_element_factory_make("gstrtpbin", "gst_rtpbin");<br>&nbsp;&nbsp;&nbsp; udpsrc1 = gst_element_factory_make("udpsrc", "udpsrc1");<br>&nbsp;&nbsp;&nbsp; udpsrc2 = gst_element_factory_make("udpsrc", "udpsrc2");<br>&nbsp;&nbsp;&nbsp; udpsink1 = gst_element_factory_make("udpsink", "udpsink1");<br>&nbsp;&nbsp;&nbsp; udpsink2 = gst_element_factory_make("udpsink", "udpsink2");<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (argc != 4) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; g_printerr("argument error");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -1;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));<br>&nbsp;&nbsp;&nbsp; gst_bus_add_watch(bus, bus_call, loop);<br>&nbsp;&nbsp;&nbsp; gst_object_unref(bus);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; videocap = gst_caps_new_simple("application/x-rtp", <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "media", G_TYPE_STRING, "video",<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "clock-rate", G_TYPE_LONG, 90000,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "encoding-name", G_TYPE_STRING, "H264", NULL);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; audiocap = gst_caps_new_simple("application/x-rtp",<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "media", G_TYPE_STRING, "audio",<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "clock-rate", G_TYPE_LONG, 8000,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "encoding-name", G_TYPE_STRING, "PCMA", NULL);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsrc1), "caps", videocap, NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsrc2), "caps", audiocap, NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsrc1), "port", (gint)atoi(argv[1]), NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsrc2), "port", (gint)atoi(argv[2]), NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsink1), "port", (gint)atoi(argv[1]), NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsink2), "port", (gint)atoi(argv[2]), NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsink1), "host", argv[3], NULL);<br>&nbsp;&nbsp;&nbsp; g_object_set(G_OBJECT(udpsink2), "host", argv[3], NULL);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gst_caps_unref(videocap);<br>&nbsp;&nbsp;&nbsp; gst_caps_unref(audiocap);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gst_bin_add_many(GST_BIN(pipeline), udpsrc1, udpsrc2, gstrtpbin, udpsink1, udpsink2, NULL);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; pad = gst_element_get_request_pad(gstrtpbin, "recv_rtp_sink_0");<br>&nbsp;&nbsp;&nbsp; gst_pad_link(gst_element_get_pad(udpsrc1, "src"), pad);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; pad = gst_element_get_request_pad(gstrtpbin, "recv_rtp_sink_1");<br>&nbsp;&nbsp;&nbsp; gst_pad_link(gst_element_get_pad(udpsrc2, "src"), pad);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; g_signal_connect(gstrtpbin, "pad-added", G_CALLBACK(on_pad_added), udpsink1);<br>&nbsp;&nbsp;&nbsp; g_signal_connect(gstrtpbin, "pad_added", G_CALLBACK(on_pad_added), udpsink2);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gst_element_set_state(pipeline, GST_STATE_PLAYING);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; g_print("Running...\n");<br>&nbsp;&nbsp;&nbsp; g_main_loop_run(loop);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Out of the main loop, clean up nicely */<br>&nbsp;&nbsp;&nbsp; g_print("Returned, stopping playback\n");<br>&nbsp;&nbsp;&nbsp; gst_element_set_state(pipeline, GST_STATE_NULL);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; g_print("Deleting pipeline\n");<br>&nbsp;&nbsp;&nbsp; gst_object_unref(GST_OBJECT(pipeline));<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br>*********************************************************************<br><font color="#f00000">when i run the server writed in c on my computer , Error: internal data flow error<br>when i run the server which is not writed in c , Error : internal streamer error clock problem. <br>additional debug info: gstbin.c(2240):gst_bin_do_latency_func() : failed to configure latency of 0:00:00:00000000</font><br>&nbsp;<br>can anybody help me ,thank you very much <br><br></div><br><!-- footer --><br><span title="neteasefooter"/><hr/>
<a href="http://512.mail.163.com/mailstamp/stamp/dz/activity.do?from=footer">穿越地震带 纪念汶川地震一周年</a>
</span>