How to gurantee lip sync in the multicasting mode

Nathan zjustc at
Wed Oct 3 07:23:22 PDT 2012


I am also little bit confused by the way of a/v syn of RTP/RTCP of
In our usecase, one tx will send a/v data to multiple clients using the
multicasting mode.
I created the code following the gstreamer's rtpbin example, and  found when
there is only one client, the lip sync is ok.

 However, when there is more than one client, all the clients starting to
lose the lip sync. 
Here is the way I use the gstreamer: 
Tx side:

	g_object_set(G_OBJECT(app->video_rtpsink),  "host",contents.new_mcaddr,
"port", VIDEO_RTPSINK_PORT, "sync",FALSE,"async",FALSE
	g_object_set(G_OBJECT(app->audio_rtpsink),  "host",contents.new_mcaddr,
"port", AUDIO_RTPSINK_PORT, "sync",FALSE,"async",FALSE
	g_object_set(G_OBJECT(app->video_rtcpsink), "host",contents.new_mcaddr,
"port", VIDEO_RTCPSINK_PORT,"sync",FALSE,"async",FALSE
	g_object_set(G_OBJECT(app->audio_rtcpsink), "host",contents.new_mcaddr,
"port", AUDIO_RTCPSINK_PORT,"sync",FALSE,"async",FALSE
	g_object_set(G_OBJECT(app->video_rtcpsrc), "multicast-group",
contents.new_mcaddr, "port", VIDEO_RTCPSRC_PORT, NULL);
	g_object_set(G_OBJECT(app->audio_rtcpsrc), "multicast-group",
contents.new_mcaddr, "port", AUDIO_RTCPSRC_PORT, NULL);

Rx side:
	g_object_set(G_OBJECT(vsource), "timeout", G_GUINT64_CONSTANT(5000000),
"port", params.vrtp_port, "caps", video_caps, NULL);
	g_object_set(G_OBJECT(vsource), "multicast-group", params.mcaddr,
"auto-multicast", TRUE, NULL);
	g_object_set(G_OBJECT(vrtcpsrc), "port", VIDEO_RTCP_SRC_PORT,
"multicast-group", params.mcaddr, "auto-multicast", TRUE, NULL);
	g_object_set(G_OBJECT(vrtcpsink), "port", VIDEO_RTCP_SINK_PORT, "host",
params.mcaddr, "auto-multicast", TRUE,
			"sync", FALSE, "async", FALSE, NULL);

	g_object_set(G_OBJECT(asource), "port", params.artp_port, "caps",
audio_caps, NULL);
	g_object_set(G_OBJECT(asource), "multicast-group", params.mcaddr,
"auto-multicast", TRUE, NULL);
	g_object_set(G_OBJECT(artcpsrc), "port", AUDIO_RTCP_SRC_PORT,
"multicast-group", params.mcaddr, "auto-multicast", TRUE, NULL);
	g_object_set(G_OBJECT(artcpsink), "port", AUDIO_RTCP_SINK_PORT, "host",
params.mcaddr, "auto-multicast", TRUE,
			"sync", FALSE, "async", FALSE, NULL);
	g_object_set(G_OBJECT(asink), "sync", FALSE, NULL);

Did I do anything wrong here? What is the right way of seting the gstreamer
for the 1 to M mode?



View this message in context:
Sent from the GStreamer-devel mailing list archive at

More information about the gstreamer-devel mailing list