

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# SPEKE API v2 - Kustomisasi dan kendala untuk spesifikasi DASH-IF
<a name="speke-constraints-v2"></a>

[Spesifikasi DASH Industry Forum CPIX 2.3](https://dashif.org/docs/CPIX2.3/Cpix.html) mendukung sejumlah kasus penggunaan dan topologi. Spesifikasi SPEKE API v2.0 mendefinisikan Profil CPIX dan API untuk CPIX. Untuk mencapai dua tujuan ini, ia mematuhi spesifikasi CPIX dengan penyesuaian dan kendala berikut:

**Profil CPIX**
+ SPEKE mengikuti alur kerja Encryptor Consumer.
+ Untuk kunci konten terenkripsi, SPEKE menerapkan batasan berikut:
  + SPEKE tidak mendukung verifikasi tanda tangan digital (XMLDSIG) untuk muatan permintaan atau respons.
  + SPEKE membutuhkan 2048 sertifikat berbasis RSA.
+ SPEKE hanya memanfaatkan sebagian dari fungsionalitas CPIX:
  + SPEKE menghilangkan fungsionalitas. `UpdateHistoryItemList` Jika daftar hadir dalam tanggapan, SPEKE mengabaikannya.
  + SPEKE menghilangkan fungsionalitas root/leaf utama. Jika `ContentKey@dependsOnKey` atribut hadir dalam respons, SPEKE mengabaikannya.
  + SPEKE menghilangkan `BitrateFilter` elemen dan atribut. `VideoFilter@wcg` Jika elemen atau atribut ini ada dalam muatan CPIX, SPEKE mengabaikannya.
+ Hanya elemen atau atribut yang dirujuk sebagai 'Didukung' pada [halaman Komponen Muatan Standar atau halaman](standard-payload-components-v2.md) [kontrak Enkripsi](encryption-contract-v2.md) yang dapat digunakan dalam dokumen CPIX yang dipertukarkan dengan SPEKE v2.
+ Ketika disertakan dalam permintaan CPIX oleh enkripsi, semua elemen dan atribut harus membawa nilai yang valid dalam respons CPIX penyedia kunci. Jika tidak, enkripsi akan berhenti dan melempar kesalahan.
+ SPEKE mendukung rotasi kunci dengan `KeyPeriodFilter` elemen. SPEKE hanya menggunakan `ContentKeyPeriod@index` untuk melacak periode kunci.
+ Untuk pensinyalan HLS, beberapa `DRMSystem.HLSSignalingData` elemen harus digunakan: satu dengan nilai `DRMSystem.HLSSignalingData@playlist` atribut 'media', dan satu lagi dengan nilai `DRMSystem.HLSSignalingData@playlist` atribut 'master'.
+ Saat meminta kunci, enkripsi mungkin menggunakan `@explicitIV` atribut opsional pada elemen. `ContentKey` Penyedia kunci dapat merespons dengan menggunakan IV`@explicitIV`, bahkan jika atribut tidak termasuk dalam permintaan.
+ Enkripsi membuat pengenal kunci (`KID`), yang tetap sama untuk setiap ID konten dan periode kunci tertentu. Penyedia kunci memasukkan `KID` dalam tanggapannya terhadap dokumen permintaan.
+ Enkripsi harus menyertakan nilai untuk atribut. `CPIX@contentId` Saat menerima nilai kosong untuk atribut ini, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'Missing CPIX @contentId '. `CPIX@contentId`nilai tidak dapat diganti oleh penyedia kunci.

   `CPIX@id`nilai, jika tidak null, akan diabaikan oleh penyedia kunci.
+ Enkripsi harus menyertakan nilai untuk atribut. `CPIX@version` Saat menerima nilai kosong untuk atribut ini, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'Missing CPIX @version '. Saat menerima permintaan dengan versi yang tidak didukung, deskripsi kesalahan yang dikembalikan oleh penyedia kunci adalah 'CPIX @version Tidak Didukung '.

   `CPIX@version`nilai tidak dapat diganti oleh penyedia kunci.
+ Enkripsi harus menyertakan nilai untuk `ContentKey@commonEncryptionScheme` atribut untuk setiap kunci yang diminta. Saat menerima nilai kosong untuk atribut ini, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'Missing ContentKey @ commonEncryptionScheme for `id` KID'.

  Dokumen CPIX unik tidak dapat mencampur beberapa nilai untuk atribut yang berbeda`ContentKey@commonEncryptionScheme`. Saat menerima kombinasi seperti itu, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'Non compliant ContentKey @ commonEncryptionScheme combination'.

  Tidak semua `ContentKey@commonEncryptionScheme` nilai kompatibel dengan semua teknologi DRM. Saat menerima kombinasi seperti itu, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'ContentKey@ commonEncryptionScheme tidak kompatibel dengan DRMSystem `id`'.

   `ContentKey@commonEncryptionScheme`nilai tidak dapat diganti oleh penyedia kunci.
+ Saat menerima nilai yang berbeda untuk `DRMSystem@PSSH` dan `<pssh>` elemen `DRMSystem.ContentProtectionData` innerXML di badan respons CPIX, enkripsi akan berhenti dan menimbulkan kesalahan.

**API untuk CPIX**
+ Penyedia kunci harus menyertakan nilai untuk header respons `X-Speke-User-Agent` HTTP.
+ Sebuah enkripsi Speke-compliant bertindak sebagai klien dan mengirimkan operasi POST ke endpoint penyedia kunci.
+ Enkripsi harus menyertakan nilai untuk header permintaan `X-Speke-Version` HTTP, dengan versi SPEKE yang digunakan dengan permintaan, dirumuskan sebagai. MajorVersion MinorVersion, seperti '2.0' untuk SPEKE v2.0. Jika penyedia kunci tidak mendukung versi SPEKE yang digunakan oleh enkripsi untuk permintaan saat ini, penyedia kunci akan mengembalikan kesalahan dengan deskripsi 'Versi SPEKE Tidak Didukung' dan tidak mencoba memproses dokumen CPIX dengan upaya terbaik.

  Nilai `X-Speke-Version` header yang ditentukan oleh enkripsi tidak dapat dimodifikasi oleh penyedia kunci dalam menanggapi permintaan.
+ Saat menerima kesalahan di badan respons, enkripsi akan melempar kesalahan dan tidak mencoba lagi permintaan dengan versi SPEKE v1.0.

  Jika penyedia kunci tidak mengembalikan kesalahan tetapi gagal mengembalikan dokumen CPIX yang menyertakan informasi wajib, enkripsi harus berhenti dan menimbulkan kesalahan.

Tabel berikut merangkum pesan standar yang harus dikembalikan oleh penyedia kunci di badan pesan. Kode respons HTTP dalam kasus kesalahan harus berupa 4XX atau 5XX, tidak pernah 200. Kode kesalahan 422 dapat digunakan untuk semua kesalahan yang terkait dengan SPEKE/CPIX.


| Kasus kesalahan | Pesan kesalahan | 
| --- | --- | 
|  CPIX @contentId tidak ditentukan  |  CPIX @contentId tidak ada  | 
|  CPIX @version tidak ditentukan  |  CPIX @version tidak ada  | 
|  CPIX @version tidak didukung  |  CPIX @version tidak didukung  | 
|  ContentKey@ commonEncryptionScheme tidak didefinisikan  |  Hilang ContentKey @ commonEncryptionScheme untuk KID `id` (di mana `id` sama dengan nilai ContentKey @kid)  | 
|  Beberapa commonEncryptionScheme nilai ContentKey @ yang digunakan dalam satu dokumen CPIX  |  Kombinasi ContentKey @ commonEncryptionScheme yang tidak sesuai  | 
|  ContentKey@ commonEncryptionScheme tidak kompatibel dengan teknologi DRM  |  ContentKey@ commonEncryptionScheme tidak kompatibel dengan DRMSystem `id` (di mana `id` sama dengan nilai DRMSystem @systemId)  | 
|  X-Speke-Version nilai header bukan versi SPEKE yang didukung  |  Versi SPEKE yang tidak didukung  | 
|  Kontrak enkripsi cacat  |  Kontrak enkripsi cacat  | 
|  Kontrak enkripsi bertentangan dengan batasan tingkat keamanan DRM  |  Kontrak enkripsi CPIX yang diminta tidak didukung  | 
|  Kontrak enkripsi tidak termasuk AudioFilter elemen VideoFilter atau  |  Kontrak enkripsi CPIX tidak ada  | 