У меня есть конвейер 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. Но всегда разбирать и настраивать новый конвейер, когда мне приходится переключать каналы или другую комбинацию каналов, очень неэффективно и отнимает много времени.
Спасибо за Ваш ответ. Что вы имеете в виду под «начать подключение реального приложения». Вы имеете в виду разработку специального плагина gstreamer для управления этим?
Нет, приложение. gst-launch-1.0
— приложение общего назначения. Это помогает быстро проводить тестирование и прототипирование. Для более сложных случаев использования вам следует написать приложение самостоятельно, создав конвейеры gstreamer. Это позволяет динамично реагировать на события. См. gstreamer.freedesktop.org/documentation/application-development/…
Если у вас есть актуальный вопрос, проверьте плагин volume
. У него есть свойство mute
.
Плагин громкости со свойством 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: ложь
Насколько я знаю, не существует плагина, который позволил бы вам отключить конвейер с помощью команды gst-launch.
Есть несколько инструментов, которые позволяют создавать больше прототипов без необходимости использования полноценного приложения gstreamer. Gstreamer Daemon полезен, когда вам нужно динамически обновлять свойства в тестовом конвейере. В вашем случае вы можете использовать этот инструмент для обновления громкости различных конвейеров и отключения их звука.
Кажется интересный подход. Не могли бы вы рассказать немного больше об этом инструменте?
Демон Gstreamer работает как отдельный процесс, который управляет состоянием конвейеров и свойствами каждого элемента. Доступен канал межпроцессного взаимодействия, чтобы пользователь мог взаимодействовать с конвейером, сигналами, свойствами элементов.
Это позволяет взаимодействовать с конвейерами обычными способами (запуск/остановка/удаление), но вы также можете выполнять такие действия, как отправка событий (EOS/Seek/Flush). Наконец, он позволяет проверять сигналы и изменять свойства.
Судя по комментариям @florian-zwoch, использование плагина volume
со свойством mute
делает свою работу.
Конечно, есть... начните создавать для этого настоящее приложение. Это выходит за рамки инструмента
gst-launch-1.0
.