LINUX.ORG.RU

pulseaudio, config hell. Как в этом всём разобарться?

 ,


0

1

Есть pulseaudio. Есть его конфиги. Всё работает. Требуется сделать простую вещь - для одного sink'а (sink.voice например) добавить дублирование потока в сеть на определённый адрес любым известным способом.

Или вообще идеально - чтобы можно было включение-выключение этого дублирования в сеть делать «на лету», через pactl например, чтоб можно было скриптик повесить на иконку и включать-выключать дублирование по необходимости.

Что-то документация на pulseaudio вообще не помогла никак этого добиться или хотя бы понять где и что надо дописать в конфигах, да и вообще, в каком именно конфиге(ах) надо это делать.

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

Конфиги - http://stanson.ch/files/NokiaN9/pulse-config.tar.gz

pulseaudio 0.9.19 если чо.

module-esound-protocol-tcp в наличии, например. Или там module-rtp-send какой. Загрузить модуль - не вопрос, но дальше что?

Может есть какая-нибудь вменяемая хаутушка, с примерами, типа вот грузим модуль, врисовываем ещё то-то туда-то, pactl list теперь должен показывать то-то, и т.д.

ЗЫ: Решение простое:

parec --raw --volume 65536 -d sink.voice.monitor | netcat -u 192.168.253.20 4172
или даже лучше
parec --raw --volume 65536 -d sink.voice.monitor | socat - udp4-datagram:192.168.253.20:4172
И нефиг в конфиги лезть, там всё равно ничего хорошего не наконфигуришь.

★★★★★

Последнее исправление: Stanson (всего исправлений: 3)
Ответ на: комментарий от Stanson

Как получить список этих sink-input'ов?

pactl list short sink-input

Далее - как в этой долбаной пульсе найти модуль

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules

который просто стримит юникастом по UDP на указанный порт и адрес, например?

Такого нет.

*-tcp требуют уже работающего сервера на той стороне, иначе оно просто не принимает данные от проигрывателя, например.

А ты как хотел?

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

Потому что пульса работает по-другому. Модули *-sink-*, внезапно, создают sink, в который можно направить один или более sink-input'ов.

Кроме того, попытался найти в доках информацию про .monitor у sink. Что это вообще, и как работает.

А что должно быть в доках? Это просто source, который дублирует соответствующий sink.

Может мне вообще можно просто с sink.voice.monitor отправить поток куда-нибудь

Конечно, можно. pacat -r -d sink.voice.monitor | nc ....

У меня meego и там совершенно ванильная пульса

Значит, в meego этого дерьма нет и тебе повезло.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

А что должно быть в доках? Это просто source, который дублирует соответствующий sink.

Ну хотя бы что вот есть sink, и у каждого sink есть sinkname.monitor который можно использовать как source.

Конечно, можно. pacat -r -d sink.voice.monitor | nc ....

В итоге так и сделал. Работает без проблем.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от intelfx

А ты как хотел?

Ну как бы аудио - это всё же потоки, которые не должны ни при каких условиях останавливаться. А тут бред получается - кнопка play нажата, а проигрыватель висит. В частности для *-tcp ожидал что оно будет поток принимать всегда, если куда-то подключился - то поток принимаемый полился в сеть, отключился - опять поток в /dev/null уходит, но не останавливается. Ну это как минимум логично бы было.

Отсутствие в пульсе сетевых стримеров в UDP конечно удивило. :)

Stanson ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.