Локальные каналы через CCcam: настройка 2026
Если ты уже поднял шаринг и всё работает, но своя карта в ридере либо не декодирует, либо конфликтует с сетевыми пирами — ты попал по адресу. Локальные каналы через CCcam настройка которых кажется тривиальной, на практике ломается в нескольких конкретных местах. Разберём всё по порядку: от структуры конфигов до реальных команд диагностики.
Что такое локальные каналы в контексте CCcam и чем они отличаются от шаринга
Локальный канал — это канал, ECM которого декодируется через физическую смарт-карту, вставленную прямо в ресивер или подключённую через внешний кардридер. Никаких сетевых запросов, никаких задержек от пиров. Ответ на ECM-запрос приходит за 80–200 мс с карты, а не за 300–800 мс через шаринг.
Шаринговый канал работает иначе: ресивер отправляет ECM-запрос на CCcam-сервер по C-line, тот либо декодирует его своей картой, либо ретранслирует дальше по цепочке пиров. Разница в архитектуре принципиальная — и именно поэтому конфигурировать их нужно по-разному.
Локальный ридер против сетевого peer
В терминах CCcam/OScam локальный ридер — это устройство, которое OScam видит через /dev/sci0 (внутренний слот Enigma2) или /dev/ttyUSB0 (внешний Phoenix/Smartreader). Сетевой peer — это C-line или N-line, то есть подключение к чужому серверу. OScam работает с ними через разные блоки в oscam.server.
Когда ты добавляешь C-line в CCcam.cfg или reader с protocol=cccam в OScam — это peer. Когда указываешь protocol=internal и device=/dev/sci0 — это локальный ридер. Путать их нельзя, иначе приоритеты работают непредсказуемо.
CAID, provid и SID — как ресивер выбирает источник
CAID — это идентификатор системы условного доступа. Например, 0x0500 — Viaccess, 0x1800 — Nagravision, 0x0963/0x0960 — Conax. Provid (provider ID) уточняет конкретного оператора внутри системы. SID — идентификатор конкретного канала.
Когда ресивер хочет открыть канал, он формирует ECM и передаёт его эмулятору вместе с тройкой CAID:provid:SID. Эмулятор смотрит, какой reader или peer умеет декодировать эту тройку, и маршрутизирует запрос. Вот почему неверный ident в oscam.server означает, что карта вроде работает, но ECM-запросы до неё не доходят.
Пример: карта Viaccess с CAID 0500 и provid 040110. Если в конфиге ридера написать ident=0500:030B00 вместо 040110 — эмулятор не подберёт маршрут, и канал зависнет.
Когда локальные каналы нужно отдавать в сеть, а когда оставлять только себе
Если ты держишь сервер для нескольких клиентов — свою карту логично расшаривать. Для этого в CCcam нужна F-line, в OScam — группировка ридера с аккаунтами пользователей. Но если карта личная и ты не хочешь её нагружать чужими ECM-запросами — держи её только для себя, убери из группы или не добавляй F-line.
Отдельный случай — карта с несколькими provid, где одни каналы есть только на ней, а другие идут по шарингу. Тут нужны точные правила маршрутизации, иначе ресивер будет пытаться открыть всё через сеть, хотя часть каналов можно закрыть локально за 100 мс.
Настройка локального ридера в CCcam.cfg и переход на OScam
Прежде чем лезть в конфиги, нужно понимать, где они лежат. На разных прошивках Enigma2 пути различаются, и это источник половины вопросов на форумах.
Путь к конфигам: /var/etc/CCcam.cfg и /etc/tuxbox/config/oscam/
CCcam.cfg обычно находится в /var/etc/CCcam.cfg — это стандарт для большинства образов Enigma2 (OpenATV, OpenPLi, VTi). На старых образах или при ручной установке встречается /usr/keys/CCcam.cfg. Проверить просто: find / -name CCcam.cfg 2>/dev/null.
Конфиги OScam живут в /etc/tuxbox/config/oscam/ — там должны быть oscam.conf, oscam.server, oscam.user, oscam.dvbapi и oscam.services. На некоторых сборках путь /var/keys/oscam/ или /etc/oscam/. Снова — find / -name oscam.server 2>/dev/null решает вопрос за секунду.
Параметры локальной карты: SERIAL READER и внутренний слот
В чистом CCcam локальная карта описывается строкой:
SERIAL READER : /dev/sci0 STOP BITS
Но это очень примитивный способ. CCcam плохо управляет приоритетами локального ридера, не показывает нормальную статистику и не даёт гибко настроить ident. Именно поэтому большинство опытных пользователей держат локальную карту в OScam, а CCcam оставляют только для шаринга или вовсе от него отказываются.
В oscam.server локальный ридер выглядит вот так:
[reader]
label = local_viaccess
protocol = internal
device = /dev/sci0
caid = 0500
ident = 0500:040110
group = 1
cardmhz = 357
mhz = 357
detect = cd
mode = 0
Параметр cardmhz и mhz критичен для капризных карт — некоторые работают только на 357 (3.57 МГц), другие принимают 600. Если ридер постоянно выдаёт timeout, первым делом меняй частоту. detect=cd означает определение карты по сигналу Card Detect.
Отдача локального ридера в сеть через F-line
В CCcam.cfg F-line отдаёт локальный ридер клиентам:
F: username password 1 0 0 0 0 0 0 0 0 0 0 0 {0:0:1}
Последний блок в фигурных скобках — список CAID, которые разрешено шарить. {0:0:1} означает все. Если хочешь отдавать только конкретный CAID, пишешь, например, {500:040110:1}.
В OScam принцип другой: ридер привязывается к группам (group=1), пользователь тоже привязывается к группам в oscam.user. Если группы совпадают — пользователь получает доступ к ридеру. Это гибче, потому что можно одной картой обслуживать разные группы пользователей с разными правами.
Почему для локальных карт стабильнее OScam
CCcam — монолитный эмулятор без нормального API для управления ридерами. Его логика приоритетов не всегда предсказуема. OScam написан с нуля с явной системой маршрутизации: каждый ECM-запрос проходит через oscam.dvbapi, приоритеты задаются явно, кэш ECM настраивается отдельно.
На практике: с CCcam как единственным эмулятором на ресивере с 2–3 пирами и одной локальной картой замечаешь случайные фризы в 2–4 секунды, когда CCcam почему-то идёт к сетевому пиру вместо локальной карты. С OScam + правильными приоритетами это уходит полностью.
Приоритеты декодирования: как заставить ресивер открывать локальные каналы первыми
Это главная боль при настройке. Ресивер фризит секунды на 3–5, потому что эмулятор сначала пробует сетевой пир, получает таймаут, и только потом идёт к локальной карте. Или наоборот — локальная карта отвечает быстро, но по какому-то CAID приоритет не выставлен, и запрос всё равно идёт в сеть.
Файл oscam.dvbapi и правила priority/ignore
oscam.dvbapi управляет тем, какой ридер получает ECM-запрос первым. Формат правил:
P: caid:provid:sid
I: caid:provid:sid
P — priority (приоритет), I — ignore. Нули означают «любой». Пример реальной конфигурации: локальная Viaccess карта с CAID 0500 должна иметь приоритет перед всеми сетевыми пирами:
# Приоритет локальной карты Viaccess
P: 0500:040110:0000
# Игнорировать сетевой пир для каналов, где SID совпадает с локальным
I: 0500:040110:1234
Если у тебя одна карта с несколькими provid — добавляй P-строку для каждого. Например, если карта даёт и 040110 и 040120:
P: 0500:040110:0000
P: 0500:040120:0000
Важный момент: если локальный CAID и сетевой пир имеют одинаковый CAID (например, оба Viaccess 0500), но разные SID — нужен I по конкретному SID, чтобы для некоторых каналов принудительно игнорировать локальный ридер и идти в сеть. Это актуально, когда карта есть, но часть каналов не в пакете подписки.
Параметр CCcam: PREFER LOCAL CARDS и GLOBAL LIST
Если ты всё же работаешь с чистым CCcam, добавь в CCcam.cfg:
PREFER LOCAL CARDS : yes
CCCAM USE CACHE : yes
PREFER LOCAL CARDS : yes говорит CCcam: перед тем как идти к пиру, сначала проверь, есть ли локальная карта с нужным CAID. Это не гарантирует нулевые фризы, но существенно уменьшает их частоту.
GLOBAL LIST в CCcam — это файл со списком CAID, которые CCcam будет шарить. Если хочешь ограничить шаринг конкретными CAID — создай файл и укажи его путь в директиве. Так ты защищаешь часть каналов от утечки в сеть.
Маршрутизация по CAID:provid в oscam.services
oscam.services позволяет создавать именованные группы каналов по CAID/provid/SID и потом ссылаться на них из oscam.user и oscam.server. Пример:
[services]
ident = 0500:040110,040120
caid = 0500
name = local_viaccess_pkg
После этого в oscam.server для локального ридера добавляешь services=local_viaccess_pkg, а для сетевого пира — services=!local_viaccess_pkg (знак ! означает «исключить»). Это жёсткое разделение: локальный ридер обрабатывает эти CAID, сетевой — всё остальное. Никаких конфликтов.
Порты, протокол и проверка связи
Диагностика — это половина работы. Смотреть в логи вслепую неэффективно, а вебинтерфейс OScam показывает всё, что нужно, в реальном времени.
Порт по умолчанию 12000 и его смена в CCcam.cfg
CCcam по умолчанию слушает на порту 12000. Задаётся директивой:
SERVER LISTEN PORT : 12000
Менять порт имеет смысл только если на 12000 конфликт с другим процессом или ты хочешь скрыть стандартный порт от сканеров. Для работы внутри локальной сети пробрасывать порт наружу не нужно. Проброс нужен только если клиенты подключаются извне через NAT.
Проверить, что CCcam поднялся на порту: netstat -tlnp | grep 12000 или ss -tlnp | grep 12000. Если строки нет — CCcam не запустился или упал после старта.
Webif OScam (порт 8888) для диагностики ридеров
В oscam.conf в секции [webif] должно стоять:
[webif]
httpport = 8888
httpuser = admin
httppwd = yourpassword
httprefresh = 10
После запуска OScam открывай http://192.168.1.x:8888 в браузере. Вкладка Readers — там видно статус каждого ридера. Строка CARDOK означает, что карта определена и отвечает. Рядом — количество entitlements (подписок), ECM time в миллисекундах и количество успешных/неуспешных декодирований.
Если видишь CARDOK но ECM count не растёт при переключении на канал — проблема в маршрутизации: запросы до ридера не доходят. Если ECM count растёт, но каналы не открываются — неверный CAID или нет нужных entitlements.
Проверка ECM-времени и статуса карты
Нормальное ECM time для локального internal ридера — 80–250 мс. Если видишь 800–1200 мс — карта отвечает медленно, возможно неверная частота (cardmhz). Если ECM time 0 и статус ошибки — ридер не может прочитать карту.
Логи OScam читаются командой: tail -f /tmp/oscam.log. Полезные строки для поиска:
grep "ECM" /tmp/oscam.log | tail -50
grep "reader" /tmp/oscam.log | grep -i "error\|fail\|timeout"
Для CCcam лог доступен через telnet: telnet localhost 16001. Пароль по умолчанию пустой. Команда l показывает последние строки лога, c — текущих клиентов, s — серверы (пиры).
Entitlements локальной карты в OScam webif — раздел Readers → кнопка Entitlements рядом с нужным ридером. Там список всех пакетов, доступных на карте, с датами окончания подписки. Если нужного пакета нет — канал через эту карту не откроется ни при каких настройках.
Типичные ошибки и их устранение
Большинство проблем с локальными картами сводится к четырём сценариям. Разберём каждый с конкретными действиями.
Карта определяется, но каналы не открываются (неверный CAID/ident)
Симптом: в webif ридер показывает CARDOK и даже entitlements есть, но при переключении на канал — чёрный экран или заморозка.
Первым делом смотришь в лог: grep "not found\|no reader\|no provider" /tmp/oscam.log. Если видишь что-то типа no matching reader found for — проблема в маршрутизации. Открываешь oscam.server и проверяешь строку ident. Реальный CAID и provid карты можно увидеть в webif → Readers → кликнуть на название ридера → там будет таблица с CAID и ident.
Типичная ошибка: написать caid=0500 без ident вообще. Тогда OScam принимает любой запрос с CAID 0500, но если у карты нет нужного provid в подписке — ECM завершается с ошибкой. Ident нужно заполнять точно по данным карты.
Фризы из-за конкуренции с сетевыми пирами
Симптом: канал открывается, но раз в 10–30 секунд фризит на 3–5 секунд. В логе видно, что OScam уходит к сетевому пиру и ждёт ответа.
Решение — правила приоритета в oscam.dvbapi, описанные выше. Если уже выставил P-строки и фризы остались — проверь, что OScam перечитал конфиг: kill -HUP $(pidof oscam) или через webif → Config → Reload. Также проверь, что в oscam.server у локального ридера group правильно совпадает с группой пользователя в oscam.user.
Ещё один вариант: в oscam.server для локального ридера добавь cccprio=0500:040110 — это даёт дополнительный приоритет для конкретного CAID при использовании CCcam-протокола.
Card not inserted / reader timeout
Видишь в логе card not inserted или reader timeout — карта физически не определяется.
Первое: проверь dmesg | grep sci или dmesg | grep tty. Должна быть строка об инициализации устройства. Если её нет — проблема на уровне драйвера или железа.
Второе: попробуй изменить частоту. Некоторые карты не запускаются на стандартных 357 МГц. Тестируй 600 (cardmhz=600 mhz=600) и 368 (cardmhz=368). Ещё помогает добавить ins7e11=FF для некоторых карт Viaccess.
Третье: порядок автозапуска. При перезагрузке ресивера /dev/sci0 появляется не мгновенно. Если OScam стартует слишком быстро — ридер не успевает инициализироваться. В скрипте автозапуска добавь задержку: sleep 5 && /usr/bin/oscam -c /etc/tuxbox/config/oscam &. На Enigma2 это правится в /etc/init.d/oscam.
Права доступа на /dev/sci0 и конфликт двух эмуляторов
Это самая неочевидная проблема. Если на ресивере одновременно запущены CCcam и OScam, и оба пытаются работать с /dev/sci0 — один из них не получит доступ к устройству. Симптом: один из эмуляторов работает нормально, второй выдаёт cannot open device или device busy.
Правильная схема: OScam держит локальный ридер (/dev/sci0), CCcam работает только с сетевыми пирами без локальных ридеров. Или наоборот — полностью переходишь на OScam, убираешь CCcam из автозапуска. Проверить, кто занял устройство: fuser /dev/sci0 — покажет PID процесса.
Права доступа: OScam должен запускаться от root или от пользователя в группе video/root. Проверить: ls -la /dev/sci0. Должно быть crw-rw---- с группой root или video. Если прав нет: chmod 666 /dev/sci0 — временное решение, постоянное — добавить правило в udev.
Вот ситуация, которая встречается реже но сбивает с толку: ресивер с двумя CI-слотами и внутренним картоприёмником одновременно. /dev/sci0 — обычно внутренний слот, /dev/sci1 — второй. Если OScam настроен на /dev/sci0, а карта вставлена в /dev/sci1 — ридер не определит карту. Проверяй командой dmesg | grep sci, какое устройство на самом деле активно.
Локальные каналы через CCcam: настройка дополнительных сценариев
Несколько случаев, которые часто остаются за кадром в стандартных мануалах.
Карта с несколькими provid, где часть каналов локальная, а часть только по шарингу — это нормальная ситуация для операторов с несколькими пакетами. Решение: в oscam.dvbapi прописывай P-строки только для тех provid, которые есть на карте. Для остальных провайдов запросы автоматически пойдут к сетевым пирам.
При добавлении нового сетевого пира с тем же CAID, что у локальной карты, убедись, что P-строка в oscam.dvbapi стоит именно для локального ридера. Иначе OScam может рандомно распределять запросы между локальным и сетевым — и это источник непредсказуемых фризов.
Автозапуск при перезагрузке — добавь в /etc/init.d/oscam проверку существования устройства перед запуском:
while [ ! -e /dev/sci0 ]; do sleep 1; done
/usr/bin/oscam -c /etc/tuxbox/config/oscam -b &
Параметр -b запускает OScam в фоне. Без проверки наличия устройства ридер может не инициализироваться при быстрой загрузке ресивера.
Частые вопросы
Где лежит файл CCcam.cfg и как его редактировать на ресивере?
Чаще всего /var/etc/CCcam.cfg, реже /usr/keys/CCcam.cfg. Проверить точный путь: find / -name CCcam.cfg 2>/dev/null. Редактировать через FTP-клиент (FileZilla, WinSCP) или telnet + текстовый редактор vi/nano. После правки перезапустить эмулятор командой /etc/init.d/ccam restart или через Blue Panel на Enigma2.
Чем отличается отдача локальной карты через F-line в CCcam от reader в OScam?
F-line в CCcam — это просто строка с логином/паролем клиента, которому разрешено декодировать через локальный ридер по протоколу CCcam. Гибкость минимальная: можно ограничить CAID, но не provid. В OScam локальная карта описывается как reader с protocol=internal в oscam.server, привязывается к группам, а каждый пользователь в oscam.user тоже привязывается к группам. Это даёт точный контроль: кто, к какой карте и по каким CAID имеет доступ.
Как сделать, чтобы локальные каналы открывались быстрее сетевых?
В CCcam добавить в CCcam.cfg строку PREFER LOCAL CARDS : yes. В OScam — прописать в oscam.dvbapi строки P: caid:provid:0000 для каждого CAID локальной карты, и добавить параметр cccprio в oscam.server для ридера. Это исключает перебор сетевых пиров и ресивер получает ECM-ответ напрямую с карты за 100–200 мс вместо 500–800 мс через сеть.
Какой порт использует CCcam по умолчанию и нужно ли его открывать?
Стандартный порт — 12000, задаётся директивой SERVER LISTEN PORT : 12000 в CCcam.cfg. Для работы в локальной сети открывать порт наружу не нужно. Проброс через NAT-роутер требуется только если к твоему серверу подключаются клиенты из внешней сети. Проверить, что CCcam слушает порт: ss -tlnp | grep 12000.
Карта определяется как CARDOK, но каналы всё равно не открываются — почему?
Четыре основные причины: неверный ident в oscam.server (провайдер есть, но CAID/provid не совпадают с реальными данными карты), нет нужных entitlements (канал не в подписке), неправильный приоритет в oscam.dvbapi (запросы уходят к сетевому пиру вместо карты), конфликт двух эмуляторов за /dev/sci0. Проверить: tail -f /tmp/oscam.log и раздел Readers в webif OScam (порт 8888).
Можно ли одновременно запускать CCcam и OScam на одном ресивере?
Технически — да, но они не должны делить один физический ридер. Рабочая схема: OScam управляет локальной картой через /dev/sci0, CCcam работает только с сетевыми пирами (без SERIAL READER в конфиге). Или полный переход на OScam — он умеет и шаринг через CCcam-протокол, и локальные ридеры. Если оба эмулятора претендуют на /dev/sci0 — один получит device busy и карта не инициализируется.