Настройка 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 через веб-интерфейс.

Practical checklist for smooth viewing

Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.

When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.

Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.

  • Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
  • Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
  • Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.