LINUX.ORG.RU

Manjaro, PulseAudio, ALSA, USB-camera

 , , ,


0

1

Всем привет!
На компе стоит Manjaro KDE x64, за компом работают несколько пользователей. Также к компу подключена web'ка, которая мониторит комнату. Видео захватывается при помощи ffmpeg примерно так:

ffmpeg -thread_queue_size 256 -f v4l2 -i /dev/video0 -f pulse -i alsa_input.usb-046d_0805_4201AA60-02.analog-mono ...
Проблема в том, что из-за PulseAudio ffmpeg нужно запускать от имени активного юзера, а при переключении, перезапускать от имени нового активного юзера, ибо крашится. Всё это вызывает жуткие головные боли. Вопросы:
1. Можно ли в пульсе привязать конкретное устройство строго к конкретному юзеру вне зависимости от активности?
2. Можно ли отвязать одно устройство от пульсы и вернуть его на ALSA?
3. Можно ли автоматизировать перезапуск ffmpeg при переключении юзеров (самый плохой вариант)?

★★

Последнее исправление: Strannik-j (всего исправлений: 1)

Можно ли в пульсе привязать конкретное устройство строго к конкретному юзеру вне зависимости от активности?

Нет, но можно запускать пульсу от отдельного юзера: https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/

Можно ли отвязать одно устройство от пульсы и вернуть его на ALSA?

Да, гугли udev и PULSE_IGNORE.

Можно ли автоматизировать перезапуск ffmpeg при переключении юзеров (самый плохой вариант)?

Да, но это действительно говно какое-то, а не вариант.

Я правильно понимаю, что это конкретное аудиоустройство — микрофон в вебке? Тогда лучше всего сделать второй вариант и работать с микрофоном вебки через ALSA.

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

Юзер должен быть активный. Как только десктоп переключается на другого юзера, ffmpeg падает, т.к. теряет доступ к звуковому устройству

Strannik-j ★★
() автор топика
Ответ на: комментарий от Strannik-j

Я про запуск Пульсы. Ну выше уже написали.

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

Или, если всё же нужно (вдруг) работать с микрофоном вебки через пульсу, то следует сделать комбинацию первого и второго вариантов:

  • настроить отдельную пульсу на отдельном юзере, отключить в ней автодетект и захардкодить вебку в конфиге
  • запретить автодетект вебки для всех остальных пульс (udev + PULSE_IGNORE)
  • натравить ffmpeg на глобальную пульсу через переменную PULSE_SERVER
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Ну и в любом случае запускайте ffmpeg не от активного юзера, а как сервис — через systemd, например.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

Ничего себе. Главный фанат Systemd пишет «если с пульсой не заработает, то всегда можно попробовать с ALSA». Он что, адекватный что ли?

Антиоффтопик: если будешь переключаться на ALSA, то прочитай этот коммент: http://www.opennet.ru/openforum/vsluhforumID3/118455.html#131

ZenitharChampion ★★★★★
()
Ответ на: комментарий от Strannik-j

найс. а lsusb чего говорит? может ты с правилом чего перемудрил и вовсе запломбировал устройство?

anonymous
()
Ответ на: комментарий от Strannik-j

может модуль какой надо подгрузить? в dmesg микрофон определяется? по идее он же должен отдельным устройством быть.

anonymous
()
Ответ на: комментарий от anonymous

Наверное это оно:
input: UVC Camera (046d:0805) as /devices/pci0000:00/0000:00:13.2/usb4/4-4/4-4:1.0/input/input14
usb 4-4: [5] FU [Mic Capture Volume] ch = 1, val = 1536/7680/1
usbcore: registered new interface driver snd-usb-audio

Strannik-j ★★
() автор топика
Последнее исправление: Strannik-j (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.