Skip to content

Условный доступ DVB SimulCrypt

media.access.cas

Sapsan поддерживает скремблирование выходного live MPEG-TS по DVB SimulCrypt. Медиа защищается алгоритмом DVB-CSA2, а сообщения для получения ключей приёмником формирует внешняя система условного доступа — CAS.

Настройка относится к одному стриму и его общему SPTS-выходу: одна программа в транспортном потоке. Это функция media.access.cas. Шифрование многопрограммного мультиплекса, обозначенное в тарифной сетке как media.mux.simulcrypt, является отдельной возможностью; описанная здесь реализация не означает её наличия в Sapsan.

Как работает система

Обмен с компонентами CAS использует интерфейсы ECMG–SCS и EMMG–MUX из ETSI TS 103 197.

Участник Роль
Sapsan Генерирует управляющие слова CW, организует смену ключей и скремблирует MPEG-TS.
ECMG поставщика CAS Получает CW и критерии доступа, формирует сообщения ECM для приёмников.
EMMG поставщика CAS Формирует сообщения EMM с правами доступа; при необходимости передаёт их Sapsan для включения в поток.
Приёмник с поддержкой CAS Получает ECM и использует свои средства условного доступа для восстановления CW и декодирования разрешённой программы.

CW — control word — ключ скремблирования на определённый криптопериод. В этой реализации CW генерирует Sapsan; ECMG формирует из него сообщение ECM с учётом переданных критериев доступа.

Работа продолжается циклически:

  1. Sapsan устанавливает TCP-соединение с ECMG и открывает сеанс для стрима.
  2. Sapsan заранее генерирует CW и передаёт их вместе с access_criteria в сообщениях CW_provision.
  3. ECMG возвращает ECM для соответствующих криптопериодов.
  4. Sapsan скремблирует полезную нагрузку медиа-PID и добавляет ECM в транспортный поток. В PMT появляется CA-дескриптор, указывающий систему условного доступа и PID ECM.
  5. На границах криптопериодов используются следующие CW с чередованием признаков even/odd. Время смены отсчитывается по PCR потока.

ECM и EMM решают разные задачи. ECM позволяет авторизованному приёмнику получить CW для программы. EMM доставляет права средствам условного доступа абонента. Sapsan принимает готовые EMM от поставщика CAS; формирование подписок и содержимого этих сообщений выполняется внешней системой.

На какие выходы действует скремблирование

Секция mpegts.encryption задаётся на уровне стрима. Скремблирование выполняется один раз перед раздачей общего MPEG-TS потребителям:

  • UDP, включая инкапсуляцию в RTP — выходной пуш MPEG-TS.
  • SRT — MPEG-TS-пуш и live SRT-выдача.
  • RIST — MPEG-TS-пуш.
  • HTTP MPEG-TS — непрерывная live-выдача общего TS-выхода.

Несколько таких направлений используют общий контекст CAS. Настроить отдельный ECMG или ключ для каждого пуша через эту секцию нельзя: encryption внутри настроек выходного канала отвергается. Выбор отдельных дорожек через tracks у MPEG-TS-пуша зашифрованного стрима также не поддерживается.

Настройки выходных PID и PSI могут применяться поверх общего скремблированного потока.

Скремблирование этого выхода не включает защиту других способов доставки. В частности, оно не шифрует DASH/fMP4 и HLS-сегменты, не защищает RTMP-выход и не шифрует запись DVR. Для защиты HLS/DASH предназначена отдельная функция DRM. Доступ к остальным выходам нужно настраивать отдельно.

Настройка ECMG

Настройка передаётся через API central. Ниже приведён YAML-фрагмент стрима с входом UDP и скремблированным UDP-выходом:

streams:
  - name: tv1
    inputs:
      - udp:
          host: 239.0.0.1
          port: 5000
    mpegts:
      pnr: 1
      pmt_pid: 1020
      pids:
        v1: 101
        a1: 102
      service_name: TV1
      encryption:
        type: simulcrypt
        ecmg: "192.0.2.10:2222"
        cas_id: "4ae10006"
        ecm_pid: 100
        ecm_id: 1
        access_criteria: "0303010000000000"
        ecm_private_data: "15"
        nominal_cp_duration: 15
    pushes:
      encrypted-out:
        udp:
          host: 239.1.1.1
          port: 5500

Замените адреса и значения CAS на согласованные с поставщиком. v1 и a1 в примере должны соответствовать дорожкам вашего стрима. Права абонентского устройства на выбранную программу должны быть настроены в CAS.

Параметр mpegts.encryption Значение
type simulcrypt; единственный поддерживаемый тип этой секции, используется по умолчанию.
ecmg Обязательный адрес внешнего ECMG в формате host:port. Sapsan подключается к нему как TCP-клиент.
cas_id Обязательный шестнадцатеричный super_CAS_id, до 32 бит. В примере 4ae1 — CA_system_id, 0006 — CA_subsystem_id.
ecm_pid Обязательный PID для ECM в выходном MPEG-TS.
ecm_id Идентификатор ECM-стрима у поставщика CAS, по умолчанию 1. Задавайте разные значения для зашифрованных стримов на одном сервере. Это не PNR и не PID.
access_criteria Критерии доступа в шестнадцатеричном виде, определяемые поставщиком CAS. При отсутствии передаётся пустое значение.
ecm_private_data Дополнительные данные поставщика в CA-дескрипторе PMT, в шестнадцатеричном виде.
nominal_cp_duration Длительность криптопериода в единицах по 100 мс. По умолчанию 15, то есть 1,5 секунды. Нулевое значение недопустимо.

Шестнадцатеричные значения передавайте строками в кавычках. Явно назначенные PID должны находиться в диапазоне 32–8190 и не конфликтовать: PID медиа и PMT, а также ECM и EMM должны различаться.

Текущий клиент ECMG использует версию протокола 3. Параметры криптопериода и совместимость с конкретным ECMG нужно согласовать с поставщиком: получение его channel_status не означает поддержку всех объявленных вариантов тайминга. В частности, значения lead_cw, min_cp_duration и delay_start/delay_stop не образуют полностью реализованную автоматическую настройку таймингов.

Доставка EMM

Если права должны доставляться через этот транспортный поток, добавьте следующие поля в ту же секцию mpegts.encryption, сохранив настройки ECMG:

emmg_listen: "0.0.0.0:2233"
emm_pid: 200
emm_private_data: "15"
emm_bitrate: 500

Здесь направление соединения обратное: Sapsan слушает TCP-порт, а EMM-инжектор поставщика подключается к нему и передаёт готовые сообщения. Sapsan включает их в указанный PID и объявляет его CA-дескриптором в CAT.

Параметр Значение
emmg_listen Локальный адрес и порт слушателя EMMG–MUX. Без него EMM-тракт выключен.
emm_pid PID EMM. Задаётся вместе с emmg_listen; один из этих параметров без другого недопустим.
emm_private_data Данные поставщика в CA-дескрипторе CAT. Если не заданы, используются ecm_private_data.
emm_bitrate Полоса вставки EMM в кбит/с; по умолчанию 500. Это не битрейт медиа.

Каждый стрим с EMM создаёт свой слушатель. Для одновременно работающих стримов выбирайте свободные адреса и порты без конфликтов. Соединение с ECMG требует исходящего TCP-доступа, доставка EMM — входящего TCP-доступа от инжектора.

EMM-тракт необязателен: скремблирование может работать, если права доставляются устройству другим способом. Наличие ECM при отсутствии действующих прав не гарантирует декодирование у абонента.

Вставка сообщений и поведение при отказах

ECM и EMM занимают места null-пакетов. Фильтр сохраняет количество и порядок TS-пакетов, а также положение PCR. ECM имеет приоритет перед EMM. Для своевременной доставки сообщений нужен достаточный запас null-пакетов; при его нехватке вставка ECM откладывается.

Проверьте формирование CBR и заполнение при подборе выходного потока. Успешный диалог с ECMG сам по себе не подтверждает, что ECM уже попадает в транспорт с нужной частотой.

При отсутствии действующего CW Sapsan гасит полезную нагрузку медиа-пакетов, сохраняя заголовки и адаптационные поля с PCR. Отказ ECMG не переключает этот MPEG-TS-выход на открытую передачу медиа. PSI/SI и сообщения условного доступа остаются нескремблированными, чтобы приёмник мог разобрать транспорт.

Клиент автоматически переподключается к ECMG с увеличивающейся задержкой. Подготовленные ключи могут покрыть короткий разрыв связи. Если ключей для следующих криптопериодов не хватает, воспроизведение прерывается до восстановления их получения.

Изменение адреса ECMG или параметров CAS-сеанса пересоздаёт его и может вызвать паузу до получения новых ECM. Удаление секции encryption отключает скремблирование — это изменение конфигурации, отличающееся от сетевого отказа ECMG.

Мониторинг

На стримере, выполняющем скремблирование, запросите статистику одного стрима:

curl -fsS -u "$ADMIN_USER:$ADMIN_PASSWORD" \
  http://streamer:8080/streamer/api-v4/streams/stats/tv1 \
  | jq '{name, cas}'

В секции cas доступны три накопительных счётчика:

Поле Что показывает
scrambled_packets_total Число скремблированных TS-пакетов.
ecm_received_total Число полученных ECM.
ecmg_errors_total Число ошибок взаимодействия с ECMG.

Сравнивайте значения за интервал. Счётчики сохраняются при пересоздании CAS-компонента, а секция cas может оставаться после отключения шифрования. Её наличие само по себе не подтверждает, что скремблирование сейчас включено. Компактная статистика central не заменяет запрос этих подробных счётчиков к стримеру, выполняющему скремблирование.

При доступном экспорте метрик /streamer/api-v4/live-metrics содержит:

  • stream_cas_scrambled_packets_total — скремблированные пакеты.
  • stream_cas_ecm_received_total — полученные ECM.
  • stream_cas_ecmg_errors_total — ошибки ECMG.

Подробности ротации CW и задержек вставки ECM находятся в логах стримера. Там же отражаются гашение медиа и счётчики EMM. Эти дополнительные показатели не входят в публичную секцию cas.

Проверка перед вводом в эксплуатацию

  1. Согласуйте с поставщиком CAS идентификаторы и критерии доступа. Проверьте поддержку версии протокола ECMG и выбранного криптопериода.
  2. Примените конфигурацию и убедитесь, что растёт ecm_received_total, а ошибок ECMG нет либо их причина понятна.
  3. Снимите выходной MPEG-TS и проверьте CA-дескриптор PMT и наличие ECM на заявленном PID. При доставке EMM проверьте CAT и соответствующий PID.
  4. Проверьте скремблирование медиа-PID и реальное воспроизведение на приёмнике с разрешённым доступом. Одних счётчиков сервера для этой проверки недостаточно.
  5. Прервите соединение с ECMG контролируемым способом. Проверьте гашение медиа после исчерпания подготовленных ключей и восстановление воспроизведения после возвращения ECMG.
  6. Для нескольких направлений выдачи проверьте каждый выход, включая переопределённые PID и параметры PSI.

Текущая конфигурация задаёт один контекст CAS и один ECMG на стрим; списка одновременно подключённых CAS-провайдеров нет. Поддержан DVB-CSA2, выбор CSA3 или AES этой секцией не предусмотрен. Совместимость с ECMG и абонентским оборудованием конкретного поставщика проверяется совместным прогоном.