<HTML>
<HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META content="OPENWEBMAIL" name=GENERATOR>
</HEAD>
<BODY bgColor=#ffffff>

<div>Hello ,</div>

<div>
<p>We have a custom board based on AM5728 SOC with omnivision 0v5640 
camera installed on it running linux SDK 6.03 provided by TI. We want to
 support maximum 4 party conference call using gstreamer. For POC the 
following was done:-</p>

<p>
<br />POC was done for three party conference call. Three custom boards were taken namely A, B and C.</p>

<p>On A, a gstreamer pipeline was run to open self camera feed to send 
it to both B and C. B and C were able to receive the feed by running 
receiving pipelines on each.
<br />Also, on B and C pipelines were run to send their respective camera feeds to A.</p>

<p>We want to display the feeds of both B and C at A. How can that be achieved?</p>

<p>The gstreamer pipelines used are as below:-</p>

<p>
<br /><code>######################</code>
<br /><code>Sender Pipeline at A</code>
<br /><code>######################</code></p>

<p><code>B=192.168.8.139 #(IP address of party B)</code>
<br /><code>C=192.168.8.140 #(IP address of party C)</code></p>

<p><code>A_BVidSendPort=5000</code>
<br /><code>A_BAudSendPort=5001</code>
<br /><code>A_CVidSendPort=5002</code>
<br /><code>A_CAudSendPort=5003</code></p>

<p>
<br /><code>gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=4 ! \</code>
<br /><code> 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! \</code>
<br /><code> vpe num-input-buffers=8 ! \</code>
<br /><code> queue ! ducatih264enc intra-interval=1 ! \</code>
<br /><code> h264parse ! \</code>
<br /><code> rtph264pay mtu=200 ! \</code>
<br /><code> multiudpsink clients=$B:$A_BVidSendPort,$C:$A_CVidSendPort alsasrc device='hw:0,0' ! \</code>
<br /><code> audioconvert ! \</code>
<br /><code> 'audio/x-raw,channels=1,depth=16,width=16,rate=16000,encoding-name=(string)L16' ! \</code>
<br /><code> rtpL16pay ! \</code>
<br /><code> multiudpsink clients=$B:$A_BAudSendPort,$C:$A_CAudSendPort sync=false</code></p>

<p />

<p><code>######################</code>
<br /><code>Receiver Pipeline at A</code>
<br /><code>######################</code></p>

<p><code>#TBD</code></p>

<p />

<p />

<p />

<p />

<p><code>#####################</code>
<br /><code>Sender Pipeline at B</code>
<br /><code>#####################</code></p>

<p><code>B=192.168.8.138 # (IP address of party A)</code>
<br /><code>A=192.168.8.139 # (IP address of party B)</code></p>

<p><code>A_BVidSendPort=5004</code>
<br /><code>A_BAudSendPort=5005</code></p>

<p />

<p>
<br /><code>gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=4 ! \</code>
<br /><code> 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! \</code>
<br /><code> vpe num-input-buffers=8 ! \</code>
<br /><code> queue ! ducatih264enc intra-interval=1 ! \</code>
<br /><code> h264parse ! \</code>
<br /><code> rtph264pay mtu=200 ! \</code>
<br /><code> udpsink host=$B port=$A_BVidSendPort alsasrc device='hw:0,0' ! \</code>
<br /><code> audioconvert ! \</code>
<br /><code> 'audio/x-raw,channels=1,depth=16,width=16,rate=16000,encoding-name=(string)L16' ! \</code>
<br /><code> rtpL16pay ! \</code>
<br /><code> udpsink host=$B port=$A_BAudSendPort sync=false</code></p>

<p>
<br /><code>########################</code>
<br /><code>#Receiver Pipeline at B</code>
<br /><code>########################</code></p>

<p><code>B_AVidSendPort=5000</code>
<br /><code>B_AAudSendPort=5001</code></p>

<p>
<br /><code>gst-launch-1.0 -v udpsrc port=$B_AVidSendPort ! \</code>
<br /><code> 'application/x-rtp,media=(string)video, clock-rate=(int)90000, payload=(int)96' ! \</code>
<br /><code> rtph264depay ! \</code>
<br /><code> h264parse ! \</code>
<br /><code> ducatih264dec ! \</code>
<br /><code> vpe ! \</code>
<br /><code> 'video/x-raw,format=(string)NV12, width=1280,height=1232' ! \</code>
<br /><code> videoscale sharpen=1 ! \</code>
<br /><code> kmssink sync=false \</code>
<br /><code> udpsrc port=$B_AAudSendPort ! \</code>
<br /><code> "application/x-rtp,media=(string)audio,clock-rate=(int)16000, width=16, height=16,\</code>
<br /><code> encoding-name=(string)L16,\</code>
<br /><code> encoding-params=(string)1, channels=(int)1, channel-positions=(int)1,\</code>
<br /><code> payload=(int)96" !\</code>
<br /><code> rtpL16depay ! audioconvert ! alsasink sync=false</code></p>

<p />

<p><code>#######################</code>
<br /><code>#Sender pipeline at C</code>
<br /><code>######################</code></p>

<p><code>B=192.168.8.138 # (IP address of party A)</code>
<br /><code>A=192.168.8.140 # (IP address of party C)</code></p>

<p><code>A_BVidSendPort=5006</code>
<br /><code>A_BAudSendPort=5007</code></p>

<p />

<p>
<br /><code>gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=4 ! \</code>
<br /><code> 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! \</code>
<br /><code> vpe num-input-buffers=8 ! \</code>
<br /><code> queue ! ducatih264enc intra-interval=1 ! \</code>
<br /><code> h264parse ! \</code>
<br /><code> rtph264pay mtu=200 ! \</code>
<br /><code> udpsink host=$B port=$A_BVidSendPort alsasrc device='hw:0,0' ! \</code>
<br /><code> audioconvert ! \</code>
<br /><code> 'audio/x-raw,channels=1,depth=16,width=16,rate=16000,encoding-name=(string)L16' ! \</code>
<br /><code> rtpL16pay ! \</code>
<br /><code> udpsink host=$B port=$A_BAudSendPort sync=false</code></p>

<p />

<p><code>########################</code>
<br /><code>#Receiver pipeline at C</code>
<br /><code>#######################</code></p>

<p><code>B_AVidSendPort=5002</code>
<br /><code>B_AAudSendPort=5003</code></p>

<p />

<p><code>gst-launch-1.0 -v udpsrc port=$B_AVidSendPort ! \</code>
<br /><code> 'application/x-rtp,media=(string)video, clock-rate=(int)90000, payload=(int)96' ! \</code>
<br /><code> rtph264depay ! \</code>
<br /><code> h264parse ! \</code>
<br /><code> ducatih264dec ! \</code>
<br /><code> vpe ! \</code>
<br /><code> 'video/x-raw,format=(string)NV12, width=1280,height=1232' ! \</code>
<br /><code> videoscale sharpen=1 ! \</code>
<br /><code> kmssink sync=false \</code>
<br /><code> udpsrc port=$B_AAudSendPort ! \</code>
<br /><code> "application/x-rtp,media=(string)audio,clock-rate=(int)16000, width=16, height=16,\</code>
<br /><code> encoding-name=(string)L16,\</code>
<br /><code> encoding-params=(string)1, channels=(int)1, channel-positions=(int)1,\</code>
<br /><code> payload=(int)96" !\</code>
<br /><code> rtpL16depay ! audioconvert ! alsasink sync=false</code></p>

<br />This is the POC for 3party call only. Since there are multiple 
piplelines already in 3 party call, 4 party call will have furthermore 
pipelines added to these. 
<br />Wouldn't it affect the system performance as the number of pipelines are increased?
<br />Also can the sender and receiver pipelines be improved using muxing?</div>

<div>
<br /></div>
<font size="2">Thanks and Regards, 

<br />
Akshi Malhotra 

<br />
<br />
</font>

</BODY>
</HTML>