Acesso condicional DVB SimulCrypt¶
media.access.cas
O Sapsan oferece suporte ao embaralhamento da saída MPEG-TS ao vivo por DVB SimulCrypt. A mídia é protegida pelo algoritmo DVB-CSA2, enquanto um sistema externo de acesso condicional — CAS — gera as mensagens usadas pelo receptor para obter as chaves.
A configuração se aplica a um único stream e à sua saída SPTS compartilhada: um programa no fluxo de transporte. Essa é a função media.access.cas. A criptografia de um multiplex de vários programas, identificada na tabela de recursos dos planos como media.mux.simulcrypt, é uma capacidade separada; a implementação descrita aqui não significa que ela esteja disponível no Sapsan.
Como o sistema funciona¶
A comunicação com os componentes do CAS usa as interfaces ECMG–SCS e EMMG–MUX da ETSI TS 103 197.
| Participante | Função |
|---|---|
| Sapsan | Gera as palavras de controle CW, organiza a troca de chaves e embaralha o MPEG-TS. |
| ECMG do fornecedor de CAS | Recebe as CW e os critérios de acesso e gera mensagens ECM para os receptores. |
| EMMG do fornecedor de CAS | Gera mensagens EMM com os direitos de acesso; quando necessário, envia-as ao Sapsan para inclusão no fluxo. |
| Receptor com suporte ao CAS | Recebe ECM e usa seus recursos de acesso condicional para recuperar as CW e decodificar o programa autorizado. |
CW — control word — é a chave de embaralhamento de um determinado criptoperíodo. Nesta implementação, o Sapsan gera a CW; o ECMG gera a mensagem ECM a partir dela, considerando os critérios de acesso enviados.
A operação se repete em ciclos:
- O Sapsan estabelece uma conexão TCP com o ECMG e abre uma sessão para o stream.
- O Sapsan gera as CW antecipadamente e as envia com
access_criteriaem mensagensCW_provision. - O ECMG retorna as ECM dos criptoperíodos correspondentes.
- O Sapsan embaralha o payload dos PIDs de mídia e adiciona ECM ao fluxo de transporte. Um descritor CA aparece na PMT, indicando o sistema de acesso condicional e o PID das ECM.
- Nos limites dos criptoperíodos, as próximas CW são usadas, alternando os indicadores even/odd. O momento da troca é determinado pelo PCR do fluxo.
ECM e EMM têm funções diferentes. A ECM permite que um receptor autorizado obtenha a CW do programa. A EMM entrega direitos aos recursos de acesso condicional do assinante. O Sapsan recebe EMM prontas do fornecedor de CAS; as assinaturas e o conteúdo dessas mensagens são gerados pelo sistema externo.
A quais saídas o embaralhamento se aplica¶
A seção mpegts.encryption é definida no nível do stream. O embaralhamento é executado uma única vez antes de distribuir o MPEG-TS compartilhado aos consumidores:
- UDP, incluindo encapsulamento em RTP — push de saída MPEG-TS.
- SRT — push MPEG-TS e entrega SRT ao vivo.
- RIST — push MPEG-TS.
- HTTP MPEG-TS — entrega contínua ao vivo da saída TS compartilhada.
Vários desses destinos usam um contexto CAS compartilhado. Não é possível configurar um ECMG ou uma chave separada para cada push por meio dessa seção: encryption nas configurações de uma saída é rejeitada. A seleção de faixas individuais por tracks em um push MPEG-TS de um stream criptografado também não é suportada.
As configurações de PIDs e PSI de saída podem ser aplicadas sobre o fluxo compartilhado já embaralhado.
O embaralhamento dessa saída não ativa a proteção de outros métodos de entrega. Em particular, não criptografa DASH/fMP4 nem segmentos HLS, não protege a saída RTMP e não criptografa a gravação DVR. A proteção de HLS/DASH é oferecida pela função separada de DRM. O acesso às demais saídas deve ser configurado separadamente.
Configuração do ECMG¶
A configuração é enviada pela API do central. Abaixo está um fragmento YAML de um stream com entrada UDP e saída UDP embaralhada:
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
Substitua os endereços e os valores de CAS pelos acordados com o fornecedor. v1 e a1 no exemplo devem corresponder às faixas do seu stream. Os direitos do dispositivo do assinante para o programa escolhido devem estar configurados no CAS.
Parâmetro de mpegts.encryption |
Valor |
|---|---|
type |
simulcrypt; único tipo suportado nesta seção, usado por padrão. |
ecmg |
Endereço obrigatório do ECMG externo no formato host:port. O Sapsan se conecta a ele como cliente TCP. |
cas_id |
super_CAS_id hexadecimal obrigatório, de até 32 bits. No exemplo, 4ae1 é o CA_system_id, e 0006, o CA_subsystem_id. |
ecm_pid |
PID obrigatório para ECM no MPEG-TS de saída. |
ecm_id |
Identificador do stream ECM no fornecedor de CAS; o padrão é 1. Defina valores diferentes para streams criptografados no mesmo servidor. Não é PNR nem PID. |
access_criteria |
Critérios de acesso em hexadecimal, definidos pelo fornecedor de CAS. Quando ausente, um valor vazio é enviado. |
ecm_private_data |
Dados adicionais do fornecedor no descritor CA da PMT, em hexadecimal. |
nominal_cp_duration |
Duração do criptoperíodo em unidades de 100 ms. O padrão é 15, ou seja, 1,5 segundo. O valor zero não é permitido. |
Envie os valores hexadecimais como strings entre aspas. Os PIDs atribuídos explicitamente devem estar no intervalo de 32–8190 e não apresentar conflitos: os PIDs de mídia, PMT, ECM e EMM devem ser diferentes.
O cliente ECMG atual usa a versão 3 do protocolo. Os parâmetros do criptoperíodo e a compatibilidade com o ECMG específico devem ser acordados com o fornecedor: receber seu channel_status não significa oferecer suporte a todas as opções de temporização anunciadas. Em particular, os valores lead_cw, min_cp_duration e delay_start/delay_stop não constituem um ajuste automático de temporização totalmente implementado.
Entrega de EMM¶
Se os direitos precisarem ser entregues por esse fluxo de transporte, adicione os campos a seguir à mesma seção mpegts.encryption, mantendo as configurações do ECMG:
emmg_listen: "0.0.0.0:2233"
emm_pid: 200
emm_private_data: "15"
emm_bitrate: 500
Aqui, a direção da conexão é inversa: o Sapsan escuta em uma porta TCP, e o injetor de EMM do fornecedor se conecta a ela e envia as mensagens prontas. O Sapsan as inclui no PID especificado e anuncia esse PID por um descritor CA na CAT.
| Parâmetro | Valor |
|---|---|
emmg_listen |
Endereço e porta locais do listener EMMG–MUX. Sem ele, a entrega de EMM fica desativada. |
emm_pid |
PID das EMM. É definido junto com emmg_listen; um desses parâmetros sem o outro não é permitido. |
emm_private_data |
Dados do fornecedor no descritor CA da CAT. Se não forem definidos, são usados os dados de ecm_private_data. |
emm_bitrate |
Largura de banda para inserção de EMM em kbit/s; o padrão é 500. Não é o bitrate da mídia. |
Cada stream com EMM cria seu próprio listener. Para streams simultaneamente ativos, escolha endereços e portas livres, sem conflitos. A conexão ao ECMG exige acesso TCP de saída; a entrega de EMM exige acesso TCP de entrada a partir do injetor.
A entrega de EMM por esse caminho é opcional: o embaralhamento pode funcionar se os direitos chegarem ao dispositivo de outra forma. A presença de ECM sem direitos válidos não garante a decodificação pelo assinante.
Inserção de mensagens e comportamento em falhas¶
ECM e EMM ocupam os espaços dos pacotes nulos. O filtro preserva a quantidade e a ordem dos pacotes TS, além da posição do PCR. ECM tem prioridade sobre EMM. Para entregar as mensagens no momento adequado, é necessária uma reserva suficiente de pacotes nulos; se ela for insuficiente, a inserção de ECM é adiada.
Verifique a formação de CBR e o preenchimento ao dimensionar o fluxo de saída. Uma comunicação bem-sucedida com o ECMG, por si só, não confirma que as ECM já estejam entrando no transporte com a frequência necessária.
Na ausência de uma CW válida, o Sapsan anula o payload dos pacotes de mídia, preservando os cabeçalhos e os campos de adaptação com PCR. Uma falha do ECMG não faz essa saída MPEG-TS passar a transmitir a mídia em claro. PSI/SI e as mensagens de acesso condicional permanecem sem embaralhamento para que o receptor possa interpretar o transporte.
O cliente se reconecta automaticamente ao ECMG com pausas crescentes. As chaves preparadas podem cobrir uma interrupção curta da conexão. Se faltarem chaves para os próximos criptoperíodos, a reprodução será interrompida até que o recebimento delas seja restabelecido.
Alterar o endereço do ECMG ou os parâmetros da sessão CAS recria a sessão e pode causar uma pausa até a obtenção de novas ECM. Remover a seção encryption desativa o embaralhamento — trata-se de uma alteração de configuração, diferente de uma falha de rede do ECMG.
Monitoramento¶
No streamer que executa o embaralhamento, consulte as estatísticas de um único stream:
curl -fsS -u "$ADMIN_USER:$ADMIN_PASSWORD" \
http://streamer:8080/streamer/api-v4/streams/stats/tv1 \
| jq '{name, cas}'
A seção cas oferece três contadores acumulativos:
| Campo | O que mostra |
|---|---|
scrambled_packets_total |
Número de pacotes TS embaralhados. |
ecm_received_total |
Número de ECM recebidas. |
ecmg_errors_total |
Número de erros na comunicação com o ECMG. |
Compare os valores ao longo de um intervalo. Os contadores são preservados quando o componente CAS é recriado, e a seção cas pode permanecer após a desativação da criptografia. Sua presença, por si só, não confirma que o embaralhamento esteja ativado no momento. As estatísticas compactas do central não substituem a consulta desses contadores detalhados no streamer que executa o embaralhamento.
Quando a exportação de métricas está disponível, /streamer/api-v4/live-metrics contém:
stream_cas_scrambled_packets_total— pacotes embaralhados.stream_cas_ecm_received_total— ECM recebidas.stream_cas_ecmg_errors_total— erros do ECMG.
Os detalhes da rotação de CW e dos atrasos na inserção de ECM estão nos logs do streamer. O preenchimento dos payloads de mídia para anulá-los e os contadores de EMM também aparecem ali. Esses indicadores adicionais não fazem parte da seção pública cas.
Verificação antes de entrar em operação¶
- Acorde os identificadores e os critérios de acesso com o fornecedor de CAS. Verifique o suporte à versão do protocolo ECMG e ao criptoperíodo escolhido.
- Aplique a configuração e confirme que
ecm_received_totalaumenta e que não há erros do ECMG, ou que sua causa foi identificada. - Capture o MPEG-TS de saída e verifique o descritor CA da PMT e a presença de ECM no PID anunciado. Ao entregar EMM, verifique a CAT e o PID correspondente.
- Verifique o embaralhamento dos PIDs de mídia e a reprodução real em um receptor com acesso autorizado. Os contadores do servidor, por si só, não bastam para essa verificação.
- Interrompa a conexão ao ECMG de forma controlada. Verifique a anulação dos payloads de mídia após o esgotamento das chaves preparadas e a retomada da reprodução quando o ECMG voltar.
- Para vários destinos de entrega, verifique cada saída, incluindo os PIDs redefinidos e os parâmetros PSI.
A configuração atual define um contexto CAS e um ECMG por stream; não há uma lista de fornecedores de CAS conectados simultaneamente. Há suporte a DVB-CSA2; esta seção não oferece seleção de CSA3 ou AES. A compatibilidade com o ECMG e o equipamento do assinante de um fornecedor específico deve ser verificada em um teste conjunto.