Virkom |
|
Темы:
0
Сообщения:
5
Участник с: 18 июля 2017
|
Итак, делюсь опытом. Первым делом нужно узнать, по какому пути регистируются звуковушки. Для этого надо дать команду и каким-то образом сделать так, чтобы карты переопределились. Для USB - легко. Просто переткнуть. Для PCI - нужно выгрузить и загрузить модуль ядра.Модуль ядра можно узнать командой У меня это snd_oxygen (для карточек Xonar DG).Дальше выгружаю модуль: и получаю сообщение о том, что модуль занят и выгрузить его невозможно. Что может его занимать? Правильно, pulseaudio. Задача - убить pulseaudio и быстро дать команду rmmod. Быстро потому, что pulseaudio тут же перезагрузится заново. Модуль выгрузился.Ну и заново его загружаем:
В это время в отдельной вкладке терминала работает программка udevadm и она показала следующее:
То, что нужно, я попытался выделить жирным, но, к сожалению, внутри кода это делать нельзя. Кому интересно - может запустить поиск по BB-code. Следующий пункт - создаем файлик правил для udev: С содержимым: Скопированы пути и вместо card0, card1, card2... вставлено "card?". Потому как при загрузке драйвера карточке может присвоиться любой номер. В конце строки для карточки устанавливается айдишник. Использовать можно только буквы, цифры и знак подчеркивания.Едем дальше. Сохраняем файл и, для того, чтобы правила применились, опять же убиваем пульс, делаем rmmod и modprobe. Теперь все выглядит вот так:
Все. Каждой карте присвоен свой айдишник в зависимости от места на pci-шине. Обращаться к каждой карточке можно с помощью hw:<ID>. Т.е. в моем случае:
Теперь совершенно без разницы, какой номер карте выдался. hw:0, hw:1, hw:2.... Можно обращаться по ID. А ID, в свою очередь привязан к PCI-шине. Вот как-то так. P.S.: Кстати, накатал в консоли сервера быстренько программку на Java, которая выдаст всю информацию по карточкам. И внутри самой Java в качестве name карты определяется как раз этот ID, который прописан в UDEV. Выглядит примерно так: http://www.picshare.ru/uploads/170731/0V72ydusqP.jpg Не красиво, конечно, но с этим по крайней мере уже можно поиграться. Поменять ID, сортировку в списке и т.д. |
Virkom |
|
Темы:
0
Сообщения:
5
Участник с: 18 июля 2017
|
akoropДа, надо. Это не простые пользователи, а очень крупная российская компания. И им нужно иметь выбор, чтобы можно было поменять источник очень быстро. Выглядит в веб-интерфейсе это примерно так: http://www.picshare.ru/uploads/170720/bu0EeDF323.jpg |
Virkom |
|
Темы:
0
Сообщения:
5
Участник с: 18 июля 2017
|
akoropНе совсем так просто. На сервере стоит написанное мной ПО (демон), который занимается трансляциями.nafanjaА дальше надо соорудить скрипт, который на основании этих данных будет запускать три программы захвата, указывая им alsa-адреса, сложившиеся при этой загрузке. Пользователь при настройке выбирает с какой звуковой карты какой канал транслировать. Т.е. можно, например, с третьей карты транслировать в сеть на IP первого канала. Штука в том, чтобы эта же конфигурация осталась после перезагрузки. Она и остается, только карты тусуются. Поэтому скриптами не обойдешься. ПО написано на Java. Там есть функция, которая возвращает Mixer.Info. Там никакой информации для жесткой привязки к карте нет. Из этой информации я выдираю только номер карты (hw:0, hw:1, hw:2) и с нее захватываю. Так как из программы не достучаться до жесткой привязки, приходится думать, как это сделать через драйвер. Но за информацию спасибо. В UDEV вроде бы в правилах прописываются как раз числа из пути к файлу: /sys/bus/pci/devices/0000:00:14.2/sound/. Вроде бы это номер шины PCI. Попробую соорудить правила. |
Virkom |
|
Темы:
0
Сообщения:
5
Участник с: 18 июля 2017
|
1. Это трансляционный сервер, который получает три радиотрансляции, захватывает их через звуковые карты, конвертит в mp3 и вещает в сеть. Задача состоит в том, чтобы сделать его фактически автономным. Поставить куда-нибудь и забыть. Если вдруг ему вздумается перезагрузиться, то он должен поднять вещание в том же порядке, что и было. Поэтому идеальный вариант, если он не будет перезагружаться. Но возможно все, в том числе и сбои питания. 2. Даже не представляю, какое и почему это вдруг оказалось неподходящим. 3. Да. Здесь видимо только UDEV. Только непонятно как. |
Virkom |
|
Темы:
0
Сообщения:
5
Участник с: 18 июля 2017
|
Ребят, та же самая беда. Извините за некропостинг. Три идентичных устройства. На всякий случай (на вопрос "зачем?") - идет захват, конвертирование и вещание мультикастом сразу трех каналов трансляции радиовещания. Модуль ядра snd_ca0106. При перезагрузке тусуются в произвольном порядке, естественно. Раздел "Ordering multiple cards of the same type" читал. Pid и Vid нет у карты. Советуют через правила udev, но я вообще не представляю, как это делается. Насколько я понял, там надо в рабочий комп втыкать устройство и смотреть по dmesg, какой ему id выдался. И к этому id привязываться. Но беда в том, что это не USB-устройства, а PCI. В рабочий комп не воткнешь. Да и нахожусь я от этого компьютера за тысячу километров. Помогите, пожалуйста. Как решить эту проблему? |