<div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Hi<br><br></div>Would it be possible with GStreamer to playout mutiple RTP sources synchronized if the playout for each source takes place in its own process?<br><br></div>Assume you have multiple independent systems with NTP each running the following pipeline:<br><br><div style="margin-left:40px">gst-launch-1.0 -v -e \<br>    uvch264src SOME_SETTINGS ! h264parse ! queue ! \<br>         mpegtsmux name=muxer ! queue ! rtpmp2tpay ! \<br>        .send_rtp_sink rtpsession name=session .send_rtp_src ! \<br>        udpsink host=$host port=$rtp_port session.send_rtcp_src !\<br>        udpsink host=$host port=$rtcp_port sync=false async=false \<br>    alsasrc device=$alsadev do-timestamp=true ! \<br>    audio/x-raw,rate=44100,channels=1 ! \<br>    audioconvert ! queue ! avenc_aac compliance=-2 ! aacparse ! queue ! muxer.<br></div><br></div>On the server side we need something like this:<br><br><div style="margin-left:40px">caps='application/x-rtp,media=video,clock-rate=90000,encoding-name=MP2T,payload=33'<br></div><br><div style="margin-left:40px">gst-launch-1.0 -v -e rtpbin name=rtpbin \<br>    udpsrc port=$rtp_port caps="caps" ! \<br>    rtpbin.recv_rtp_sink_0 rtpbin. ! \<br>    decodebin name=decoder ! queue ! \<br>    SOMEVIDEOSINK sync=true decoder. ! queue ! \<br>    SOMEAUDIOSINK sync=true udpsrc port=$rtcp_port ! \<br>    rtpbin.recv_rtcp_sink_0<br></div></div><br></div>This ought to work. The server side should receive RTCP sender reports with NTP wallclock to RTP timestamp mapping. One can hope decodebin gets this information and use it when demuxing the TS, decode the two elemntary streams and display the decoded images and plays the audio.<br><br></div>BUT on the receiving side we in this setups receive multiple streams and run several processes with the above pipeline. How does one go about synchronizing this?<br><br></div>I could try to run ALL RTP streams and all RTCP sender reports into same rtpbin and as such run one single pipeline for all receiving streams. Would that work?<br><br></div>However such a single pipeline solution would have a problem. If not all sources are initially sending streams, I suspect the big pipeline with all the streams would never go from PREROLL to PLAYING because some of the pipeline elements would miss data for the streams not currently running. And it may or may not stop, if some of the pipeline elements later miss data. Is this a correct assumption?<br><br></div>Best regards<br></div>Peter<br><div><div><div><div><br><div><div>   <br><div><div><br></div></div></div></div></div></div></div></div></div>