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
- HLS
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:
- Verschlüsselungsschlüssel: Schlüssel werden jetzt in Secret Manager gespeichert
- 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.
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" ] } ] } ] } ...
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" } } ] ...
Aktualisieren Sie einen Mux-Stream in
muxStreams
. Entfernen Sie dazu das Verschlüsselungsfeld und verwenden Sie stattdessen dieencryptionId
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.