Получение потоков rtmp в GStreamer, создание мозаики и отправка полученного rtmp

Я запускаю следующий код

     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'

Спасибо. Решили проблему с мозаикой. Это рабочая версия.

ошибка, когда я добавляю последнюю строку

user2306100 26.09.2018 14:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
1 001
1

Ответы 1

Есть две проблемы.

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 27.09.2018 08:34

@ user2306100 Есть еще проблемы. Отредактировал свой ответ.

MayurK 27.09.2018 08:52

без "." пишет WARNING: erroneous pipeline: no element "mix"

user2306100 27.09.2018 08:53

Я редактировал код в вопросе. Новая ошибка. WARNING: erroneous pipeline: no element "mix" Где может быть ошибка?

user2306100 27.09.2018 11:05

Спасибо. Работал с "." ! mix.sink_4 \ mix. ! queue ! videoconvert Я думал, что микширую звук с потоками. Подскажите пожалуйста, как сделать звук из rtmp в мозаике?

user2306100 27.09.2018 12:00

Если ответ сработал, вы принимаете ответ и закрываете вопрос. НЕ РЕДАКТИРУЙТЕ ВОПРОС, так как он будет полезен другим, столкнувшимся с подобной проблемой. Если у вас есть еще вопрос, откройте новый. Я бы сказал, что вы повторно отредактируете вопрос и поместите проблемный конвейер, который вы разместили ранее.

MayurK 27.09.2018 12:01

создал новый вопрос "Добавить звук в мозаику GStreamer" ссылка

user2306100 27.09.2018 12:15

Другие вопросы по теме