Настройка OScam DVBAPI: dvbapi-config и oscam.dvbapi

Если вы дошли до этой статьи, скорее всего картина такая: OScam запущен, карта определилась, ECM запросы летят — но картинка на ресивере чёрная или зашумлённая. Проблема почти всегда в одном месте: модуль oscam dvbapi либо не включён, либо настроен неверно. Ниже — полный разбор от конфига до диагностики лога.

Что такое DVBAPI в OScam и зачем он нужен

OScam умеет работать в двух принципиально разных режимах. Первый — сервер: он читает карту или подключается к удалённому ридеру и раздаёт ключи другим клиентам по протоколам newcamd, CCcam, radegast и так далее. Второй режим — локальный дескремблер. Вот тут и нужен oscam dvbapi.

DVBAPI — это модуль, через который OScam перехватывает PMT и ECM-запросы от драйвера ресивера и возвращает контрольные слова (CW) обратно в дескремблер. Без секции [dvbapi] в oscam.conf OScam просто не видит DVB-поток — он работает как сервер, но не раскодирует локально ничего.

Роль DVBAPI: мост между OScam и драйвером дескремблера

Технически это выглядит так: драйвер ресивера через /tmp/camd.socket (UNIX-сокет, старый протокол camd35) или через сетевой сокет отправляет OScam запрос с PMT канала. OScam получает CAID, Provider ID и ECM, уходит к нужному ридеру, получает CW и возвращает его обратно через тот же сокет. Драйвер дескремблирует поток — и вы видите картинку.

Для tvheadend схема чуть другая: там используется не UNIX-сокет, а TCP-соединение на loopback. OScam в режиме listen_port ждёт подключения, tvheadend подключается как CA-клиент. Порт настраивается вручную, по умолчанию ничего не зарезервировано.

Разница между сервером-читалкой и клиентом-дескремблером

Сервер-читалка (OScam без DVBAPI) — это просто умный прокси для ключей. Он берёт ECM от клиента, решает его и отдаёт CW. Сам он ничего не показывает. Клиент-дескремблер — OScam с DVBAPI — сам инициирует работу с DVB-стеком ресивера. Это разные роли, и OScam умеет выполнять обе одновременно: раздавать ключи по сети и при этом раскодировать локально.

Поддерживаемые платформы: Enigma2, Neutrino, tvheadend, Linux DVB

DVBAPI работает на любой платформе с Linux DVB API: Enigma2 (Dreambox, VU+, Formuler), Neutrino (Coolstream), tvheadend на любом железе с DVB-картами, и просто голый Linux с DVB-тюнерами. На Windows OScam DVBAPI не работает — только Linux/ARM.

Включение модуля DVBAPI в oscam.conf

Открываем /etc/oscam/oscam.conf (или /var/etc/oscam/oscam.conf — зависит от образа) и добавляем секцию. Вот рабочий пример для Enigma2:

[dvbapi]
enabled        = 1
au             = 1
pmt_mode       = 6
request_mode   = 1
delayer        = 60
user           = local
boxtype        = dreambox

Пройдёмся по каждому параметру — это не формальность, каждый из них влияет на поведение.

Секция [dvbapi]: enabled, au, pmt_mode, request_mode

enabled=1 — очевидно, включает модуль. Без этого секция игнорируется целиком.

au=1 — включает Auto-Update EMM. OScam будет пропускать EMM-пакеты к карте, что нужно для поддержания актуального состояния карты (обновление прав, renewal). На CardServer без физической карты это не нужно, но с локальной картой — обязательно.

pmt_mode — пожалуй, самый проблемный параметр. Определяет, как OScam получает информацию о программах. Значение 6 означает, что OScam сам читает PMT из DVB-потока через /dev/dvb/adapterX/demuxX, не полагаясь на файлы в /tmp/pmtX.tmp. На современных OpenATV, OpenPLi 8.x и VTi это работает стабильно. pmt_mode=4 стоит попробовать, если при переключении каналов OScam зависает или не подхватывает новый канал секунд 10–15.

request_mode=1 — OScam будет запрашивать ECM для всех обнаруженных CAID параллельно, а не по очереди. Быстрее, но создаёт больше нагрузку на ридеры. При request_mode=0 запросы идут последовательно по приоритету.

delayer=60 — задержка в миллисекундах перед отправкой CW в дескремблер. На некоторых приставках без задержки CW приходит раньше, чем дескремблер готов его принять. 60 мс — разумный дефолт, при проблемах с артефактами в начале сцены можно поднять до 100–150.

Параметр boxtype и его значения

Это один из самых недооценённых параметров. boxtype говорит OScam, как именно взаимодействовать с дескремблером.

  • dreambox — для всех Enigma2-боксов: Dreambox, VU+, Gigablue, Formuler
  • dbox2 — старые dBox2, почти не встречаются
  • ipbox — iPBox/Kathrein
  • pc — для PC с tvheadend или VDR, где дескремблирование идёт через /dev/dvb
  • pc-nodmx — то же, но OScam не открывает demux сам; используется когда другой процесс управляет demux

Неправильный boxtype — и CW уходит в никуда. Я видел случаи, когда люди ставили pc на Enigma2 и час смотрели на чёрный экран.

Параметр user — привязка к профилю из oscam.user

Параметр user указывает, от имени какого пользователя из oscam.user DVBAPI будет делать запросы к ридерам. Этот пользователь должен существовать в файле, иметь правильную группу (group=) и не иметь ограничений по CAID, если не нужно. Типичная минимальная запись в oscam.user:

[account]
user     = local
pwd      = local
group    = 1,2,3
au       = 1

Проверка, что OScam собран с поддержкой DVBAPI

Перед тем как искать проблему в конфиге — убедитесь, что ваша сборка вообще содержит модуль. Запустите:

oscam -b -V 2>&1 | grep -i dvb

Должна быть строка вида WITH_LIBDVBAPI : yes. Если no — вы смотрите на бинарник, собранный без поддержки DVBAPI. Нужна другая сборка. На ipk-based образах ищите пакет oscam-dvbapi отдельно от oscam.

Файл oscam.dvbapi: приоритеты, игнор и маппинг CAID

Файл oscam.dvbapi необязателен, но без него OScam берёт ECM у первого попавшегося CAID на канале — а это часто не тот, который у вас есть. Файл лежит рядом с oscam.conf. Путь определяется параметром configdir в секции [global] — чаще всего это /etc/tuxbox/config/oscam/ или /var/etc/oscam/.

После правки файла нужен перезапуск OScam или reload через веб-интерфейс (кнопка "Reload" в разделе "Files").

Путь к файлу и порядок чтения строк

OScam читает строки сверху вниз. Первое совпадение по CAID:PROVID:SRVID выигрывает. Поэтому специфичные строки (с конкретным SRVID) нужно ставить выше общих.

Если oscam.dvbapi не подхватывается — проверьте configdir в oscam.conf и убедитесь, что файл лежит именно там. На некоторых образах с нестандартным config-path файл кладут в /usr/keys/ или /etc/keys/, а OScam смотрит в другое место.

P: (priority), I: (ignore), M: (mapping), D: (delay)

P: (Priority) — поднять приоритет указанного CAID/провайдера. OScam попробует его первым.

I: (Ignore) — полностью игнорировать этот CAID. OScam не будет отправлять ECM запросы для него. Полезно, когда канал вещает FTA-систему или CAID, которого у вас нет.

M: (Mapping) — подменить один CAID другим. Используется редко, но помогает при нестандартных ситуациях с некоторыми картами.

D: (Delay) — задержка перед отправкой ECM для конкретного CAID/канала. Нужен в редких случаях с мультисистемными каналами.

Формат строки: CAID:PROVID:SRVID:ECMPID

Общий формат:

P: CAID:PROVID:SRVID:ECMPID

Все поля, кроме первого после типа, можно опустить или заменить на 0000 для "любой". Примеры:

# Приоритет Viaccess 0500, провайдер 032830
P: 0500:032830

# Игнорировать весь FTA/Mediaguard 0100
I: 0100

# Игнорировать Nagravision на конкретном канале (SRVID 1234)
I: 1801:0000:1234

# Маппинг: заменить CAID 0604 на 0500
M: 0604:000000:0000:0000:0500:000000

Пример приоритета нужного CAID над лишними

Реальная ситуация: немецкий пакет на Astra 19.2E. Канал вещает в Nagravision (1801), Viaccess (0500) и Irdeto (0606). У вас есть только Viaccess. OScam без приоритетов может попробовать сначала Nagravision, получить "no matching reader", потерять время, потом взяться за Viaccess.

# oscam.dvbapi
P: 0500:032830
I: 1801
I: 0606

Теперь OScam идёт сразу к Viaccess и не тратит время на системы, которых нет.

Диагностика: почему DVBAPI не раскодирует

Вот где большинство гайдов заканчиваются — и начинаются реальные проблемы. Смотреть нужно в лог OScam. Убедитесь, что в oscam.conf в секции [global] стоит достаточный уровень логирования:

[global]
logfile        = /tmp/oscam.log
loghistorysize = 4096
maxlogsize     = 1024

И запустите OScam с параметром отладки: oscam -b -d 64. Флаг -d 64 включает dvbapi-отладку.

Чтение лога: dvbapi: found channel, ecm hash, decoding

В нормальной ситуации лог выглядит примерно так:

dvbapi: found channel 1234 on adapter 0 demux 0
dvbapi: ECM on CAID 0500 PROVID 032830 SID 1234
ecm: found reader [card_reader] for CAID 0500
ecm: [card_reader] correct: CW 1A2B3C4D...
dvbapi: set CW for demux 0 service 1234

Если видите первые две строки, но нет "correct: CW" — проблема в ридере. Если нет "found channel" — DVBAPI вообще не видит канал, проблема в pmt_mode или boxtype.

Ошибка 'no matching reader' и 'group mismatch'

no matching reader — ни один ридер не обслуживает запрошенный CAID/PROVID. Проверьте: есть ли у ридера в oscam.server параметр caid с нужным значением? Не ограничен ли ридер по services?

group mismatch — это ошибка настройки групп. В oscam.user у DVBAPI-пользователя (параметр user= в секции [dvbapi]) задана группа, которой нет ни у одного ридера. Решение простое: убедитесь, что номер группы в oscam.user у local-пользователя совпадает с group= у нужного ридера в oscam.server.

# oscam.user
[account]
user  = local
group = 1

# oscam.server  
[reader]
label = my_card
group = 1   <-- должно совпадать

Проблема прав на /tmp/camd.socket и pmt_mode

Если OScam запускался вручную под root, а потом под другим пользователем — сокет /tmp/camd.socket может принадлежать root с правами 700. Энигма не сможет к нему подключиться. Проверка:

ls -la /tmp/camd.socket

Если права неправильные — удалите сокет и перезапустите OScam. Он создаст новый с нужными правами.

Конфликт с другим эмулятором на том же сокете

Это самая коварная проблема. На многих Enigma2-образах при загрузке стартует встроенный softcam — CCcam, mgcamd или что-то ещё. Он захватывает /tmp/camd.socket первым, OScam не может его открыть или открывает, но дескремблер уже занят.

Проверить, кто держит сокет:

fuser /tmp/camd.socket

Команда вернёт PID процесса. Посмотрите что это: cat /proc/<PID>/cmdline. Если это не OScam — выгрузите чужой кам через меню ресивера или командой kill, и только потом запускайте OScam.

На OpenATV выгрузить активный softcam: Меню → Управление softcam → Остановить. Потом запускайте OScam.

Особые случаи: tvheadend, мультидескремблинг и FBC-тюнеры

Подключение OScam к tvheadend через сетевой DVBAPI

tvheadend не использует /tmp/camd.socket. Там работает сетевой вариант протокола. В oscam.conf добавляем порт:

[dvbapi]
enabled      = 1
au           = 1
pmt_mode     = 0
listen_port  = 9000
user         = tvh
boxtype      = pc

В tvheadend: Configuration → CAs → Add → CA type: capmt (Server mode). Хост: 127.0.0.1, порт: 9000. Режим OSCam: выбрать "OSCam net protocol (rev >= 10389)".

Важно: boxtype для tvheadend должен быть pc или pc-nodmx, не dreambox. С dreambox CW уйдёт не туда.

Параметр decode_on_all_demux и несколько одновременных каналов

Для одновременного раскодирования нескольких каналов нужно, чтобы OScam работал с несколькими demux одновременно. В oscam.conf:

[dvbapi]
decode_on_all_demux = 1

С boxtype=pc-nodmx OScam не открывает demux самостоятельно — это делает tvheadend или VDR. Используется когда другой процесс управляет всеми DVB-ресурсами, а OScam только решает ECM.

FBC-тюнеры и ограничение числа PID

FBC (Full Band Capture) тюнеры, как в VU+ Ultimo 4K или некоторых Formuler-боксах, захватывают весь транспондер целиком. Это значит, что количество одновременных ECM-сессий ограничено не числом тюнеров, а числом аппаратных дескремблеров на чипе. На большинстве ARM-боксов это 8–16 PID одновременно. При превышении новые каналы не раскодируются, хотя ECM-запросы идут нормально.

Если вы пишете несколько каналов одновременно плюс смотрите ещё один — счётчик ECM-сессий растёт быстро. В логе будет что-то вроде dvbapi: too many ECM requests.

Записи (timeshift/recording) и DVBAPI

При записи через Enigma2 oscam dvbapi работает точно так же, как при просмотре — канал должен раскодироваться. Проблема возникает при request_mode=1: если вы переключаетесь во время записи, OScam может послать новый PMT и временно прервать дескремблирование. В этом случае попробуйте request_mode=0 — менее агрессивно, но стабильнее для записи.

Timeshift — это запись плюс воспроизведение, дополнительных требований к DVBAPI нет.

Часто задаваемые вопросы

Где находится файл oscam.dvbapi и обязателен ли он?

Файл лежит в той же папке, что и oscam.conf — путь определяется параметром configdir в секции [global]. Чаще всего это /etc/tuxbox/config/oscam/ или /var/etc/oscam/. Не обязателен: без него OScam использует дефолтные приоритеты и пробует все CAID подряд. Но если канал вещает несколько CA-систем и у вас есть только одна — файл нужен, чтобы OScam не тратил время на системы, которых нет, и не цеплялся за чужой CAID.

Какой pmt_mode выбрать для Enigma2?

Начните с pmt_mode=6 — это режим, где OScam сам читает PMT из DVB-потока, не завися от файлов в /tmp/. На OpenATV 7.x, OpenPLi 8.x и VTi работает стабильно. Если после переключения канала изображение появляется через 10–20 секунд или не появляется вовсе — попробуйте pmt_mode=0 (файловый режим через /tmp/pmtX.tmp) или pmt_mode=4. Точное значение зависит от версии драйвера в образе — универсального ответа нет, нужно тестировать.

В логе 'group mismatch' — что это значит?

Это значит, что группа (group=) у пользователя DVBAPI в oscam.user не пересекается ни с одной группой, в которую входит ридер в oscam.server. OScam не может "передать" ECM-запрос ридеру, у которого нет общей группы с запрашивающим пользователем. Решение: задать одинаковый номер группы — например, group=1 — и у local-пользователя в oscam.user, и у нужного ридера в oscam.server.

OScam запущен, ECM приходят с ответом, но картинка чёрная — почему?

CW возвращается правильно, но не доходит до дескремблера. Три главные причины: 1) другой softcam захватил /tmp/camd.socket — проверьте fuser /tmp/camd.socket и выгрузите чужой кам; 2) неверный boxtype — CW уходит не тому получателю; 3) OScam отвечает на ECM не того CAID — добавьте строку P: с нужным CAID в oscam.dvbapi. Чаще всего виновата первая причина, особенно на образах с автозапуском встроенного softcam.

Можно ли раскодировать несколько каналов одновременно через DVBAPI?

Да, если позволяет железо. На Enigma2-боксах количество одновременных ECM-сессий ограничено числом аппаратных дескремблеров — обычно от 4 до 16. Включите decode_on_all_demux=1 в секции [dvbapi]. На PC с tvheadend ограничение мягче: всё упирается в ширину канала ридера и скорость ответа на ECM. Бюджетные ARM-приставки за 30–50 евро часто дают только 2–4 одновременных потока.

Как заставить OScam игнорировать ненужный CAID на канале?

Добавьте строку I: <CAID> в oscam.dvbapi. Например, I: 1801 полностью игнорирует Nagravision. Если нужно игнорировать только на конкретном канале: I: 1801:0000:<SRVID>. Альтернатива — ограничить caid= прямо в секции ридера в oscam.server, тогда ридер просто не будет брать ECM чужих систем. После правки oscam.dvbapi не забудьте сделать reload через веб-интерфейс.

Практические советы для стабильного просмотра

Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.

При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.

Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.

  • Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
  • Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
  • Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.