pipeline diagram does not match Gstreamer commands

charleslaub at sbcglobal.net charleslaub at sbcglobal.net
Mon Oct 12 15:20:11 UTC 2020


This is a duplicate post, originally posted in gstreamer-bugs, but that list
seems to be dormant so I am posting this issue here.

 

I have a project using Gstreamer that sends stereo audio to clients located
on two loudspekers, where the audio is rendered and played back. I am using
rtpbin to implement synchronized streaming with NTP running on all machines.
The pipeline is running without errors and seems to work properly (speakers
are producing sound, etc).

 

I recently generated a pipeline diagram on the sender/server side of the
system. But it does not seem to match up with the Gstreamer commands that I
am running. 

 

My sender/server side commands are:

 

rtpbin name=server_rtpbin rtp-profile=avpf ntp-time-source=ntp  

alsasrc device='hifiberry_capture' !
audio/x-raw,rate=48000,format=S32LE,channels=2 ! queue ! audioconvert !
audio/x-raw,format=F32LE ! deinterleave name=input   

input.src_0 ! tee name=input_ch0   

input.src_1 ! tee name=input_ch1    

audiointerleave name=client0_stream latency=100000000 ! audioconvert !
audioresample quality=10 ! audio/x-raw,rate=48000,format=S24LE !
audioconvert ! rtpL24pay ! server_rtpbin.send_rtp_sink_0 

server_rtpbin.send_rtp_src_0 ! udpsink host=192.168.100.101 port=32768  

server_rtpbin.send_rtcp_src_0 ! udpsink host=192.168.100.101 port=32769
sync=false async=false  

udpsrc port=32768 ! server_rtpbin.recv_rtcp_sink_0    

input_ch0. ! queue ! client0_stream.sink_0   

input_ch1. ! queue ! client0_stream.sink_1    

audiointerleave name=client1_stream latency=100000000 ! audioconvert !
audioresample quality=10 ! audio/x-raw,rate=48000,format=S24LE !
audioconvert ! rtpL24pay ! server_rtpbin.send_rtp_sink_1 

server_rtpbin.send_rtp_src_1 ! udpsink host=192.168.100.102 port=32768  

server_rtpbin.send_rtcp_src_1 ! udpsink host=192.168.100.102 port=32769
sync=false async=false  

udpsrc port=32769 ! server_rtpbin.recv_rtcp_sink_1    

input_ch0. ! queue ! client1_stream.sink_0            

input_ch1. ! queue ! client1_stream.sink_1

 

The pipeline diagram generated from these commands is attached.

 

Up to the point where the input reaches the GstDeinterleave element
everything looks correct. Then there is only one GstTee element (input_ch0)
, but my pipeline commands request TWO of them (input_ch0 and input_ch1).
Both input channels are supposed to be sent to both of the clients. But if
you look at the GstAudioInterleave elements in the diagram, one has two
channels and the other one has only one channel. This is not what the
Gstreamer commands are requesting. So, why is this? I suspect a bug.

 

I cannot find an error with my Gstreamer pipeline commands, so I think the
error might be either with the generation of the pipeline diagram OR
Gstreamer has an internal error in how it is building the actual pipeline
from my commands and the pipeline diagram is revealing the error.

 

Thanks for your help with this. 

 

-Charlie

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201012/4729967f/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: server_pipeline.png
Type: image/png
Size: 838545 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201012/4729967f/attachment-0001.png>


More information about the gstreamer-devel mailing list