Support Multiple pipelines in gstreamer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Hello ,

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:-


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

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.
Also, on B and C pipelines were run to send their respective camera feeds to A.

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

The gstreamer pipelines used are as below:-


######################
Sender Pipeline at A
######################

B=192.168.8.139 #(IP address of party B)
C=192.168.8.140 #(IP address of party C)

A_BVidSendPort=5000
A_BAudSendPort=5001
A_CVidSendPort=5002
A_CAudSendPort=5003


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

######################
Receiver Pipeline at A
######################

#TBD

#####################
Sender Pipeline at B
#####################

B=192.168.8.138 # (IP address of party A)
A=192.168.8.139 # (IP address of party B)

A_BVidSendPort=5004
A_BAudSendPort=5005


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


########################
#Receiver Pipeline at B
########################

B_AVidSendPort=5000
B_AAudSendPort=5001


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

#######################
#Sender pipeline at C
######################

B=192.168.8.138 # (IP address of party A)
A=192.168.8.140 # (IP address of party C)

A_BVidSendPort=5006
A_BAudSendPort=5007


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

########################
#Receiver pipeline at C
#######################

B_AVidSendPort=5002
B_AAudSendPort=5003

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


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.
Wouldn't it affect the system performance as the number of pipelines are increased?
Also can the sender and receiver pipelines be improved using muxing?

Thanks and Regards,
Akshi Malhotra


[Index of Archives]     [Linux Embedded]     [Linux ARM Kernel]     [Linux for ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux Media]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux