Ich konstruiere eine Gstreamer-Pipeline, die zwei RTP-Streams von einer vernetzten Quelle empfängt:
- ILBC-Audio-Stream + entsprechender RTCP-Stream
- H263 Video-Stream + entsprechender RTCP-Stream
Alles ist in einer gstreamer-Pipeline zusammengefasst, so dass das RTCP von beiden Streams zur Synchronisierung von Audio/Video verwendet wird. Bisher habe ich mit diesem (mit gst-launch für Prototyping) kommen:
gst-launch -vvv gstrtpbin name=rtpbin
udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-2000" port=40000 ! rtpbin.recv_rtp_sink_0
rtpbin. ! rtph263pdepay ! ffdec_h263 ! xvimagesink
udpsrc port=40001 ! rtpbin.recv_rtcp_sink_0
rtpbin.send_rtcp_src_0 ! udpsink port=40002 sync=false async=false
udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)PCMU,encoding-params=(string)1,octet-align=(string)1" port=60000 rtpbin.recv_rtp_sink_1
rtpbin. ! rtppcmudepay ! autoaudiosink
udpsrc port=60001 ! rtpbin.recv_rtcp_sink_1
rtpbin.send_rtcp_src_1 ! udpsink port=60002 sync=false async=false
Diese Pipeline funktioniert gut, wenn die vernetzte Quelle zu Beginn sowohl Video als auch Audio sendet. Wenn der Videostream später angehalten wird, gibt gstreamer weiterhin Audio wieder und beginnt sogar mit der Wiedergabe des Videos, wenn die Netzwerkquelle den Videostream wieder aufnimmt.
Mein Problem ist jedoch, dass, wenn die vernetzte Quelle nur mit einem Audio-Stream beginnt (Video könnte später hinzugefügt werden), die Pipeline scheint zu pausieren/einfrieren, bis der Video-Stream auch startet.
Da Video optional ist (und kann hinzugefügt/entfernt werden nach Belieben durch den Benutzer) in meiner Anwendung, gibt es irgendeine Möglichkeit, die ich zum Beispiel eine 'videotestsrc', die eine Art von Fallback-Videodaten, um die Pipeline laufen zu halten, wenn es keine vernetzten Videodaten bereitstellen wird einhängen kann?
Ich habe versucht, mit "videotestsrc" und "videomixer" zu experimentieren, aber ich glaube, für den Mixer müssen immer noch beide Streams aktiv sein. Jede Rückmeldung ist sehr willkommen!