Канал GStreamer для динамического управления alsasink

У меня есть конвейер GStreamer, который принимает поток udp/rtp и выводит его на четыре канала звуковой карты, например. алсасинкс:

gst-launch-1.0 udpsrc name=m_udpsrc multicast-group=239.255.255.245 auto-multicast=true port=5551 timeout=30000000000 caps = "application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string)G722, payload=(int)9" ! rtpg722depay name=m_depay ! avdec_g722 name=m_dec  ! audioconvert ! tee name=m_t  m_t. ! queue name=m_queue_1 ! volume volume=0.66 name=m_volume_ch1 ! alsasink name=ch1 device=card1_out0 sync=false async=true  m_t. ! queue name=m_queue_2 ! volume volume=0.66 name=m_volume_ch2 ! alsasink name=ch2 device=card1_out1 sync=false async=true  m_t. ! queue name=m_queue_3 ! volume volume=0.66 name=m_volume_ch3 ! alsasink name=ch3 device=card2_out0 sync=false async=true  m_t. ! queue name=m_queue_4 ! volume volume=0.66 name=m_volume_ch4 ! alsasink name=ch4 device=card2_out1 sync=false async=true

Есть ли плагин, с помощью которого я могу динамически включать/отключать или отключать/включать звук одного из четырех каналов (alsasinks) индивидуально?

Поскольку у меня четыре alssink, возможное количество комбинаций конвейеров gstreamer составляет 1..16. Но всегда разбирать и настраивать новый конвейер, когда мне приходится переключать каналы или другую комбинацию каналов, очень неэффективно и отнимает много времени.

Конечно, есть... начните создавать для этого настоящее приложение. Это выходит за рамки инструмента gst-launch-1.0.

Florian Zwoch 30.04.2024 17:08

Спасибо за Ваш ответ. Что вы имеете в виду под «начать подключение реального приложения». Вы имеете в виду разработку специального плагина gstreamer для управления этим?

tinu73 01.05.2024 20:03

Нет, приложение. gst-launch-1.0 — приложение общего назначения. Это помогает быстро проводить тестирование и прототипирование. Для более сложных случаев использования вам следует написать приложение самостоятельно, создав конвейеры gstreamer. Это позволяет динамично реагировать на события. См. gstreamer.freedesktop.org/documentation/application-developm‌​ent/…

Florian Zwoch 02.05.2024 10:51

Если у вас есть актуальный вопрос, проверьте плагин volume. У него есть свойство mute.

Florian Zwoch 02.05.2024 11:03

Плагин громкости со свойством mute делает свою работу. Здесь важно то, что в целом свойство плагина должно быть управляемым, т. е. должно иметь флаг GST_PARAM_CONTROLLABLE при создании свойства. Я написал небольшой скрипт на Python, и теперь я могу динамически отключать/включать звук каналов во время потоковой передачи: #0: ch1: True ch2: False ch3: True ch4: False #1: ch1: False ch2: True ch3: False ch4: True #2 : ch1: верно ch2: ложь ch3: верно ch4: ложь #3: ch1: ложь ch2: ложь ch3: ложь ch4: ложь #4: ch1: верно ch2: ложь ch3: верно ch4: ложь

tinu73 04.05.2024 15:46
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
90
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Насколько я знаю, не существует плагина, который позволил бы вам отключить конвейер с помощью команды gst-launch.

Есть несколько инструментов, которые позволяют создавать больше прототипов без необходимости использования полноценного приложения gstreamer. Gstreamer Daemon полезен, когда вам нужно динамически обновлять свойства в тестовом конвейере. В вашем случае вы можете использовать этот инструмент для обновления громкости различных конвейеров и отключения их звука.

Кажется интересный подход. Не могли бы вы рассказать немного больше об этом инструменте?

tinu73 03.05.2024 19:44

Демон Gstreamer работает как отдельный процесс, который управляет состоянием конвейеров и свойствами каждого элемента. Доступен канал межпроцессного взаимодействия, чтобы пользователь мог взаимодействовать с конвейером, сигналами, свойствами элементов.

Jafeth Garcia 06.05.2024 16:26

Это позволяет взаимодействовать с конвейерами обычными способами (запуск/остановка/удаление), но вы также можете выполнять такие действия, как отправка событий (EOS/Seek/Flush). Наконец, он позволяет проверять сигналы и изменять свойства.

Jafeth Garcia 06.05.2024 16:32
Ответ принят как подходящий

Судя по комментариям @florian-zwoch, использование плагина volume со свойством mute делает свою работу.

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