<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE>
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
BODY {
        LINE-HEIGHT: 1.5; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt
}
</STYLE>

<META name=GENERATOR content="MSHTML 9.00.8112.16457"></HEAD>
<BODY style="MARGIN: 10px">
<DIV><!--StartFragment -->
<DIV>the code like this:</DIV>
<DIV>     </DIV>
<DIV 
style="TEXT-INDENT: 2em">       srcpad = gst_element_get_static_pad (udprecv_video[i], "src");<BR>               sinkpad1 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_0");<BR>            lres = gst_pad_link (srcpad, sinkpad1);<BR>            g_assert (lres == GST_PAD_LINK_OK);<BR>            gst_object_unref (srcpad);<BR><BR>            srcpad = gst_element_get_static_pad (udprecv_audio[i], "src");<BR>            sinkpad2 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_1");<BR>            lres = gst_pad_link (srcpad, sinkpad2);<BR>            g_assert (lres == GST_PAD_LINK_OK);<BR>            gst_object_unref (srcpad);<BR></DIV>
<DIV>when I add first one's audio/video, it's OK </DIV>
<DIV>but when I add second one's audio/video, it's failed, we cant receive the 
second one's stream</DIV>
<DIV> </DIV>
<DIV>thank you very much</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>PS:the full code</DIV>
<DIV> </DIV>
<DIV>
<DIV>gint</DIV>
<DIV>main (int   argc, char *argv[])</DIV>
<DIV>{</DIV>
<DIV>    GstElement *pipeline;</DIV>
<DIV>    GstElement *udprecv_video[MAX_NUM];</DIV>
<DIV>    GstElement *udprecv_audio[MAX_NUM];</DIV>
<DIV>    GstElement *rtpbin;</DIV>
<DIV>    GstElement *multiudpsend_video[MAX_NUM];</DIV>
<DIV>    GstElement *multiudpsend_audio[MAX_NUM];</DIV>
<DIV>    GstElement *sinkpad1, *sinkpad2, *sinkpad3, *sinkpad4;</DIV>
<DIV> </DIV>
<DIV>    GstCaps *caps;</DIV>
<DIV> </DIV>
<DIV>    GstPad *srcpad ;</DIV>
<DIV>    GstPadLinkReturn lres;</DIV>
<DIV>    GMainLoop *loop;</DIV>
<DIV> </DIV>
<DIV>    gst_init (&argc, &argv);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>    loop = g_main_loop_new (NULL, FALSE);</DIV>
<DIV>    rtpbin = gst_element_factory_make ("rtpbin", "rtpbin0");</DIV>
<DIV>    pipeline = gst_pipeline_new ("player0");</DIV>
<DIV>    g_object_set (rtpbin, "do-retransmission", 1, NULL);</DIV>
<DIV>    gst_bin_add(GST_BIN (pipeline), rtpbin);</DIV>
<DIV>    int i = 0;</DIV>
<DIV> </DIV>
<DIV>    //two user</DIV>
<DIV>    for(i=0; i<2; i++)</DIV>
<DIV>    {</DIV>
<DIV>        if(i==0)</DIV>
<DIV>        {</DIV>
<DIV>            //first 
user,two udpsrc,two output</DIV>
<DIV>            //pipeline = gst_pipeline_new ("player0");</DIV>
<DIV>            udprecv_video[i] = gst_element_factory_make ("udpsrc", "udprecv_video0");</DIV>
<DIV>            udprecv_audio[i] = gst_element_factory_make ("udpsrc", "udprecv_audio0");</DIV>
<DIV>            multiudpsend_video[i] = gst_element_factory_make ("multiudpsink", "multiudpsend_video0");</DIV>
<DIV>            multiudpsend_audio[i] = gst_element_factory_make ("multiudpsink", "multiudpsend_audio0");</DIV>
<DIV>            //rtpbin[i] = gst_element_factory_make ("rtpbin", "rtpbin0");</DIV>
<DIV>            //g_object_set (rtpbin[i], "do-retransmission", 1, NULL);</DIV>
<DIV>        }</DIV>
<DIV>        else if(i==1)</DIV>
<DIV>        {</DIV>
<DIV>            //second,two 
udpsrc,two output</DIV>
<DIV>            //pipeline[i] = gst_pipeline_new ("player1");</DIV>
<DIV>            udprecv_video[i] = gst_element_factory_make ("udpsrc", "udprecv_video1");</DIV>
<DIV>            udprecv_audio[i] = gst_element_factory_make ("udpsrc", "udprecv_audio1");</DIV>
<DIV>            multiudpsend_video[i] = gst_element_factory_make ("multiudpsink", "multiudpsend_video1");</DIV>
<DIV>            multiudpsend_audio[i] = gst_element_factory_make ("multiudpsink", "multiudpsend_audio1");</DIV>
<DIV>            //rtpbin[i] = gst_element_factory_make ("rtpbin", "rtpbin1");</DIV>
<DIV>            //g_object_set (rtpbin[i], "do-retransmission", 1, NULL);</DIV>
<DIV>        }</DIV>
<DIV> </DIV>
<DIV>        if (!pipeline || !udprecv_video[i] || !udprecv_audio[i] || !multiudpsend_video[i] || !multiudpsend_audio[i]) {</DIV>
<DIV>            g_print ("i[%d] One element could not be created. Exiting.\n", i);</DIV>
<DIV>            return 1;</DIV>
<DIV>        }</DIV>
<DIV> </DIV>
<DIV>        g_object_set (udprecv_video[i], "port", BASE_PORT+i*1000, NULL);</DIV>
<DIV>        caps = gst_caps_from_string ("application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264");</DIV>
<DIV>        g_object_set (udprecv_video[i], "caps", caps, NULL);</DIV>
<DIV>        gst_caps_unref (caps);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>        g_object_set (udprecv_audio[i], "port", BASE_PORT+2+i*1000, NULL);</DIV>
<DIV>        caps = gst_caps_from_string ("application/x-rtp,media=(string)audio,clock-rate=(int)44100,encoding-name=(string)aac");</DIV>
<DIV>        g_object_set (udprecv_audio[i], "caps", caps, NULL);</DIV>
<DIV>        gst_caps_unref (caps);</DIV>
<DIV> </DIV>
<DIV>        //gst_bin_add(GST_BIN (pipeline), rtpbin[i]);</DIV>
<DIV>        gst_bin_add(GST_BIN (pipeline), udprecv_video[i]);</DIV>
<DIV>        gst_bin_add(GST_BIN (pipeline), udprecv_audio[i]);</DIV>
<DIV>        gst_bin_add(GST_BIN (pipeline), multiudpsend_video[i]);</DIV>
<DIV>        gst_bin_add(GST_BIN (pipeline), multiudpsend_audio[i]);</DIV>
<DIV> </DIV>
<DIV>        if(i==0)</DIV>
<DIV>        {</DIV>
<DIV>            //link 
first one's src  and sink</DIV>
<DIV>            srcpad = gst_element_get_static_pad (udprecv_video[i], "src");</DIV>
<DIV>            //sinkpad = gst_element_get_request_pad (rtpbin[i], "recv_rtp_sink_0");</DIV>
<DIV>            sinkpad1 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_0");</DIV>
<DIV>            lres = gst_pad_link (srcpad, sinkpad1);</DIV>
<DIV>            g_assert (lres == GST_PAD_LINK_OK);</DIV>
<DIV>            gst_object_unref (srcpad);</DIV>
<DIV> </DIV>
<DIV>            srcpad = gst_element_get_static_pad (udprecv_audio[i], "src");</DIV>
<DIV>            //sinkpad = gst_element_get_request_pad (rtpbin[i], "recv_rtp_sink_1");</DIV>
<DIV>            sinkpad2 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_1");</DIV>
<DIV>            lres = gst_pad_link (srcpad, sinkpad2);</DIV>
<DIV>            g_assert (lres == GST_PAD_LINK_OK);</DIV>
<DIV>            gst_object_unref (srcpad);</DIV>
<DIV> </DIV>
<DIV>            //建立动态连接,有流来就收,然后分发</DIV>
<DIV>            setup_dynamic_link1 (rtpbin, gst_element_get_static_pad (multiudpsend_video[i],</DIV>
<DIV>                  "sink"),0,12345,96);</DIV>
<DIV>            setup_dynamic_link1 (rtpbin, gst_element_get_static_pad (multiudpsend_audio[i],</DIV>
<DIV>                  "sink"),1,54321,97);</DIV>
<DIV>        }</DIV>
<DIV>        else if(i==1)</DIV>
<DIV>        {</DIV>
<DIV>            //link 
second one's src  and sink</DIV>
<DIV>            g_print ("zx i[%d] 11.\n", i);</DIV>
<DIV>            srcpad = gst_element_get_static_pad (udprecv_video[i], "src");</DIV>
<DIV>            g_print ("zx srcpad = gst_element_get_static_pad (udprecv_video[i].\n", i);</DIV>
<DIV>            //sinkpad = gst_element_get_request_pad (rtpbin[i], "recv_rtp_sink_2");</DIV>
<DIV>            sinkpad3 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_2");</DIV>
<DIV>            g_print ("zx i[%d] gst_pad_link.\n", i);</DIV>
<DIV>            lres = gst_pad_link (srcpad, sinkpad3);</DIV>
<DIV>            g_assert (lres == GST_PAD_LINK_OK);</DIV>
<DIV>            gst_object_unref (srcpad);</DIV>
<DIV> </DIV>
<DIV>            g_print ("zx i[%d] 22.\n", i);</DIV>
<DIV>            srcpad = gst_element_get_static_pad (udprecv_audio[i], "src");</DIV>
<DIV>            //sinkpad = gst_element_get_request_pad (rtpbin[i], "recv_rtp_sink_3");</DIV>
<DIV>            sinkpad4 = gst_element_get_request_pad (rtpbin, "recv_rtp_sink_3");</DIV>
<DIV>            lres = gst_pad_link (srcpad, sinkpad4);</DIV>
<DIV>            g_assert (lres == GST_PAD_LINK_OK);</DIV>
<DIV>            gst_object_unref (srcpad);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>            setup_dynamic_link1 (rtpbin, gst_element_get_static_pad (multiudpsend_video[i],</DIV>
<DIV>                  "sink"),2,12345,96);</DIV>
<DIV>            setup_dynamic_link1 (rtpbin, gst_element_get_static_pad (multiudpsend_audio[i],</DIV>
<DIV>                  "sink"),3,54321,97);</DIV>
<DIV>        }</DIV>
<DIV> </DIV>
<DIV>        g_signal_connect(multiudpsend_video[i],"add",</DIV>
<DIV>            G_CALLBACK(client_added_multiudpsink),NULL);</DIV>
<DIV>        g_signal_connect(multiudpsend_audio[i],"add",</DIV>
<DIV>            G_CALLBACK(client_added_multiudpsink),NULL);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>        //g_thread_create(test1_thread1,multiudpsend_video,TRUE,NULL);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>        g_signal_emit_by_name(multiudpsend_video[i],"add","192.168.6.209",SEND_BASE_PORT+i*1000,NULL);</DIV>
<DIV>        //g_signal_emit_by_name(multiudpsend_video,"add","192.168.6.63",10002,NULL);</DIV>
<DIV>        //g_signal_emit_by_name(multiudpsend_video,"add","192.168.6.63",10004,NULL);</DIV>
<DIV> </DIV>
<DIV>        g_signal_emit_by_name(multiudpsend_audio[i],"add","192.168.6.209",SEND_BASE_PORT+2+i*1000,NULL);</DIV>
<DIV>    }</DIV>
<DIV>    /* Set the pipeline to "playing" state*/</DIV>
<DIV> </DIV>
<DIV>    g_print ("Now playing: %s\n", argv[1]);</DIV>
<DIV>    gst_element_set_state (pipeline, GST_STATE_PLAYING);</DIV>
<DIV>    /* Iterate */</DIV>
<DIV>    g_print ("Running...\n");</DIV>
<DIV>    g_main_loop_run (loop);</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>    /* Out of the main loop, clean up nicely */</DIV>
<DIV>    g_print ("Returned, stopping playback\n");</DIV>
<DIV>    gst_element_set_state (pipeline, GST_STATE_NULL);</DIV>
<DIV> </DIV>
<DIV>    g_print ("Deleting pipeline\n");</DIV>
<DIV>    gst_object_unref (GST_OBJECT (pipeline));</DIV>
<DIV>    g_main_loop_unref (loop);</DIV>
<DIV> </DIV>
<DIV>    return 0;</DIV>
<DIV>}</DIV></DIV>
<DIV><BR> </DIV></DIV>
<DIV> </DIV>
<DIV> </DIV>
<HR style="WIDTH: 210px; HEIGHT: 1px" align=left color=#b5c4df SIZE=1>

<DIV><SPAN>
<DIV><SPAN 
style="FONT-STYLE: italic; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal"></SPAN> </DIV>
<DIV><SPAN 
style="FONT-STYLE: italic; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal">王振中</SPAN></DIV>
<DIV><SPAN 
style="FONT-STYLE: italic; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal"></SPAN> </DIV>
<DIV><SPAN 
style="FONT-STYLE: italic; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal"></SPAN> </DIV>
<DIV><SPAN 
style="FONT-STYLE: italic; FONT-FAMILY: 微软雅黑; COLOR: #000000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal"></SPAN> </DIV></SPAN></DIV></BODY></HTML>