Условный доступ 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 с учётом переданных критериев доступа.
Работа продолжается циклически:
- Sapsan устанавливает TCP-соединение с ECMG и открывает сеанс для стрима.
- Sapsan заранее генерирует CW и передаёт их вместе с
access_criteriaв сообщенияхCW_provision. - ECMG возвращает ECM для соответствующих криптопериодов.
- Sapsan скремблирует полезную нагрузку медиа-PID и добавляет ECM в транспортный поток. В PMT появляется CA-дескриптор, указывающий систему условного доступа и PID ECM.
- На границах криптопериодов используются следующие 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.
Проверка перед вводом в эксплуатацию¶
- Согласуйте с поставщиком CAS идентификаторы и критерии доступа. Проверьте поддержку версии протокола ECMG и выбранного криптопериода.
- Примените конфигурацию и убедитесь, что растёт
ecm_received_total, а ошибок ECMG нет либо их причина понятна. - Снимите выходной MPEG-TS и проверьте CA-дескриптор PMT и наличие ECM на заявленном PID. При доставке EMM проверьте CAT и соответствующий PID.
- Проверьте скремблирование медиа-PID и реальное воспроизведение на приёмнике с разрешённым доступом. Одних счётчиков сервера для этой проверки недостаточно.
- Прервите соединение с ECMG контролируемым способом. Проверьте гашение медиа после исчерпания подготовленных ключей и восстановление воспроизведения после возвращения ECMG.
- Для нескольких направлений выдачи проверьте каждый выход, включая переопределённые PID и параметры PSI.
Текущая конфигурация задаёт один контекст CAS и один ECMG на стрим; списка одновременно подключённых CAS-провайдеров нет. Поддержан DVB-CSA2, выбор CSA3 или AES этой секцией не предусмотрен. Совместимость с ECMG и абонентским оборудованием конкретного поставщика проверяется совместным прогоном.