OScam dvbapi: настройка модуля для просмотра на TV

Классическая ситуация: соединение с источником настроено, в веб-интерфейсе OScam видны входящие ECM, статус OK — а экран чёрный. Причина почти всегда одна: oscam dvbapi либо отключён, либо настроен под другую платформу. Этот модуль — финальное звено в цепочке декодирования, и без него всё остальное бесполезно.

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

Роль модуля dvbapi в цепочке декодирования

dvbapi — это не протокол передачи данных, а локальный интерфейс между OScam и DVB-драйвером вашего устройства. Он перехватывает PMT (Program Map Table) прямо с тюнера, извлекает из него ECM, отправляет эти ECM на расшифровку через настроенные ридеры, а полученный control word (CW) возвращает обратно — в демультиплексор.

Результат: поток расшифровывается на уровне железа, а не программно. Именно поэтому без рабочего dvbapi картинки нет, даже если OScam успешно получает ключи.

Чем dvbapi отличается от сетевых протоколов (cccam, newcamd)

CCcam и newcamd — это протоколы для передачи ключей по сети. Они нужны, чтобы OScam получал CW от удалённого сервера или раздавал их другим клиентам. dvbapi работает в другом месте цепочки: он отвечает за то, что ключ попадёт в ваш конкретный тюнер.

На практике это означает следующее. OScam может одновременно подключаться к удалённому источнику через newcamd (получать ключи по сети) и через dvbapi отдавать эти ключи в локальный демультиплексор для просмотра. Одно без другого не работает: сетевой протокол даёт ключи, dvbapi — доставляет их до картинки.

Какие устройства поддерживают dvbapi

Три основные платформы:

  • Enigma2-ресиверы — OpenATV, OpenPLi, OpenViX, VTi. Самый распространённый случай. OScam запускается прямо на ресивере как softcam.
  • ПК с DVB-тюнером под Linux — доступ через /dev/dvb/adapterX/, демультиплексор /dev/dvb/adapter0/demux0.
  • TVHeadend — серверный PVR, который может использовать OScam как внешний CAM через Unix-сокет /tmp/camd.socket.

На Windows oscam dvbapi не работает в принципе — это чисто Linux-история.

Файл конфигурации oscam.dvbapi и параметры в oscam.conf

Секция [dvbapi] в oscam.conf: enabled, au, pmt_mode, request_mode, listen_port

Минимальная рабочая конфигурация для Enigma2:

[dvbapi]
enabled         = 1
au              = 1
pmt_mode        = 6
request_mode    = 0
boxtype         = dreambox
listen_port     = 9000

Разберём каждый параметр по делу.

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

au = 1 — Automatic Update, разрешает обработку EMM. Нужно для автоматического обновления прав доступа у карт с подпиской. Если у вас только сетевой источник ключей без физической карты — au не обязателен, но хуже не будет.

pmt_mode определяет, как OScam читает PMT с тюнера. Значения от 0 до 6 — разные методы взаимодействия с DVB-драйвером. На современных образах Enigma2 (OpenATV 7.x, OpenPLi 9.x) чаще всего работает pmt_mode=6. На старых — 0 или 4. Если декодирование не стартует, именно с pmt_mode нужно начинать перебор.

request_mode = 0 — параллельный запрос ECM через все доступные ридеры одновременно. request_mode = 1 — последовательный: сначала первый ридер, если не ответил — следующий. При нескольких источниках ключей mode=0 даёт меньшую задержку.

listen_port = 9000 — порт для сетевого режима dvbapi. Используется редко: большинство установок работает через локальный сокет, а не сетевое подключение.

Режимы boxtype: dreambox, dbox2, dvbapi3, pc, pc-nodmx

boxtype — один из параметров, который чаще всего настраивают неправильно.

dreambox — стандартный вариант для всех Enigma2-ресиверов. Используется на VU+, Dreambox, Gigablue, Clarke-Tech и большинстве других коробок под OpenATV/OpenPLi. Несмотря на название, это не только для Dreambox.

dbox2 — устаревший тип для старых dBox2-ресиверов. В 2026 году встречается редко.

dvbapi3 — для систем со старым DVB API версии 3. На современном железе нужен редко.

pc — для ПК с DVB-картой или TVHeadend. OScam общается с демультиплексором через Unix-сокет /tmp/camd.socket.

pc-nodmx — то же, что pc, но без прямого доступа к аппаратному демультиплексору. Используется в виртуальных средах, в headless-серверах, когда /dev/dvb/adapterX/ недоступен или OScam запущен не от root.

Структура файла oscam.dvbapi (приоритеты, игнор, маппинг CAID)

Файл oscam.dvbapi лежит в той же директории, что и oscam.conf. Типичные пути: /etc/tuxbox/config/oscam/ или /usr/keys/ — зависит от того, что передано в --config-dir при запуске OScam.

Файл не обязателен. Без него dvbapi будет пытаться декодировать все CAID, до которых дотянется. Но если на канале несколько CAID или нужно исключить определённые — без файла не обойтись.

Синтаксис строк:

P: CAID:ProviderID          # приоритет
I: CAID:ProviderID          # игнорировать
M: CAID1:ProvID1:CAID2:ProvID2   # маппинг CAID

Пример реального файла:

# Приоритет — сначала пробовать этот CAID
P: 0100:000000

# Игнорировать этот CAID полностью
I: 0500:000000

# Маппинг: если приходит CAID 1800, использовать как 1234
M: 1800:000000:1234:000000

ProviderID можно указывать как 000000 (все провайдеры) или конкретно. CAID — шестнадцатеричный, четыре символа. Строк P/I/M может быть сколько угодно.

Пошаговая настройка dvbapi на Enigma2 и на ПК (TVHeadend)

Настройка на Enigma2: softcam, pmt_mode, проверка через oscam webif

Первое: убедитесь, что другой softcam остановлен. MGCamd, CCcam, любой другой эмулятор — только один может работать одновременно. Два softcam одновременно занимают один сокет, и ни один из них нормально не заработает.

На OpenATV идём в Меню → Настройки → Система → Настройки softcam, останавливаем всё кроме OScam. На OpenPLi: Меню → Плагины → Softcam Setup.

В oscam.conf прописываем:

[dvbapi]
enabled     = 1
au          = 1
pmt_mode    = 6
boxtype     = dreambox

Перезапускаем OScam. Открываем веб-интерфейс (обычно порт 8888): http://IP_ресивера:8888. В разделе DVBAPI должна появиться строка с текущим каналом, CAID, PID и статусом. Нужный статус: decoding. Если видите found — ключ найден, но до тюнера не дошёл. Если раздел DVBAPI пустой — PMT вообще не читается, и нужно менять pmt_mode.

Настройка на ПК через /tmp/camd.socket и pc/pc-nodmx

Для ПК с DVB-картой или TVHeadend конфиг выглядит иначе:

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

OScam при старте создаст сокет /tmp/camd.socket. TVHeadend нужно настроить на использование этого сокета: Configuration → CAs → добавить CAPMT/Socket → путь /tmp/camd.socket.

Если OScam запускается не от root или в среде без прямого доступа к /dev/dvb — меняем на boxtype=pc-nodmx. В этом режиме OScam не пытается открыть демультиплексор напрямую, всё взаимодействие идёт через сокет.

Проверить, что OScam видит сокет и активный канал:

ls -la /tmp/camd.socket
tail -f /var/log/oscam.log | grep DVBAPI

Проверка маппинга демультиплексора и адаптеров

Если в системе несколько DVB-адаптеров, может оказаться, что OScam декодирует не тот адаптер. Проверить адаптеры:

ls -la /dev/dvb/
# Вывод: adapter0, adapter1, adapter2...

ls -la /dev/dvb/adapter0/
# Должны быть: demux0, dvr0, frontend0

Права на /dev/dvb/ — частая причина проблем при запуске не от root. Пользователь, под которым запущен OScam, должен быть в группе video:

usermod -a -G video oscam_user

Или временно проверить: chmod 777 /dev/dvb/adapter0/demux0. Если после этого декодирование заработало — проблема точно в правах.

Отладка: почему dvbapi не декодирует поток

ECM приходят, но картинки нет (control word отдаётся не туда)

Это самый частый случай. В веб-интерфейсе видны входящие ECM, статус ридера — OK, но экран чёрный или рассыпается. Проблема не в источнике ключей, а в том, что control word не доходит до демультиплексора.

Алгоритм диагностики:

  1. Открыть веб-интерфейс OScam → раздел DVBAPI. Если раздел пустой — PMT не читается вообще (шаг 2). Если есть строка с каналом — смотреть на статус (шаг 3).
  2. PMT не читается: менять pmt_mode. Перебрать по очереди: 0, 3, 4, 6. После каждого изменения — перезапустить OScam и переключить канал.
  3. Статус показывает "found" вместо "decoding": CW получен, но не отправлен в тюнер. Причины: неверный boxtype, конфликт softcam, нет прав на демультиплексор.

Неправильный pmt_mode или boxtype для платформы

pmt_mode — самый капризный параметр. Его значение зависит от версии образа, версии драйверов и типа ресивера. Нет универсального рецепта.

На практике для современных OpenATV 7.x и OpenPLi 9.x чаще всего подходит pmt_mode=6. Для OpenATV 6.x и некоторых образов на базе старых драйверов — pmt_mode=0. VTi иногда требует pmt_mode=4.

boxtype тоже бывает причиной тишины в логе. На некоторых образах Enigma2 boxtype=dreambox не работает — нужно попробовать dvbapi3 или вообще убрать параметр (OScam выберет значение по умолчанию).

Конфликт двух softcam или занятый сокет

Если OScam упал или был остановлен некорректно, сокет /tmp/camd.socket может остаться заблокированным. Следующий запуск OScam не сможет создать сокет заново.

Проверить:

ls -la /tmp/camd.socket

Если файл есть, а OScam не запущен — удалить вручную:

rm /tmp/camd.socket

Два softcam одновременно — ещё одна типичная ошибка. Например, MGCamd запущен системой автоматически и занял сокет раньше OScam. В логе OScam при этом будет что-то вроде bind: Address already in use. Решение: убедиться, что только один softcam активен.

Чтение лога OScam: ключевые строки decoding/failed

Включить подробный лог можно через веб-интерфейс (раздел Config → debug level) или параметром при запуске -d 255. В рабочем состоянии такой уровень замедляет систему, но для диагностики необходим.

Что искать в логе:

tail -f /tmp/oscam.log | grep -i dvbapi

Ключевые строки:

  • [DVBAPI] demux X, CAID 0100, PID 0200 — PMT прочитан, канал опознан
  • [DVBAPI] Requesting decode for channel... — ECM отправлен на расшифровку
  • [DVBAPI] decoding... — CW отправляется в демультиплексор (это то, что нужно)
  • [DVBAPI] stopped или отсутствие строк после смены канала — PMT не читается

Если после смены канала в логе нет ни одной строки с DVBAPI — проблема в pmt_mode или boxtype. Если строки есть, но нет "decoding" — проблема в правах на /dev/dvb или в конфликте сокета.

Как выбрать источник ключей для dvbapi (общие критерии)

На что смотреть: стабильность аптайма и пинг до источника

oscam dvbapi запрашивает CW каждые несколько секунд — именно с такой частотой меняются ключи шифрования в большинстве систем условного доступа. Если источник ключей отвечает с задержкой больше 2-3 секунд, поток начинает фризить или рассыпаться, даже если сам канал принимается идеально.

ECM response time виден прямо в веб-интерфейсе OScam: раздел Readers, колонка Last/Average. Нормальное значение — до 500 мс. Всё, что выше 1000 мс — это нестабильный источник, который будет давать регулярные фризы.

Географическое расстояние до сервера источника влияет на пинг напрямую. Источник на том же континенте почти всегда будет стабильнее, чем трансатлантический или межконтинентальный маршрут.

Поддержка нужных CAID и протоколов

Перед подключением к источнику нужно знать CAID каналов, которые хотите смотреть. CAID виден в веб-интерфейсе OScam при приёме сигнала (раздел DVBAPI) или в любом инструменте анализа транспортного потока.

Источник должен явно поддерживать нужный CAID. Поддержка Viaccess (0500) не означает поддержку Nagravision (1800). Проверить это можно только тестовым периодом — смотреть на статус ECM в webif, подключившись к конкретному источнику.

Протокол подключения в oscam.server: newcamd или cccam — это уже выбор на уровне конфигурации ридера, к dvbapi напрямую не относится.

Признаки нестабильного источника (фризы, долгий ECM time)

Нестабильный источник проявляется по-разному: периодические фризы на 2-3 секунды (CW обновляется с задержкой), кратковременное рассыпание картинки при смене сцены, регулярные reconnect в логе OScam.

В веб-интерфейсе это видно как скачущий ECM time: сначала 200 мс, потом резко 3000 мс, потом снова 200 мс. Стабильный источник показывает ровное время запроса без пиков.

Частые строки Connection to reader X lost, retry in Y seconds в логе — прямой признак проблемного источника. Хороший источник может работать неделями без единого reconnect.

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

Начните с pmt_mode=6 — это работает на большинстве современных образов OpenATV 7.x и OpenPLi 9.x. Если декодирование не стартует и в веб-интерфейсе раздел DVBAPI пуст — перебирайте по очереди: 0, 3, 4, 6. Значение зависит от конкретного образа и версии DVB-драйверов. Нет единственно правильного числа для всех ресиверов.

Чем boxtype=dreambox отличается от boxtype=pc?

dreambox (и dbox2) — для Enigma2-ресиверов, где OScam работает прямо на устройстве и имеет прямой доступ к аппаратному демультиплексору через /dev/dvb/. pc и pc-nodmx — для ПК и TVHeadend, где взаимодействие идёт через Unix-сокет /tmp/camd.socket. pc-nodmx выбирают, когда аппаратный демультиплексор недоступен — виртуализация, headless-сервер, запуск не от root.

OScam показывает "found", но картинки нет — почему?

Статус "found" означает только то, что ключ (CW) был получен от ридера. Это не значит, что CW дошёл до тюнера. Для реального декодирования нужен статус "decoding". Причины отсутствия decoding: неверный pmt_mode или boxtype, конфликт с другим softcam, занятый /tmp/camd.socket, нет прав на /dev/dvb/adapterX/demux0.

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

В той же директории, что oscam.conf — config-dir, заданный при запуске OScam. Чаще всего: /etc/tuxbox/config/oscam/ или /usr/keys/. Файл не обязателен: без него dvbapi работает с настройками по умолчанию и пытается декодировать все CAID. Нужен он только для приоритетов (P:), игнора определённых CAID (I:) и маппинга (M:) — например, когда канал вещает с несколькими CAID и нужно указать, какой использовать первым.

Можно ли использовать dvbapi и cccam-клиент одновременно?

Да, и это стандартная связка. OScam через ридер типа cccam или newcamd получает CW от удалённого источника по сети. Одновременно модуль dvbapi отдаёт полученный CW в локальный тюнер или ресивер. Одно не мешает другому: сетевой протокол работает на уровне ридера, dvbapi — на уровне доставки ключей к железу.

Какой порт использует dvbapi?

В сетевом режиме dvbapi слушает listen_port, по умолчанию 9000. Но на Enigma2 и в большинстве PC-установок сетевой порт не нужен — всё взаимодействие идёт через локальный Unix-сокет /tmp/camd.socket. Сетевой listen_port актуален, когда нужно подключиться к dvbapi с другого устройства в сети.

Почему dvbapi не запускается на ПК с TVHeadend?

Чаще всего: неверный boxtype (должен быть pc или pc-nodmx), занятый /tmp/camd.socket после предыдущего запуска (удалить вручную: rm /tmp/camd.socket), нет прав на /dev/dvb/ (добавить пользователя в группу video), TVHeadend не настроен на внешний CAM через сокет. Проверить: ls -la /tmp/camd.socket сразу после запуска OScam — файл должен появиться.

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

Даже самая стабильная линия 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 или внешние мониторы.