Mengonfigurasi enkripsi untuk pengelolaan hak digital dan perlindungan konten

Untuk mendukung manajemen hak digital (DRM) dan perlindungan konten, konfigurasikan enkripsi video output Anda dengan Transcoder API. Versi Transcoder API saat ini mendukung DRM enkripsi umum (CENC) dari Google Widevine dan Microsoft PlayReady, serta perlindungan konten DRM dan AES-128 Apple FairPlay. Transcoder API hanya bertanggung jawab untuk enkripsi konten.

Sebelum memulai

Sebelum mengupload konten ke Transcoder API untuk enkripsi, Anda memerlukan cara untuk membuat dan menyimpan kunci acak 128-bit (32 karakter heksadesimal). Transcoder API menggunakan kunci tersebut untuk mengenkripsi konten sesuai dengan penampung. Pastikan kunci tersebut terdaftar dalam kebijakan lisensi dari penyedia DRM Anda. Dengan begitu, pemain dapat mendekripsi konten Anda nantinya. Enkripsi konten didukung untuk penampung berikut:

Jenis Teknologi Format Codec Video Codec Audio
H.264 H.265 AAC
DRM FairPlay HLS TS (CONTOH-AES) fMP4 (CONTOH-AES) TS (CONTOH-AES)
fMP4 (CONTOH-AES) fMP4 (CONTOH-AES)
DRM Widevine, PlayReady DASH fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
DRM Widevine, PlayReady HLS fMP4 (MPEG-CENC) fMP4 (MPEG-CENC)
Perlindungan konten AES-128 HLS, DASH fMP4, TS (AES-128) fMP4, TS (AES-128) fMP4, TS (AES-128)

Google Widevine dan Microsoft PlayReady mendukung protokol streaming adaptif dinamis melalui HTTP (DASH) dan protokol live streaming HTTP (HLS). Dukungan perangkat untuk protokol ini bervariasi (misalnya, HLS dan DASH didukung di Android dan web, tetapi hanya HLS yang didukung di iOS). Output untuk protokol ini dienkripsi menggunakan standar CENC (ISO/IEC 23001-7:2016 untuk fragmen ISO-BMFF). Secara khusus, skema enkripsi harus berupa CTR AES-128.

Apple FairPlay menggunakan protokol HLS. Output untuk protokol ini dienkripsi menggunakan CONTOH-AES CBC. Untuk mengetahui informasi selengkapnya tentang output ini, baca Format Enkripsi Streaming MPEG-2 untuk HTTP Live Streaming.

Perlindungan konten

AES-128 mendukung DASH atau HLS dan dienkripsi menggunakan mode CTR atau CBC.

Memilih penampung output

Transcoder API mendukung container berikut:

  • TS (menggunakan skema AES-128 CBC):
    • HLS dengan CONTOH-AES
    • HLS dengan (AES-128 CTR atau AES-128 CBC)
  • fMP4:
    • HLS
      • CONTOH-AES
    • DASH
      • MPEG-CENC
      • Skema: AES-128 CTR atau AES-128 CBC

Membuat streaming output multipleks

Tambahkan aliran output ke daftar muxStreams dalam konfigurasi tugas. Konfigurasikan setelan enkripsi menggunakan objek Encryption.

Berikut adalah contoh REST/JSON untuk container file output 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"
      }
    }
  }
]

Berikut adalah contoh REST/JSON untuk penampung 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"
      }
    }
  }
]

Menambahkan aliran output ke file manifes

Berikut adalah contoh REST/JSON untuk container file output TS:

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

Berikut adalah contoh REST/JSON untuk penampung output fMP4:

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

Bermigrasi ke konfigurasi v1

Ikuti langkah-langkah di bagian ini untuk memperbarui konfigurasi tugas pratinjau pribadi agar mendukung format enkripsi v1.

Konfigurasi enkripsi lama memberikan detail enkripsi untuk aliran mux di kolom muxStreams itu sendiri (lihat hal berikut):

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

Setelan enkripsi kini dibagi menjadi dua bagian berikut:

  1. Kunci enkripsi: kunci kini disimpan di Secret Manager
  2. Konfigurasi dan setelan enkripsi: ini sekarang menjadi kolom baru dalam konfigurasi tugas

Gunakan langkah-langkah berikut untuk memperbarui setelan enkripsi pratinjau pribadi ke format v1.

  1. Buat rahasia yang berisi kunci enkripsi yang terdapat dalam konfigurasi tugas lama. Catat ID resource rahasia. Untuk mengetahui informasi selengkapnya, lihat Menambahkan kunci enkripsi ke 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. Buat pesan kolom enkripsi untuk setiap setelan enkripsi dari konfigurasi tugas lama. Untuk mengetahui informasi selengkapnya, lihat Membuat tugas.

    ...
    "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. Perbarui aliran data mux di muxStreams dengan menghapus kolom enkripsi dan menggunakan encryptionId setelan enkripsi yang dibuat di langkah sebelumnya.

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

Untuk informasi selengkapnya, lihat Mengenkripsi konten yang di-transcoding.