Configurer le chiffrement pour la gestion des droits numériques et la protection du contenu

Pour assurer la gestion des droits numériques (DRM) et la protection du contenu, configurez le chiffrement de votre vidéo de sortie à l'aide de l'API Transcoder. La version actuelle de l'API Transcoder est compatible avec la DRM de chiffrement commun (CENC) de Google Widevine et Microsoft PlayReady, ainsi qu'avec la DRM d'Apple FairPlay et la protection des contenus AES-128. L'API Transcoder n'est responsable que du chiffrement du contenu.

Avant de commencer

Avant de transférer votre contenu dans l'API Transcoder pour le chiffrement, vous devez trouver un moyen de générer et de stocker des clés aléatoires de 128 bits (32 caractères hexadécimaux). L'API Transcoder utilise ces clés pour chiffrer ce contenu en fonction du conteneur. Assurez-vous que les clés sont enregistrées dans une règle de licence de votre fournisseur DRM. Cela permettra aux joueurs de déchiffrer vos contenus plus tard. Le chiffrement des contenus est compatible avec les conteneurs suivants :

Type Technologie Format Codecs vidéo Codecs audio
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)
Protection du contenu AES-128 HLS, DASH fMP4, TS (AES-128) fMP4, TS (AES-128) fMP4, TS (AES-128)

Google Widevine et Microsoft PlayReady sont compatibles avec les protocoles de streaming adaptatif dynamique sur HTTP (DASH) et HTTP Live Streaming (HLS). La compatibilité des appareils avec ces protocoles varie (par exemple, HLS et DASH sont compatibles avec Android et le Web, mais seul HLS est compatible avec iOS). La sortie pour ces protocoles est chiffrée à l'aide de la norme CENC (ISO/IEC 23001-7:2016 pour les fragments ISO-BMFF). En particulier, le schéma de chiffrement doit être en mode CTR AES-128.

Apple FairPlay utilise le protocole HLS. La sortie de ce protocole est chiffrée à l'aide du mode CBC SAMPLE-AES. Pour plus d'informations sur cette sortie, consultez la section Format de chiffrement de flux MPEG-2 pour HTTP Live Streaming.

Protection du contenu

AES-128 est compatible avec DASH ou HLS et est chiffré à l'aide du mode CTR ou CBC.

Sélectionner un conteneur de sortie

L'API Transcoder est compatible avec les conteneurs suivants :

  • TS (utilisant le schéma CBC AES-128) :
    • HLS avec SAMPLE-AES
    • HLS avec (CTR AES-128 ou CBC AES-128)
  • fMP4:
    • HLS
      • SAMPLE-AES
    • DASH
      • MPEG-CENC
      • Schéma : CTR AES-128 ou CBC AES-128

Créer le flux de sortie multiplexé

Ajoutez le flux de sortie à la liste muxStreams dans la configuration de la tâche. Configurez les paramètres de chiffrement à l'aide de l'objet Encryption.

Voici un exemple REST/JSON pour le conteneur de fichier de sortie 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"
      }
    }
  }
]

Voici un exemple REST/JSON pour le conteneur de sortie 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"
      }
    }
  }
]

Ajouter les flux de sortie au fichier manifeste

Voici un exemple REST/JSON pour le conteneur de fichier de sortie TS :

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

Voici un exemple REST/JSON pour le conteneur de sortie fMP4 :

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

Migrer vers la configuration v1

Suivez la procédure décrite dans cette section pour mettre à jour les configurations de vos jobs d'aperçu privé afin qu'ils acceptent le format de chiffrement v1.

Les anciennes configurations de chiffrement fournissent les détails de chiffrement d'un flux multiple dans le champ muxStreams lui-même (voir ci-dessous):

{
  ...
  "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"
        }
      }
    }
  ]
  ...
}

Les paramètres de chiffrement sont désormais divisés en deux parties:

  1. Clés de chiffrement: les clés sont désormais stockées dans Secret Manager
  2. Configuration et paramètres du chiffrement: il s'agit désormais d'un nouveau champ dans la configuration de la tâche

Procédez comme suit pour mettre à jour les paramètres de chiffrement de l'aperçu privé au format v1.

  1. Créez un secret contenant les clés de chiffrement contenues dans l'ancienne configuration de tâche. Notez l'ID de ressource du secret. Pour en savoir plus, consultez la section Ajouter la clé de chiffrement à 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. Créez un message de champ de chiffrement pour chaque paramètre de chiffrement à partir de l'ancienne configuration de tâche. Pour en savoir plus, consultez la page Créer une tâche.

    ...
    "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. Mettez à jour un flux multiple dans muxStreams en supprimant le champ de chiffrement et en utilisant à la place l'élément encryptionId des paramètres de chiffrement créés à l'étape précédente.

    {
      ...
      "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"
        }
      ]
      ...
    }
    

Pour en savoir plus, consultez Chiffrer le contenu transcodé.