Skip to content

Acceso condicional DVB SimulCrypt

media.access.cas

Sapsan admite la aleatorización de la salida MPEG-TS en directo mediante DVB SimulCrypt. Los medios se protegen con el algoritmo DVB-CSA2, mientras que un sistema externo de acceso condicional — CAS — genera los mensajes que permiten al receptor obtener las claves.

La configuración se aplica a un stream y a su salida SPTS común: un programa en el flujo de transporte. Esta es la función media.access.cas. El cifrado de un múltiplex de varios programas, identificado en la lista de funciones tarifarias como media.mux.simulcrypt, es una capacidad independiente; la implementación descrita aquí no implica que esté disponible en Sapsan.

Cómo funciona el sistema

La comunicación con los componentes de CAS utiliza las interfaces ECMG–SCS y EMMG–MUX de ETSI TS 103 197.

Participante Función
Sapsan Genera palabras de control CW, gestiona la rotación de claves y aleatoriza MPEG-TS.
ECMG del proveedor de CAS Recibe CW y criterios de acceso, y genera mensajes ECM para los receptores.
EMMG del proveedor de CAS Genera mensajes EMM con derechos de acceso; si es necesario, los envía a Sapsan para insertarlos en el flujo.
Receptor compatible con CAS Recibe ECM y utiliza sus mecanismos de acceso condicional para recuperar las CW y decodificar el programa autorizado.

Una CW — control word — es una clave de aleatorización para un criptoperiodo determinado. En esta implementación, Sapsan genera la CW; el ECMG la utiliza para generar un mensaje ECM según los criterios de acceso recibidos.

El funcionamiento se repite de forma cíclica:

  1. Sapsan establece una conexión TCP con el ECMG y abre una sesión para el stream.
  2. Sapsan genera las CW con antelación y las envía junto con access_criteria en mensajes CW_provision.
  3. El ECMG devuelve ECM para los criptoperiodos correspondientes.
  4. Sapsan aleatoriza la carga útil de los PID de medios e inserta ECM en el flujo de transporte. En la PMT aparece un descriptor CA que identifica el sistema de acceso condicional y el PID de ECM.
  5. En los límites de los criptoperiodos se utilizan las siguientes CW, alternando los indicadores even/odd. El momento del cambio se determina mediante el PCR del flujo.

ECM y EMM cumplen funciones distintas. ECM permite a un receptor autorizado obtener la CW de un programa. EMM entrega derechos a los mecanismos de acceso condicional del suscriptor. Sapsan recibe EMM ya generados por el proveedor de CAS; las suscripciones y el contenido de estos mensajes se gestionan en el sistema externo.

A qué salidas se aplica la aleatorización

La sección mpegts.encryption se configura a nivel de stream. La aleatorización se realiza una sola vez antes de distribuir la salida MPEG-TS común a los consumidores:

  • UDP, incluida la encapsulación en RTP — push de salida MPEG-TS.
  • SRT — push MPEG-TS y entrega SRT en directo.
  • RIST — push MPEG-TS.
  • HTTP MPEG-TS — entrega continua en directo de la salida TS común.

Varios destinos de este tipo comparten un contexto CAS. Esta sección no permite configurar un ECMG o una clave independiente para cada push: se rechaza encryption dentro de la configuración de un canal de salida. Tampoco se admite seleccionar pistas individuales mediante tracks en un push MPEG-TS de un stream cifrado.

Los ajustes de PID y PSI de salida pueden aplicarse sobre el flujo aleatorizado común.

La aleatorización de esta salida no activa la protección de otros métodos de entrega. En concreto, no cifra DASH/fMP4 ni los segmentos HLS, no protege la salida RTMP ni cifra las grabaciones DVR. Para proteger HLS/DASH existe una función independiente de DRM. El acceso a las demás salidas debe configurarse por separado.

Configuración de ECMG

La configuración se envía a través de la API de central. El siguiente fragmento YAML define un stream con entrada UDP y salida UDP aleatorizada:

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

Sustituya las direcciones y los valores de CAS por los acordados con el proveedor. Los identificadores v1 y a1 del ejemplo deben corresponder a las pistas de su stream. Los derechos del dispositivo del suscriptor para el programa elegido deben estar configurados en CAS.

Parámetro de mpegts.encryption Significado
type simulcrypt; único tipo admitido en esta sección, utilizado de forma predeterminada.
ecmg Dirección obligatoria del ECMG externo en formato host:port. Sapsan se conecta como cliente TCP.
cas_id super_CAS_id hexadecimal obligatorio, de hasta 32 bits. En el ejemplo, 4ae1 es CA_system_id y 0006 es CA_subsystem_id.
ecm_pid PID obligatorio para ECM en el MPEG-TS de salida.
ecm_id Identificador del stream ECM en el proveedor de CAS, con valor predeterminado 1. Utilice valores distintos para los streams cifrados de un mismo servidor. No es un PNR ni un PID.
access_criteria Criterios de acceso en hexadecimal, definidos por el proveedor de CAS. Si se omiten, se envía un valor vacío.
ecm_private_data Datos adicionales del proveedor en el descriptor CA de la PMT, en hexadecimal.
nominal_cp_duration Duración del criptoperiodo en unidades de 100 ms. El valor predeterminado es 15, es decir, 1,5 segundos. No se admite cero.

Envíe los valores hexadecimales como cadenas entre comillas. Los PID asignados explícitamente deben estar en el intervalo 32–8190 y no entrar en conflicto: los PID de medios, PMT, ECM y EMM deben ser distintos.

El cliente ECMG actual utiliza la versión de protocolo 3. Acuerde con el proveedor los parámetros del criptoperiodo y la compatibilidad con el ECMG concreto: recibir su channel_status no implica admitir todas las variantes de temporización anunciadas. En particular, lead_cw, min_cp_duration y delay_start/delay_stop no constituyen un mecanismo completamente implementado de configuración automática de tiempos.

Entrega de EMM

Si los derechos deben entregarse a través de este flujo de transporte, añada los siguientes campos a la misma sección mpegts.encryption, conservando los ajustes de ECMG:

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

Aquí se invierte el sentido de la conexión: Sapsan escucha en un puerto TCP y el inyector EMM del proveedor se conecta y envía los mensajes ya generados. Sapsan los inserta en el PID indicado y lo anuncia mediante un descriptor CA en la CAT.

Parámetro Significado
emmg_listen Dirección y puerto locales del listener EMMG–MUX. Sin este parámetro, la entrega de EMM está desactivada.
emm_pid PID de EMM. Debe configurarse junto con emmg_listen; no se admite uno sin el otro.
emm_private_data Datos del proveedor en el descriptor CA de la CAT. Si se omiten, se utiliza ecm_private_data.
emm_bitrate Ancho de banda para insertar EMM, en kbit/s; valor predeterminado 500. No es la tasa de bits de los medios.

Cada stream con EMM crea su propio listener. Para streams que funcionan simultáneamente, elija direcciones y puertos libres que no entren en conflicto. La conexión con ECMG requiere acceso TCP saliente; la entrega de EMM requiere acceso TCP entrante desde el inyector.

La entrega de EMM es opcional: la aleatorización puede funcionar si los derechos llegan al dispositivo por otro medio. La presencia de ECM sin derechos válidos no garantiza la decodificación en el dispositivo del suscriptor.

Inserción de mensajes y comportamiento ante fallos

ECM y EMM ocupan el lugar de paquetes nulos. El filtro conserva el número y el orden de los paquetes TS, así como la posición del PCR. ECM tiene prioridad sobre EMM. Para entregar los mensajes a tiempo se necesita suficiente capacidad de paquetes nulos; si es insuficiente, se aplaza la inserción de ECM.

Compruebe la generación de CBR y el relleno al dimensionar el flujo de salida. Una sesión correcta con ECMG no confirma por sí sola que ECM ya esté entrando en el transporte con la frecuencia necesaria.

Si no hay una CW válida, Sapsan anula la carga útil de los paquetes de medios, conservando las cabeceras y los campos de adaptación que contienen PCR. Un fallo del ECMG no hace que esta salida MPEG-TS pase a transmitir los medios en claro. PSI/SI y los mensajes de acceso condicional permanecen sin aleatorizar para que el receptor pueda analizar el transporte.

El cliente se reconecta automáticamente al ECMG con un retraso creciente. Las claves preparadas pueden cubrir una interrupción breve de la conexión. Si se agotan las claves para los siguientes criptoperiodos, la reproducción se interrumpe hasta que se reanuda su recepción.

Cambiar la dirección del ECMG o los parámetros de la sesión CAS vuelve a crear la sesión y puede provocar una pausa hasta recibir nuevos ECM. Eliminar la sección encryption desactiva la aleatorización: es un cambio de configuración distinto de un fallo de red del ECMG.

Supervisión

En el streamer que realiza la aleatorización, solicite las estadísticas de un stream:

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

La sección cas proporciona tres contadores acumulativos:

Campo Qué indica
scrambled_packets_total Número de paquetes TS aleatorizados.
ecm_received_total Número de ECM recibidos.
ecmg_errors_total Número de errores de comunicación con ECMG.

Compare los valores durante un intervalo. Los contadores se conservan al volver a crear el componente CAS, y la sección cas puede permanecer después de desactivar el cifrado. Su presencia no confirma por sí sola que la aleatorización esté activada en ese momento. Las estadísticas compactas de central no sustituyen una consulta al streamer que realiza la aleatorización para obtener estos contadores detallados.

Si la exportación de métricas está disponible, /streamer/api-v4/live-metrics contiene:

  • stream_cas_scrambled_packets_total — paquetes aleatorizados.
  • stream_cas_ecm_received_total — ECM recibidos.
  • stream_cas_ecmg_errors_total — errores de ECMG.

Los detalles de la rotación de CW y de los retrasos de inserción de ECM se encuentran en los logs del streamer. Allí también se informa de la anulación de los medios y los contadores de EMM. Estos indicadores adicionales no se incluyen en la sección pública cas.

Comprobación antes de la puesta en servicio

  1. Acuerde los identificadores y criterios de acceso con el proveedor de CAS. Compruebe la compatibilidad con la versión de protocolo ECMG y el criptoperiodo elegido.
  2. Aplique la configuración y confirme que ecm_received_total aumenta y que no hay errores de ECMG o que su causa se conoce.
  3. Capture el MPEG-TS de salida y compruebe el descriptor CA de la PMT y la presencia de ECM en el PID anunciado. Si se entregan EMM, compruebe la CAT y el PID correspondiente.
  4. Compruebe la aleatorización de los PID de medios y la reproducción real en un receptor autorizado. Los contadores del servidor no bastan para esta comprobación.
  5. Interrumpa la conexión con ECMG de forma controlada. Compruebe la anulación de los medios al agotarse las claves preparadas y la recuperación de la reproducción cuando vuelve el ECMG.
  6. Si hay varios destinos de entrega, compruebe cada salida, incluidos los PID y los parámetros PSI personalizados.

La configuración actual define un contexto CAS y un ECMG por stream; no hay una lista de proveedores CAS conectados simultáneamente. Se admite DVB-CSA2; esta sección no permite elegir CSA3 o AES. La compatibilidad con el ECMG y los equipos de suscriptor de un proveedor concreto debe verificarse mediante una prueba de extremo a extremo.