Omówienie szablonu licencji Widevine

logo usługi media services


Ostrzeżenie

Zaktualizuj interfejs API REST i zestawy SDK usługi Azure Media Services do wersji 3 do 29 lutego 2024 r. Wersja 3 interfejsu API REST usługi Azure Media Services oraz zestawy SDK klienta dla platformy .NET i języka Java oferują więcej możliwości niż wersja 2. Wycofujemy wersję 2 interfejsu API REST usługi Azure Media Services oraz zestawy SDK klienta dla platformy .NET i języka Java.

Wymagane działanie: Aby zminimalizować zakłócenia w obciążeniach, zapoznaj się z przewodnikiem migracji , aby przenieść kod z interfejsu API i zestawów SDK w wersji 2 do wersji 3 interfejsu API i zestawu SDK przed 29 lutego 2024 r. Po 29 lutego 2024 r. usługa Azure Media Services nie będzie już akceptować ruchu w interfejsie API REST w wersji 2, interfejsu API zarządzania kontami usługi ARM w wersji 2015-10-01 lub z zestawów SDK klienta platformy .NET w wersji 2. Obejmuje to wszystkie zestawy SDK klienta typu open source innej firmy, które mogą wywoływać interfejs API w wersji 2. Dowiedz się więcej o najnowszej wersji, począwszy od omówienia usługi Media Services w wersji 3.

Usługę Azure Media Services można skonfigurować i zażądać licencji Google Widevine. Gdy gracz próbuje odtworzyć zawartość chronioną przez widevine, żądanie jest wysyłane do usługi dostarczania licencji w celu uzyskania licencji. Jeśli usługa licencji zatwierdzi żądanie, usługa wystawia licencję. Jest wysyłany do klienta i służy do odszyfrowywania i odtwarzania określonej zawartości.

Żądanie licencji Widevine jest sformatowane jako komunikat JSON.

Uwaga

Możesz utworzyć pusty komunikat bez wartości, tylko "{}". Następnie zostanie utworzony szablon licencji z wartościami domyślnymi. Wartość domyślna działa w większości przypadków. Scenariusze dostarczania licencji oparte na firmie Microsoft powinny zawsze używać wartości domyślnych. Jeśli musisz ustawić wartości "provider" i "content_id", dostawca musi być zgodny z poświadczeniami 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>
   }
}

Komunikat JSON

Nazwa Wartość Opis
payload Ciąg zakodowany w formacie Base64 Żądanie licencji wysłane przez klienta.
content_id Ciąg zakodowany w formacie Base64 Identyfikator używany do uzyskiwania identyfikatora klucza i klucza zawartości dla każdego content_key_specs.track_type.
Dostawca ciąg Służy do wyszukiwania kluczy zawartości i zasad. Jeśli do dostarczania licencji Widevine jest używane dostarczanie kluczy firmy Microsoft, ten parametr jest ignorowany.
policy_name ciąg Nazwa wcześniej zarejestrowanych zasad. Opcjonalny.
allowed_track_types enum SD_ONLY lub SD_HD. Steruje kluczami zawartości zawartymi w licencji.
content_key_specs Tablica struktur JSON zawiera sekcję "Specyfikacje klucza zawartości". Bardziej szczegółowa kontrolka, na której mają być zwracane klucze zawartości. Aby uzyskać więcej informacji, zobacz sekcję "Specyfikacje klucza zawartości". Można określić tylko jedną z allowed_track_types i content_key_specs wartości.
use_policy_overrides_exclusively Wartość logiczna, prawda lub fałsz Użyj atrybutów zasad określonych przez policy_overrides i pomiń wszystkie wcześniej przechowywane zasady.
policy_overrides Struktura JSON zawiera sekcję "Przesłonięcia zasad". Ustawienia zasad dla tej licencji. W przypadku, gdy ten zasób ma wstępnie zdefiniowane zasady, są używane te określone wartości.
session_init Struktura JSON zawiera sekcję "Inicjowanie sesji". Opcjonalne dane są przekazywane do licencji.
parse_only Wartość logiczna, prawda lub fałsz Żądanie licencji jest analizowane, ale nie wydano żadnej licencji. Jednak wartości z żądania licencji są zwracane w odpowiedzi.

Specyfikacje klucza zawartości

Jeśli istnieją istniejące zasady, nie ma potrzeby określania żadnych wartości w specyfikacji klucza zawartości. Istniejące zasady skojarzone z tą zawartością służą do określania ochrony danych wyjściowych, takich jak ochrona zawartości cyfrowej o wysokiej przepustowości (HDCP) i system zarządzania ogólnego kopiowania (CGMS). Jeśli istniejące zasady nie są zarejestrowane na serwerze licencji Widevine, dostawca zawartości może wstrzyknąć wartości do żądania licencji.

Każda wartość content_key_specs musi być określona dla wszystkich ścieżek, niezależnie od opcji use_policy_overrides_exclusively.

Nazwa Wartość Opis
content_key_specs. track_type ciąg Nazwa typu ścieżki. Jeśli w żądaniu licencji określono content_key_specs, upewnij się, że jawnie określono wszystkie typy śledzenia. Niepowodzenie w tym celu powoduje niepowodzenie odtwarzania z powrotem w ciągu ostatnich 10 sekund.
content_key_specs
security_level
uint32 Definiuje wymagania dotyczące niezawodności klienta do odtwarzania.
— Wymagana jest kryptografia oparta na oprogramowaniu.
— Wymagana jest kryptografia oprogramowania i zaciemniony dekoder.
— Kluczowe operacje materiałowe i kryptograficzne muszą być wykonywane w zaufanym środowisku wykonywania opartym na sprzęcie.
— Kryptografia i dekodowanie zawartości muszą być wykonywane w zaufanym środowisku wykonywania opartym na sprzęcie.
- Kryptografia, dekodowanie i cała obsługa nośnika (skompresowanego i nieskompresowanego) musi być obsługiwana w zaufanym środowisku wykonywania opartym na sprzęcie.
content_key_specs
required_output_protection.hdc
string, jeden z HDCP_NONE, HDCP_V1, HDCP_V2 Wskazuje, czy usługa HDCP jest wymagana.
content_key_specs
key
Base64-
zakodowany ciąg
Klucz zawartości do użycia na potrzeby tej ścieżki. W przypadku określenia wymagane jest track_type lub key_id. Dostawca zawartości może użyć tej opcji, aby wstrzyknąć klucz zawartości dla tej ścieżki zamiast zezwalać serwerowi licencji Widevine wygenerować lub wyszukać klucz.
content_key_specs.key_id Ciąg binarny zakodowany w formacie Base64, 16 bajtów Unikatowy identyfikator klucza.

Przesłonięcia zasad

Nazwa Wartość Opis
policy_overrides. can_play Wartość logiczna, prawda lub fałsz Wskazuje, że odtwarzanie zawartości jest dozwolone. Wartość domyślna to false.
policy_overrides. can_persist Wartość logiczna, prawda lub fałsz Wskazuje, że licencja może być utrwalone w magazynie niewolnym do użytku w trybie offline. Wartość domyślna to false.
policy_overrides. can_renew Wartość logiczna, prawda lub fałsz Wskazuje, że odnowienie tej licencji jest dozwolone. Jeśli to prawda, czas trwania licencji może zostać przedłużony przez puls. Wartość domyślna to false.
policy_overrides. license_duration_seconds int64 Wskazuje przedział czasu dla tej konkretnej licencji. Wartość 0 wskazuje, że nie ma limitu czasu trwania. Wartość domyślna to 0.
policy_overrides. rental_duration_seconds int64 Wskazuje przedział czasu, gdy odtwarzanie jest dozwolone. Wartość 0 wskazuje, że nie ma limitu czasu trwania. Wartość domyślna to 0.
policy_overrides. playback_duration_seconds int64 Okno wyświetlania czasu po rozpoczęciu odtwarzania w czasie trwania licencji. Wartość 0 wskazuje, że nie ma limitu czasu trwania. Wartość domyślna to 0.
policy_overrides. renewal_server_url ciąg Wszystkie żądania pulsu (odnowienia) dla tej licencji są kierowane do określonego adresu URL. To pole jest używane tylko wtedy, gdy can_renew ma wartość true.
policy_overrides. renewal_delay_seconds int64 Ile sekund po license_start_time przed pierwszym podjęciem próby odnowienia. To pole jest używane tylko wtedy, gdy can_renew ma wartość true. Wartość domyślna to 0.
policy_overrides. renewal_retry_interval_seconds int64 Określa opóźnienie w sekundach między kolejnymi żądaniami odnowienia licencji, w przypadku awarii. To pole jest używane tylko wtedy, gdy can_renew ma wartość true.
policy_overrides. renewal_recovery_duration_seconds int64 Przedział czasu, w którym odtwarzanie może być kontynuowane podczas próby odnowienia, ale nie powiodło się z powodu problemów zaplecza z serwerem licencji. Wartość 0 wskazuje, że nie ma limitu czasu trwania. To pole jest używane tylko wtedy, gdy can_renew ma wartość true.
policy_overrides. renew_with_usage Wartość logiczna, prawda lub fałsz Wskazuje, że licencja jest wysyłana do odnowienia po uruchomieniu użycia. To pole jest używane tylko wtedy, gdy can_renew ma wartość true.

Inicjowanie sesji

Nazwa Wartość Opis
provider_session_token Ciąg zakodowany w formacie Base64 Ten token sesji jest przekazywany z powrotem w licencji i istnieje w kolejnych odnowieniach. Token sesji nie jest utrwalany poza sesjami.
provider_client_token Ciąg zakodowany w formacie Base64 Token klienta do wysłania z powrotem w odpowiedzi na licencję. Jeśli żądanie licencji zawiera token klienta, ta wartość jest ignorowana. Token klienta utrzymuje się poza sesjami licencji.
override_provider_client_token Wartość logiczna, prawda lub fałsz Jeśli wartość false i żądanie licencji zawiera token klienta, użyj tokenu z żądania, nawet jeśli token klienta został określony w tej strukturze. Jeśli wartość true, zawsze należy użyć tokenu określonego w tej strukturze.

Konfigurowanie licencji Widevine przy użyciu typów platformy .NET

Usługa Media Services udostępnia interfejsy API platformy .NET, których można użyć do skonfigurowania licencji Widevine.

Klasy zdefiniowane w zestawie .NET SDK usługi Media Services

Następujące klasy to definicje tych typów:

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
}

Przykład

W poniższym przykładzie pokazano, jak skonfigurować prostą licencję widevine przy użyciu interfejsów API platformy .NET:

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;
}

Uwagi dodatkowe

  • Widevine jest usługą dostarczaną przez Google Inc. i podlega warunkom świadczenia usług i zasadom ochrony prywatności Google, Inc.