Ringkasan templat lisensi Widevine

media services logo


Anda dapat menggunakan Azure Media Services untuk mengonfigurasi dan meminta lisensi Google Widevine. Saat pemutar mencoba memutar konten yang dilindungi Widevine, permintaan dikirim ke layanan pengiriman lisensi untuk mendapatkan lisensi. Jika layanan lisensi menyetujui permintaan tersebut, layanan akan mengeluarkan lisensi. Lisensi dikirim ke klien dan digunakan untuk mendekripsi dan memutar konten yang ditentukan.

Permintaan lisensi Widevine diformat sebagai pesan JSON.

Catatan

Anda dapat membuat pesan kosong tanpa nilai, hanya "{}". Kemudian templat lisensi dibuat secara default. Fungsi defaultnya berfungsi untuk sebagian besar kasus. Skenario pengiriman lisensi berbasis Microsoft harus selalu menggunakan default. Jika Anda perlu mengatur nilai "penyedia" dan "content_id", penyedia harus mencocokkan info masuk Widevine.

{  
   "payload": "<license challenge>",
   "content_id": "<content id>" 
   "provider": "<provider>"
   "allowed_track_types": "<types>",
   "content_key_specs": [  
      {  
         "track_type": "<track type 1>"
      },
      {  
         "track_type": "<track type 2>"
      },
      …
   ],
   "policy_overrides": {  
      "can_play": <can play>,
      "can persist": <can persist>,
      "can_renew": <can renew>,
      "rental_duration_seconds": <rental duration>,
      "playback_duration_seconds": <playback duration>,
      "license_duration_seconds": <license duration>,
      "renewal_recovery_duration_seconds": <renewal recovery duration>,
      "renewal_server_url": "<renewal server url>",
      "renewal_delay_seconds": <renewal delay>,
      "renewal_retry_interval_seconds": <renewal retry interval>,
      "renew_with_usage": <renew with usage>
   }
}

Pesan JSON

Nama Nilai Deskripsi
payload String Base64-encoded Permintaan lisensi dikirim oleh klien.
content_id String Base64-encoded Pengidentifikasi digunakan untuk memperoleh ID kunci dan kunci konten untuk setiap content_key_specs.track_type.
penyedia string Digunakan untuk mencari kunci konten dan kebijakan. Jika pengiriman kunci Microsoft digunakan untuk pengiriman lisensi Widevine, parameter ini diabaikan.
policy_name string Nama kebijakan yang terdaftar sebelumnya. Opsional.
allowed_track_types enum SD_ONLY atau SD_HD. Mengontrol kunci konten mana yang disertakan dalam lisensi.
content_key_specs Array struktur JSON, lihat bagian "Spesifikasi kunci konten." Kontrol yang lebih halus untuk menentukan kunci konten yang dimunculkan. Untuk informasi selengkapnya, lihat bagian "Spesifikasi kunci konten." Hanya salah satu nilai allowed_track_types and content_key_specs yang dapat ditentukan.
use_policy_overrides_exclusively Boolean, benar atau salah Gunakan atribut kebijakan yang ditentukan oleh policy_overrides, dan hilangkan semua kebijakan yang disimpan sebelumnya.
policy_overrides Struktur JSON, lihat bagian "Pengambil alih kebijakan." Pengaturan kebijakan untuk lisensi ini. Jika aset ini memiliki kebijakan yang telah ditentukan sebelumnya, nilai yang ditentukan tersebut digunakan.
session_init Struktur JSON, lihat bagian "Inisialisasi sesi." Data opsional diteruskan ke lisensi.
parse_only Boolean, benar atau salah Permintaan lisensi diuraikan, tetapi tidak ada lisensi yang dikeluarkan. Namun, nilai dari permintaan lisensi dikembalikan dalam respons.

Spesifikasi kunci konten

Jika sudah ada kebijakan yang sebelumnya, tidak perlu menentukan nilai apa pun dalam spesifikasi kunci konten. Kebijakan yang sudah ada sebelumnya yang terkait dengan konten ini digunakan untuk menentukan perlindungan output, seperti Perlindungan Konten Digital Bandwidth Tinggi (HDCP) dan Sistem Manajemen Umum Salinan (CGMS). Jika kebijakan yang sudah ada sebelumnya tidak terdaftar di server lisensi Widevine, penyedia konten dapat menyuntikkan nilai ke dalam permintaan lisensi.

Setiap nilai content_key_specs harus ditentukan untuk semua trek, terlepas dari opsi use_policy_overrides_exclusively.

Nama Nilai Deskripsi
content_key_specs. track_type string Nama jenis trek. Jika content_key_specs ditentukan dalam permintaan lisensi, pastikan untuk menentukan semua jenis trek secara eksplisit. Jika tidak, akan berakibat kegagalan untuk memutar setelah lebih dari 10 detik.
content_key_specs
security_level
uint32 Menentukan persyaratan ketahanan klien untuk pemutaran.
- Diperlukan kriptografi kotak putih berbasis perangkat lunak.
- Diperlukan kriptografi perangkat lunak dan dekoder yang dikaburkan.
- Operasi material dan kriptografi utama harus dilakukan dalam lingkungan eksekusi tepercaya yang didukung perangkat keras.
- Kriptografi dan penguraian kode konten harus dilakukan dalam lingkungan eksekusi tepercaya yang didukung perangkat keras.
- Kriptografi, penguraian kode, dan semua penanganan media (terkompresi dan tidak terkompresi) harus ditangani dalam lingkungan eksekusi tepercaya yang didukung perangkat keras.
content_key_specs
required_output_protection.hdc
string, salah satu dari HDCP_NONE, HDCP_V1, HDCP_V2 Menunjukkan apakah HDCP diperlukan.
content_key_specs
kunci
Base64-
untai (karakter) yang dikodekan
Kunci konten yang digunakan untuk trek ini. Jika ditentukan, diperlukan track_type atau key_id. Penyedia konten dapat menggunakan opsi ini untuk memasukkan kunci konten untuk trek ini dan bukan membiarkan server lisensi Widevine membuat atau mencari kunci.
content_key_specs.key_id untai (karakter) yang dikodekan Base64 biner, 16 byte Pengidentifikasi unik untuk kunci.

Pengambil alihan kebijakan

Nama Nilai Deskripsi
policy_overrides. can_play Boolean, benar atau salah Menunjukkan bahwa pemutaran konten diperbolehkan. Defaultnya adalah false.
policy_overrides. can_persist Boolean, benar atau salah Menunjukkan bahwa lisensi mungkin bertahan pada penyimpanan yang tidak mudah berubah untuk penggunaan offline. Defaultnya adalah false.
policy_overrides. can_renew Boolean, benar atau salah Menunjukkan bahwa pembaruan lisensi ini diperbolehkan. Jika benar, durasi lisensi dapat diperpanjang oleh heartbeat. Defaultnya adalah false.
policy_overrides. license_duration_seconds int64 Menunjukkan rentang waktu untuk lisensi ini. Nilai 0 menunjukkan bahwa tidak ada batasan untuk durasi. Defaultnya adalah 0.
policy_overrides. rental_duration_seconds int64 Menunjukkan rentang waktu saat pemutaran diizinkan. Nilai 0 menunjukkan bahwa tidak ada batasan untuk durasi. Defaultnya adalah 0.
policy_overrides. playback_duration_seconds int64 Tampilan rentang waktu setelah pemutaran dimulai dalam durasi lisensi. Nilai 0 menunjukkan bahwa tidak ada batasan untuk durasi. Defaultnya adalah 0.
policy_overrides. renewal_server_url string Semua permintaan heartbeat (perpanjangan) untuk lisensi ini diarahkan ke URL yang ditentukan. Bidang ini hanya digunakan jika can_renew benar.
policy_overrides. renewal_delay_seconds int64 Berapa detik setelah license_start_time sebelum pembaruan pertama kali dicoba. Bidang ini hanya digunakan jika can_renew benar. Defaultnya adalah 0.
policy_overrides. renewal_retry_interval_seconds int64 Menentukan penundaan dalam detik antara permintaan pembaruan lisensi berikutnya, jika terjadi kegagalan. Bidang ini hanya digunakan jika can_renew benar.
policy_overrides. renewal_recovery_duration_seconds int64 Rentang waktu ketika pemutaran dapat dilanjutkan selagi pembaruan dicoba, namun tidak berhasil karena masalah ujung belakang dengan server lisensi. Nilai 0 menunjukkan bahwa tidak ada batasan untuk durasi. Bidang ini hanya digunakan jika can_renew benar.
policy_overrides. renew_with_usage Boolean, benar atau salah Menunjukkan bahwa lisensi dikirim untuk pembaruan saat penggunaan dimulai. Bidang ini hanya digunakan jika can_renew benar.

Inisialisasi sesi

Nama Nilai Deskripsi
provider_session_token String Base64-encoded Token sesi ini diteruskan kembali dalam lisensi dan ada dalam pembaruan berikutnya. Token sesi tidak bertahan di luar sesi.
provider_client_token String Base64-encoded Token klien untuk mengirim kembali respons lisensi. Jika permintaan lisensi berisi token klien, nilai ini diabaikan. Token klien bertahan di luar sesi lisensi.
override_provider_client_token Boolean, benar atau salah Jika salah dan permintaan lisensi berisi token klien, gunakan token dari permintaan tersebut meskipun token klien sudah ditentukan dalam struktur ini. Jika benar, selalu gunakan token yang ditentukan dalam struktur ini.

Mengonfigurasi lisensi Widevine Anda menggunakan jenis .NET

Media Services menyediakan API .NET yang dapat Anda gunakan untuk mengonfigurasi lisensi Widevine Anda.

Kelas sebagaimana didefinisikan dalam SDK .NET Media Services

Kelas berikut adalah definisi dari jenis berikut:

public class WidevineMessage
{
    public WidevineMessage();

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public AllowedTrackTypes? allowed_track_types { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public ContentKeySpecs[] content_key_specs { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public object policy_overrides { get; set; }
}

[JsonConverter(typeof(StringEnumConverter))]
public enum AllowedTrackTypes
{
    SD_ONLY = 0,
    SD_HD = 1
}
public class ContentKeySpecs
{
    public ContentKeySpecs();

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string key_id { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public RequiredOutputProtection required_output_protection { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int? security_level { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string track_type { get; set; }
}

public class RequiredOutputProtection
{
    public RequiredOutputProtection();

    public Hdcp hdcp { get; set; }
}

[JsonConverter(typeof(StringEnumConverter))]
public enum Hdcp
{
    HDCP_NONE = 0,
    HDCP_V1 = 1,
    HDCP_V2 = 2
}

Contoh

Contoh berikut menunjukkan cara menggunakan API .NET untuk mengonfigurasi lisensi Widevine sederhana:

private static string ConfigureWidevineLicenseTemplate()
{
    var template = new WidevineMessage
    {
        allowed_track_types = AllowedTrackTypes.SD_HD,
        content_key_specs = new[]
        {
            new ContentKeySpecs
            {
                required_output_protection = new RequiredOutputProtection { hdcp = Hdcp.HDCP_NONE},
                security_level = 1,
                track_type = "SD"
            }
        },
        policy_overrides = new
        {
            can_play = true,
            can_persist = true,
            can_renew = false
        }
    };

    string configuration = JsonConvert.SerializeObject(template);
    return configuration;
}

Catatan tambahan

  • Widevine adalah layanan yang disediakan oleh Google Inc. dan tunduk pada ketentuan layanan dan Kebijakan Privasi Google, Inc.