3 Stimmen

Gstreamer: Anhalten/Fortsetzen von Video in RTP-Streams

Ich konstruiere eine Gstreamer-Pipeline, die zwei RTP-Streams von einer vernetzten Quelle empfängt:

  1. ILBC-Audio-Stream + entsprechender RTCP-Stream
  2. 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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X