Есть две проблемы.
1) Основная проблема заключается в том, что "videomixer" имеет только одну панель управления src.Вы подключаете его к двум колодкам.-
gst-launch-1.0 -e \
videomixer name=mix \
sink_0::xpos=0 sink_0::ypos=0 sink_0::alpha=0\
sink_1::xpos=0 sink_1::ypos=0 \
sink_2::xpos=200 sink_2::ypos=0 \
sink_3::xpos=0 sink_3::ypos=100 \
sink_4::xpos=200 sink_4::ypos=100 \
! xvimagesink
При этом вы подключаете видеомиксер src_pad к приемной площадке Sixvimagesink
И снова в конце вы пытаетесь подключить видеомиксер src_ к rtmpsink, используя очередь и другие элементы.
Так что вам нужно удалить одно из соединений.
Если вы не хотите подключаться к xvimagesink, просто удалите "! Xvimagesink"
Если вы не хотитеподключитесь к rtmpsink, удалите часть «mix! queue! videoconvert ...».
2) Если вы хотите сохранить подключение к очереди, возникает следующая проблема.Вы подключаете mix.sink_4 к mix.src.
... ! mix.sink_4 \
! mix. ! queue ! videoconvert ! ...
Удалите первое "!"а также "."в последней строке.
... ! mix.sink_4 \
mix ! queue ! videoconvert ! ...
Тогда это не должно давать синтаксическую ошибку.
РЕДАКТИРОВАТЬ 1
Я думаю, вы снова допустили ошибку.Вы подключаете src mix к mix.sink_0.Я исправил это.
gst-launch-1.0 -e \
videomixer name=mix \
sink_0::xpos=0 sink_0::ypos=0 sink_0::alpha=0\
sink_1::xpos=0 sink_1::ypos=0 \
sink_2::xpos=200 sink_2::ypos=0 \
sink_3::xpos=0 sink_3::ypos=100 \
sink_4::xpos=200 sink_4::ypos=100 \
\ /* You should not add "! .mix.sink_0" here. */
rtmpsrc location='rtmp://streaming.example.com:1935/209147924'\
! decodebin ! videoconvert ! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_1 \
rtmpsrc location='rtmp://streaming.example.com:1935/209147925'\
! decodebin ! videoconvert ! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_2 \
rtmpsrc location='rtmp://streaming.example.com:1935/209147926'\
! decodebin ! videoconvert ! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_3 \
rtmpsrc location='rtmp://streaming.example.com:1935/209147927'\
! decodebin ! videoconvert ! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_4 \
mix ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://streaming.example.com:1935/test'
Позвольте мне дать некоторую информацию об использовании "name =" здесь.Вы можете назвать элемент в конвейере gstreamer и использовать его для построения конвейера.Это в основном полезно в сложных трубопроводах.позвольте мне показать его использование с простым конвейером.
Предположим, что следующий конвейер является обязательным:
srcelem ! elem1 ! elem2 ! elem3 ! sinkelem
Это можно записать, как показано ниже.
elem2 name=named_elem \ /* Naming elem2 */
named_elem ! elem3 ! sinkelem \ /* Connecting elem2 to downstream pipeline part. Note that there is no "!" before "named_elem" */
srcelem ! elem1 ! named_elem /* Connecting elem2 to upstream pipeline part. Note that there is no "!" after "named_elem" */
Есливы читаете его внимательно, он создает тот же конвейер, который упоминался ранее.