http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-states.txt?h=BRANCH-RELEASE-0_10_19
даю конвейер gstreamer, который получает два потока RTP из сетевого источника:
Аудиопоток ILBC + соответствующий поток RTCPH263 Видеопоток + соответствующий поток RTCPВсе помещается в один конвейер gstreamer, поэтому он будет использовать RTCP из обоих потоков для синхронизации аудио / видео. До сих пор я придумал это (используя gst-launch для создания прототипов):
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
Этот конвейер работает хорошо, если сетевой источник начинает с отправки как видео, так и аудио. Если видеопоток будет приостановлен позже, gstreamer все равно будет воспроизводить звук и даже начнет воспроизводить видео, когда сетевой источник возобновит видеопоток.
Моя проблема, однако, в том, что если сетевой источник запускается только с аудиопотоком (видео может быть добавлено позже), конвейер, кажется, приостанавливается / останавливается до тех пор, пока видеопоток не запустится.
Так как видео является необязательным (и может быть добавлено / удалено пользователем по желанию) в моем приложении, есть ли способ, например, подключить «videotestsrc», который предоставит какие-то резервные видеоданные для поддержания работы конвейера, когда нет сетевых видеоданных?
Я попытался поэкспериментировать с «видеотестами» и тем, что называется «видеомиксер», но я думаю, что микшер все еще требует, чтобы оба потока были живы. Любая обратная связь с благодарностью!