Configurazione della crittografia per DRM e protezione dei contenuti

Per supportare la gestione dei diritti digitali (DRM) e la protezione dei contenuti, configura la crittografia del video di output con l'API Transcoder. La versione attuale dell'API Transcoder supporta il DRM di crittografia comune (CENC) di Google Widevine e Microsoft PlayReady, nonché la protezione dei contenuti DRM di Apple FairPlay e la protezione dei contenuti AES-128. L'API Transcoder è responsabile solo della crittografia dei contenuti.

Prima di iniziare

Prima di caricare i contenuti nell'API Transcoder per la crittografia, devi saper generare e archiviare chiavi casuali a 128 bit (32 caratteri esadecimali). L'API Transcoder utilizza queste chiavi per criptare i contenuti in base al contenitore. Assicurati che le chiavi siano registrate in un criterio di licenza del tuo provider DRM. In questo modo, i giocatori potranno decriptare i tuoi contenuti in un secondo momento. La crittografia dei contenuti è supportata per i seguenti container:

Tipo Tecnologia Formato Codec video Codec audio
H.264 H.265 AAC
DRM FairPlay HLS TS (ESEMPIO-AES) fMP4 (ESEMPIO-AES) TS (ESEMPIO-AES)
fMP4 (ESEMPIO-AES) fMP4 (ESEMPIO-AES)
DRM Widevine, PlayReady DASH fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
DRM Widevine, PlayReady HLS fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
Protezione dei contenuti AES-128 HLS, DASH fMP4, TS (AES-128) fMP4, TS (AES-128) fMP4, TS (AES-128)

Google Widevine e Microsoft PlayReady supportano lo streaming adattivo dinamico su HTTP (DASH) e HTTP Live Streaming (HLS). Il supporto di questi protocolli varia (ad esempio, HLS e DASH sono supportati su Android e sul web, ma solo HLS è supportato su iOS). L'output per questi protocolli è criptato utilizzando lo standard CENC (ISO/IEC 23001-7:2016 per i frammenti ISO-BMFF). In particolare, lo schema di crittografia deve essere con CTR AES-128.

Apple FairPlay utilizza il protocollo HLS. L'output per questo protocollo è criptato tramite EXAMPLE-AES CBC. Per ulteriori informazioni su questo output, consulta la sezione MPEG-2 Stream Encryption Format for HTTP Live Streaming.

Protezione dei contenuti

AES-128 supporta DASH o HLS ed è criptato utilizzando la modalità CTR o CBC.

Seleziona un container di output

L'API Transcoder supporta i seguenti container:

  • TS (con lo schema AES-128 CBC):
    • HLS con EXAMPLE-AES
    • HLS con (CTR AES-128 o AES-128 CBC)
  • fMP4:
    • HLS
      • ESEMPIO-AES
    • DASH
      • MPEG-CENC
      • Schema: CTR AES-128 o AES-128 CBC

Crea il flusso di output multiplexato

Aggiungi il flusso di output all'elenco muxStreams nella configurazione del job. Configura le impostazioni di crittografia utilizzando l'oggetto Encryption.

Di seguito è riportato un esempio REST/JSON per il container del file di output di 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"
      }
    }
  }
]

Di seguito è riportato un esempio REST/JSON per il container di output 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"
      }
    }
  }
]

Aggiungi i flussi di output al file manifest

Di seguito è riportato un esempio REST/JSON per il container del file di output di TS:

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

Di seguito è riportato un esempio REST/JSON per il container di output fMP4:

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

Esegui la migrazione alla configurazione v1

Segui i passaggi in questa sezione per aggiornare le configurazioni dei job di anteprima privata in modo che supportino il formato di crittografia v1.

Le configurazioni di crittografia legacy forniscono i dettagli di crittografia per un flusso mux nel campo muxStreams stesso (vedi quanto segue):

{
  ...
  "muxStreams": [
    {
      "key": "360p-my-video-ts",
      "fileName": "360p-my-video.ts",
      "container": "ts",
      "elementaryStreams": [
        "video-stream0",
        "audio-stream0"
      ],
      "encryption": {
        "key": "aabbccddeeff11223344556677889900",
        "iv": "10314849f4a110ad4abacdb6f5f4b86f",
        "sampleAes": {
          "keyUri": "skd://10314849f4a110ad4abacdb6f5f4b86f"
        }
      }
    },
    {
      "key": "360p-my-video-fmp4",
      "container": "fmp4",
      "elementaryStreams": [
        "video-stream0"
      ],
      "fileName": "360p-my-video.fmp4",
      "encryption": {
        "key": "11223344556677889900aabbccddeeff",
        "iv": "179b08b91372aa26e0763e87743db388",
        "mpegCenc": {
          "keyId": "skd://179b08b91372aa26e0763e87743db388",
          "scheme": "cenc"
        }
      }
    },
    {
      "key": "360p-my-audio-fmp4",
      "container": "fmp4",
      "elementaryStreams": [
        "audio-stream0"
      ],
      "fileName": "360p-my-audio.fmp4",
      "encryption": {
        "key": "11223344556677889900aabbccddeeff",
        "iv": "179b08b91372aa26e0763e87743db388",
        "mpegCenc": {
          "keyId": "skd://179b08b91372aa26e0763e87743db388",
          "scheme": "cenc"
        }
      }
    }
  ]
  ...
}

Le impostazioni di crittografia sono ora suddivise nelle seguenti due parti:

  1. Chiavi di crittografia: le chiavi ora sono archiviate in Secret Manager
  2. Configurazione e impostazioni della crittografia: ora si tratta di un nuovo campo nella configurazione del job

Segui questi passaggi per aggiornare le impostazioni di crittografia dell'anteprima privata al formato v1.

  1. Crea un secret contenente le chiavi di crittografia contenute nella configurazione dei job legacy. Prendi nota dell'ID risorsa del secret. Per maggiori informazioni, consulta Aggiungere la chiave di crittografia a Secret Manager.

    ...
    {
      "encryptionKeys": [
        {
          "key": "aabbccddeeff11223344556677889900",
          "keyId": "10314849f4a110ad4abacdb6f5f4b86f",
          "keyUri": "skd://10314849f4a110ad4abacdb6f5f4b86f",
          "iv": "10314849f4a110ad4abacdb6f5f4b86f",
          "matchers": [
            {
              "muxStreams": [
                "360p-my-video-ts"
              ]
            }
          ]
        },
        {
          "key": "11223344556677889900aabbccddeeff",
          "keyId": "179b08b91372aa26e0763e87743db388",
          "keyUri": "skd://179b08b91372aa26e0763e87743db388",
          "iv": "179b08b91372aa26e0763e87743db388",
          "matchers": [
            {
              "muxStreams": [
                "360p-my-video-fmp4",
                "360p-my-audio-fmp4"
              ]
            }
          ]
        }
      ]
    }
    ...
    
  2. Crea un messaggio nel campo di crittografia per ogni impostazione di crittografia dalla configurazione dei job legacy. Per ulteriori informazioni, consulta Creare un job.

    ...
    "encryptions": [
        {
          "id": "ts_sampleaes",
          "secretManagerKeySource": { // resource for the secret created in the preceding step
            "secretVersion": "projects/{project}/secrets/{secret_id}/versions/{version_number}"
          },
          "drmSystems": {
            "fairplay": {}
          },
          "sampleAes": {}
        },
        {
          "id": "fmp4_mpegcenc_cenc",
          "secretManagerKeySource": { // resource for the secret created in the preceding step
            "secretVersion": "projects/{project}/secrets/{secret_id}/versions/{version_number}"
          },
          "drmSystems": {
            "widevine": {},
            "playready": {}
          },
          "mpegCenc": {
            "scheme": "cbcs"
          }
        }
      ]
    ...
    
  3. Aggiorna un flusso mux in muxStreams rimuovendo il campo di crittografia e utilizzando invece il valore encryptionId delle impostazioni di crittografia create nel passaggio precedente.

    {
      ...
      "muxStreams": [
        {
          "key": "360p-my-video-ts",
          "fileName": "360p-my-video.ts",
          "container": "ts",
          "elementaryStreams": [
            "video-stream0",
            "audio-stream0"
          ],
          "encryptionId": "ts_sampleaes"
        },
        {
          "key": "360p-my-video-fmp4",
          "container": "fmp4",
          "elementaryStreams": [
            "video-stream0"
          ],
          "fileName": "360p-my-video.fmp4",
          "encryptionId": "fmp4_mpegcenc_cenc"
        },
        {
          "key": "360p-my-audio-fmp4",
          "container": "fmp4",
          "elementaryStreams": [
            "audio-stream0"
          ],
          "fileName": "360p-my-audio.fmp4",
          "encryptionId": "fmp4_mpegcenc_cenc"
        }
      ]
      ...
    }
    

Per ulteriori informazioni, consulta Criptare i contenuti transcodificati.