Verschlüsselung für die digitale Rechteverwaltung und den Schutz von Inhalten konfigurieren

Konfigurieren Sie die Verschlüsselung Ihres Ausgabevideos mit der Transcoder API, um die digitale Rechteverwaltung (Digital Rights Management, DRM) und den Schutz von Inhalten zu unterstützen. Die aktuelle Version der Transcoder API unterstützt die gängige Verschlüsselungs-DRM (CENC) von Google Widevine und Microsoft PlayReady sowie den Apple FairPlay DRM- und AES-128-Inhaltsschutz. Die Transcoder API ist nur für die Verschlüsselung des Inhalts verantwortlich.

Hinweise

Bevor Sie Ihre Inhalte zur Verschlüsselung in die Transcoder API hochladen, müssen Sie zufällige 128-Bit-Schlüssel (32 Hexadezimalzeichen) generieren und speichern. Die Transcoder API verwendet diese Schlüssel, um den Inhalt gemäß dem Container zu verschlüsseln. Die Schlüssel müssen in einer Lizenzrichtlinie Ihres DRM-Anbieters registriert sein. Dadurch können Spieler Ihre Inhalte später entschlüsseln. Die Inhaltsverschlüsselung wird für die folgenden Container unterstützt:

Typ Technologie Format Video-Codecs Audio-Codecs
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)
Inhaltsschutz AES-128 HLS, DASH fMP4, TS (AES-128) fMP4, TS (AES-128) fMP4, TS (AES-128)

Google Widevine und Microsoft PlayReady unterstützen sowohl Dynamic Adaptive Streaming over HTTP (DASH) als auch HTTP Live Streaming-Protokolle (HLS). Die Geräteunterstützung für diese Protokolle variiert (z. B. werden HLS und DASH von Android und im Web unterstützt, aber nur HLS wird unter iOS unterstützt). Die Ausgabe für diese Protokolle wird mit dem CENC-Standard (ISO/IEC 23001-7:2016 für ISO-BMFF-Fragmente) verschlüsselt. Insbesondere muss das Verschlüsselungsschema AES-128-CTR sein.

Apple FairPlay verwendet das HLS-Protokoll. Die Ausgabe für dieses Protokoll wird mit SAMPLE-AES CBC verschlüsselt. Weitere Informationen zu dieser Ausgabe finden Sie unter MPEG-2 Stream-Verschlüsselungsformat für HTTP Live Streaming.

Inhaltsschutz

AES-128 unterstützt entweder DASH oder HLS und wird im CTR- oder CBC-Modus verschlüsselt.

Ausgabecontainer auswählen

Die Transcoder API unterstützt die folgenden Container:

  • TS (mit dem AES-128-CBC-Schema):
    • HLS mit SAMPLE-AES
    • HLS mit (AES-128 CTR oder AES-128 CBC)
  • fMP4:
    • HLS
      • SAMPLE-AES
    • DASH
      • MPEG-CENC
      • Schema: AES-128 CTR oder AES-128 CBC

Multiplex-Ausgabestream erstellen

Fügen Sie den Ausgabestream der Liste muxStreams in der Jobkonfiguration hinzu. Konfigurieren Sie die Verschlüsselungseinstellungen mit dem Objekt Encryption.

Im Folgenden finden Sie ein REST/JSON-Beispiel für den TS-Ausgabedateicontainer:

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

Im Folgenden finden Sie ein REST/JSON-Beispiel für den fMP4-Ausgabecontainer:

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

Ausgabestreams zur Manifestdatei hinzufügen

Im Folgenden finden Sie ein REST/JSON-Beispiel für den TS-Ausgabedateicontainer:

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

Im Folgenden finden Sie ein REST/JSON-Beispiel für den fMP4-Ausgabecontainer:

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

Zur v1-Konfiguration migrieren

Führen Sie die Schritte in diesem Abschnitt aus, um Ihre Konfigurationen für private Vorschaujobs zu aktualisieren, damit sie das V1-Verschlüsselungsformat unterstützen.

Legacy-Verschlüsselungskonfigurationen stellen die Verschlüsselungsdetails für einen Mux-Stream im Feld muxStreams selbst bereit (siehe unten):

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

Die Verschlüsselungseinstellungen sind jetzt in die folgenden zwei Teile unterteilt:

  1. Verschlüsselungsschlüssel: Schlüssel werden jetzt in Secret Manager gespeichert
  2. Verschlüsselungskonfiguration und ‐einstellungen: Diese sind jetzt ein neues Feld in der Jobkonfiguration.

Führen Sie die folgenden Schritte aus, um die Verschlüsselungseinstellungen für die private Vorschau auf das V1-Format zu aktualisieren.

  1. Erstellen Sie ein Secret mit den Verschlüsselungsschlüsseln, die in der Legacy-Jobkonfiguration enthalten sind. Notieren Sie sich die Ressourcen-ID des Secrets. Weitere Informationen finden Sie unter Verschlüsselungsschlüssel zu Secret Manager hinzufügen.

    ...
    {
      "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. Erstellen Sie für jede Verschlüsselungseinstellung aus der Legacy-Jobkonfiguration eine Nachricht im Verschlüsselungsfeld. Weitere Informationen finden Sie unter Job erstellen.

    ...
    "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. Aktualisieren Sie einen Mux-Stream in muxStreams. Entfernen Sie dazu das Verschlüsselungsfeld und verwenden Sie stattdessen die encryptionId der Verschlüsselungseinstellungen, die im vorherigen Schritt erstellt wurden.

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

Weitere Informationen finden Sie unter Transkodierte Inhalte verschlüsseln.