Я запускаю следующий код
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 \ 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'
Спасибо. Решили проблему с мозаикой. Это рабочая версия.
Есть две проблемы.
1) Основная проблема в том, что у "видеомикшера" только одна панель 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 of 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" */
Если вы внимательно его прочитаете, он строит тот же конвейер, о котором упоминалось ранее.
Синтаксическая ошибка отсутствует. Появляется другое сообщение об ошибке. Подскажите пожалуйста, в чем может быть проблема? WARNING: erroneous pipeline: could not link mix to queue0
Примеров мозаики с rtmp в сети я не нашел.
@ user2306100 Есть еще проблемы. Отредактировал свой ответ.
без "." пишет WARNING: erroneous pipeline: no element "mix"
Я редактировал код в вопросе. Новая ошибка. WARNING: erroneous pipeline: no element "mix"
Где может быть ошибка?
Спасибо. Работал с "." ! mix.sink_4 \ mix. ! queue ! videoconvert
Я думал, что микширую звук с потоками. Подскажите пожалуйста, как сделать звук из rtmp в мозаике?
Если ответ сработал, вы принимаете ответ и закрываете вопрос. НЕ РЕДАКТИРУЙТЕ ВОПРОС, так как он будет полезен другим, столкнувшимся с подобной проблемой. Если у вас есть еще вопрос, откройте новый. Я бы сказал, что вы повторно отредактируете вопрос и поместите проблемный конвейер, который вы разместили ранее.
создал новый вопрос "Добавить звук в мозаику GStreamer" ссылка
ошибка, когда я добавляю последнюю строку