У меня есть конвейер, который использует видеомиксер для отображения 10 видеопотоков rtp / h264 в двух рядах (пока что), который работает в основном так, как задумано.
Проблема в том, что один из потоков в настоящее время отсутствуетработает, или, что еще хуже, уходит (изменение файлов, проблемы с сетью и т. д.), затем видеомиксер аварийно завершает работу и конвейер останавливается или не выполняет предварительную подготовку вообще.
используемая мной команда запуска:
/usr/local/bin/gst-launch-1.0 -vv -e videomixer name=mix background=2 \
sink_0::alpha=1.0 \
sink_0::ypos=0 \
sink_0::xpos=0 \
sink_1::alpha=1.0 \
sink_1::ypos=80 \
sink_1::xpos=40 \
sink_2::alpha=1.0 \
sink_2::ypos=80 \
sink_2::xpos=410 \
sink_3::alpha=1.0 \
sink_3::ypos=80 \
sink_3::xpos=780 \
sink_4::alpha=1.0 \
sink_4::ypos=80 \
sink_4::xpos=1140 \
sink_5::alpha=1.0 \
sink_5::ypos=80 \
sink_5::xpos=1550 \
sink_6::alpha=1.0 \
sink_6::ypos=500 \
sink_6::xpos=40 \
sink_7::alpha=1.0 \
sink_7::ypos=500 \
sink_7::xpos=410 \
sink_8::alpha=1.0 \
sink_8::ypos=500 \
sink_8::xpos=780 \
sink_9::alpha=1.0 \
sink_9::ypos=500 \
sink_9::xpos=1140 \
sink_10::alpha=1.0 \
sink_10::ypos=500 \
sink_10::xpos=1550 \
sink_11::alpha=0.4 \
sink_11::ypos=935 \
sink_11::xpos=1440 \
sink_0::zorder=1 \
sink_1::zorder=3 \
sink_2::zorder=3 \
sink_3::zorder=4 \
sink_4::zorder=5 \
sink_5::zorder=6 \
sink_6::zorder=7 \
sink_7::zorder=8 \
sink_8::zorder=9 \
sink_9::zorder=10 \
sink_10::zorder=11 \
sink_11::zorder=12 \
! clockoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=top \
! timeoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=bottom \
! queue \
! nvh264enc preset=1 bitrate=1500 rc-mode=2 gop-size=10 \
! h264parse config-interval=-1 \
! mpegtsmux ! rtpmp2tpay pt=33 \
! udpsink host=239.255.42.61 port=5004 multicast-iface=10g-1 ttl=4 ttl-mc=4 \
multifilesrc location=/IMG/logo.jpg caps="image/jpeg,framerate=1/1" \
! jpegdec ! videoconvert ! videoscale \
! video/x-raw,width=1920,height=1080 \
! mix.sink_0 \
udpsrc multicast-group=239.255.42.60 address=239.255.42.60 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_1 \
udpsrc multicast-group=239.255.42.57 address=239.255.42.57 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_2 \
udpsrc multicast-group=239.255.42.62 address=239.255.42.62 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_3 \
udpsrc multicast-group=239.255.42.46 address=239.255.42.46 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_4 \
udpsrc multicast-group=239.255.42.59 address=239.255.42.59 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_5 \
udpsrc multicast-group=239.255.42.56 address=239.255.42.56 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_6 \
udpsrc multicast-group=239.255.42.57 address=239.255.42.57 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_7 \
udpsrc multicast-group=239.255.42.62 address=239.255.42.62 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_8 \
udpsrc multicast-group=239.255.42.46 address=239.255.42.46 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_9 \
udpsrc multicast-group=239.255.42.59 address=239.255.42.59 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
! video/x-raw,width=360,height=240 \
! mix.sink_10 \
videotestsrc pattern="snow" \
! video/x-raw, framerate=1/1, width=464, height=120 \
! mix.sink_11 \
Мой вопрос, возможно ли, чтобы udpsrc или видеомиксер игнорировали, когда поток недоступен, чтобы он продолжал показывать и смешивать остальные?
Я добрыйиз застрявших на данный момент, я попробовал несколько различных способов реализовать экран монтажа для мониторинга наших потоков (включая скрипт pygtk libvlc, который тоже работает, но имеет другие проблемы).Это видеомикс и ретрансляция с использованием gstreamer великолепны, потому что а) именно так мы делаем большинство других потоков в доме, и б) я могу легко просматривать весь монтаж на наших приемниках.
Я экспериментировал с использованиемGstreamer API от c.до сих пор мне удалось получить тот же монтаж с помощью команды gst_parse_launch (), но это не полный метод создания элементов, добавления их в корзину и связывания их (понятия, с которыми я новичок в той степени, в которойкод c идет).Версия gst_parse_launch () имеет ту же проблему остановки при сбое любого из источников.
Я пытался задавать вопросы в IRC-сети разработчиков, но, похоже, никогда не обращал на них внимания :(
Есть идеи?