Когда в системе много DVB-адаптеров — может возникнуть ситуация с изменением их номеров после каждой перезагрузки. Иногда проблему можно решить с помощью правил для udev, привязав адаптеры к постоянным номерам на основании, например, номера PCI-слота куда вставлена DVB-карта. Но это не работает в том случае, если на DVB-карте больше одного тюнера.
В случае DVB-карты с несколькими тюнерами — работает привязка по MAC-адресам. Это реализовано в замечательной софтине под названием Астра и активно мной используется для нормальной работы с 4-тюнерными картами от TBS. Но, к сожалению, Астра не умеет работать с CAM-модулями. Для работы с ними у меня используется DVBlast, который не умеет привязку по MAC-адресу. Это легко исправляется с помощью небольшого скрипта на bash.
Принцип действия скрипта очень простой:
1) C помощью утилиты dvbls получаем список всех DVB-адаптеров, после чего определяем какому MAC-адресу какой номер адаптера соответствует.
2) Проверяем наличие уже запущенного процесса, если он есть — то значит DVBlast уже работает и нет нужды запускать еще один экземпляр. Если же процесс не найдет — переходим к запуску.
3) Запускаем DVBlast в screen’е.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash LOG=/root/.sh/dvblast_check/log ADAPTER=`/usr/bin/dvbls | grep XX:XX:XX:XX:XX:XX (укажите MAC вашего адаптера) -B 2 | grep adapter | awk '{print $1}' | sed -e 's/^.\{8\}//'` PID=`ps aux | grep dvblast | grep "\-a "$ADAPTER" \-r" | grep -v SCREEN | awk '{print $2}'` if [ $PID ] then sleep 1 else screen -L -d -m -S stream /usr/bin/dvblast -f 12579000 -s 22000000 -c /etc/dvblast/config.conf -a $ADAPTER -r /tmp/dvblast.sock echo "$DATE - DVBlast on card $ADAPTER not worked, run it..." >> $LOG fi |
Адаптеров больше чем 1? Копируем код несколько раз, не забывая менять в нем MAC-адреса и пути до конфигов.