Configurar a criptografia para o gerenciamento de direitos digitais e proteção de conteúdo

Para oferecer compatibilidade com o gerenciamento de direitos digitais (DRM, na sigla em inglês) e a proteção de conteúdo, configure a criptografia do seu vídeo de saída com a API Transcoder. A versão atual da API Transcoder é compatível com o DRM de criptografia comum (CENC, na sigla em inglês) do Google Widevine e do Microsoft PlayReady, bem como a proteção de conteúdo AES-128 e DRM do Apple FairPlay. A API Transcoder só é responsável pela criptografia do conteúdo.

Antes de começar

Antes de fazer upload do seu conteúdo para a API Transcoder para criptografia, você precisa encontrar e armazenar chaves aleatórias de 128 bits (32 caracteres hexadecimais). A API Transcoder usa essas chaves para criptografar o conteúdo de acordo com o contêiner. Verifique se as chaves estão registradas em uma política de licença do provedor de DRM. Isso permitirá que os jogadores descriptografem seu conteúdo posteriormente. A criptografia de conteúdo é compatível com os seguintes contêineres:

Tipo Tecnologia Formatar Codecs de vídeo Codecs de áudio
H.264 H.265 AAC
DRM FairPlay HLS TS (SAMPLE-AES) fMP4 (SAMPLE-AES) TS (SAMPLE-AES)
fMP4 (SAMPLE-AES) fMP4 (SAMPLE-AES)
DRM Widevine, PlayReady DASH fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
DRM Widevine, PlayReady HLS fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
Proteção de conteúdo AES-128 HLS, DASH fMP4, TS (AES-128) fMP4, TS (AES-128) fMP4, TS (AES-128)

O Google Widevine e o Microsoft PlayReady são compatíveis com os protocolos dynamic adaptive streaming over HTTP (DASH) e HTTP live streaming (HLS). A compatibilidade do dispositivo com esses protocolos varia. Por exemplo, HLS e DASH são compatíveis com o Android e a Web, mas apenas HLS é compatível com iOS. A saída desses protocolos é criptografada usando o padrão CENC (ISO/IEC 23001-7:2016 para fragmentos ISO-BMFF). Em particular, o esquema de criptografia precisa ser CTR AES-128.

O Apple FairPlay usa o protocolo HLS. A saída desse protocolo é criptografada usando SAMPLE-AES CBC. Para mais informações sobre essa saída, consulte Formato de criptografia de stream MPEG-2 para HTTP Live Streaming.

Proteção de conteúdo

O AES-128 é compatível com DASH ou HLS e é criptografado usando o modo CTR ou CBC.

Selecione um contêiner de saída

A API Transcoder é compatível com os seguintes contêineres:

  • TS (usando o esquema AES-128 CBC):
    • HLS com SAMPLE-AES
    • HLS com (AES-128 CTR ou AES-128 CBC)
  • fMP4:
    • HLS
      • SAMPLE-AES
    • DASH
      • MPEG-CENC
      • Esquema: AES-128 CTR ou AES-128 CBC

Criar o stream de saída multiplexada

Adicione o fluxo de saída à lista muxStreams na configuração do job. Defina as configurações de criptografia usando o objeto Encryption.

Veja a seguir um exemplo de REST/JSON para o contêiner do arquivo de saída TS:

"muxStreams": [
  {
    "key": "360p-my-video-ts",
    "fileName": "360p-my-video.ts",
    "container": "ts",
    "elementaryStreams": [
      "video-stream0",
      "audio-stream0"
    ],
    "encryption": {
      "key": "aabbccddeeff11223344556677889900",
      "iv": "00112233445566778899aabbccddeeff",
      "sampleAes": {
        "keyUri": "skd://00112233445566778899aabbccddeeff"
      }
    }
  }
]

Veja a seguir um exemplo de REST/JSON para o contêiner de saída fMP4:

"muxStreams": [
  {
    "key": "360p-my-video-fmp4",
    "container": "fmp4",
    "elementaryStreams": [
      "video-stream0"
    ],
    "fileName": "360p-my-video.fmp4",
    "encryption": {
      "key": "aabbccddeeff11223344556677889900",
      "iv": "00112233445566778899aabbccddeeff",
      "sampleAes": {
        "keyUri": "skd://00112233445566778899aabbccddeeff"
      }
    }
  },
  {
    "key": "360p-my-audio-fmp4",
    "container": "fmp4",
    "elementaryStreams": [
      "audio-stream0"
    ],
    "fileName": "360p-my-audio.fmp4",
    "encryption": {
      "key": "aabbccddeeff11223344556677889900",
      "iv": "00112253445566778899aabbccddeeff",
      "sampleAes": {
        "keyUri": "skd://00112233445566778899aabbccddeeff"
      }
    }
  }
]

Adicione os streams de saída ao arquivo de manifesto

Veja a seguir um exemplo de REST/JSON para o contêiner do arquivo de saída TS:

"manifests": [
  {
    "fileName": "manifest.m3u8",
    "type": "HLS",
    "muxStreams": [
      "360p-my-video-ts"
    ]
  }
]

Veja a seguir um exemplo de REST/JSON para o contêiner de saída fMP4:

"manifests": [
  {
    "fileName": "main-cbcs.mpd",
    "type": "DASH",
    "muxStreams": [
      "360p-my-audio-fmp4",
      "360p-my-video-fmp4"
    ]
  }
]