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
- HLS
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"
]
}
]