Översikt över Widevine-licensmallen

media services logo


Du kan använda Azure Media Services för att konfigurera och begära Google Widevine-licenser. När spelaren försöker spela upp ditt Widevine-skyddade innehåll skickas en begäran till licensleveranstjänsten för att få en licens. Om licenstjänsten godkänner begäran utfärdar tjänsten licensen. Den skickas till klienten och används för att dekryptera och spela upp det angivna innehållet.

En Widevine-licensbegäran formateras som ett JSON-meddelande.

Anteckning

Du kan skapa ett tomt meddelande utan värden, bara "{}.". Sedan skapas en licensmall med standardvärden. Standardinställningen fungerar i de flesta fall. Microsoft-baserade scenarier för licensleverans bör alltid använda standardvärdena. Om du behöver ange värdena "provider" och "content_id" måste en provider matcha Widevine-autentiseringsuppgifterna.

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

JSON-meddelande

Name Värde Beskrivning
payload Base64-kodad sträng Licensbegäran som skickas av en klient.
content_id Base64-kodad sträng Identifierare som används för att härleda nyckel-ID och innehållsnyckel för varje content_key_specs.track_type.
Leverantör sträng Används för att söka efter innehållsnycklar och principer. Om Microsofts nyckelleverans används för Widevine-licensleverans ignoreras den här parametern.
policy_name sträng Namnet på en tidigare registrerad princip. Valfritt.
allowed_track_types Enum SD_ONLY eller SD_HD. Styr vilka innehållsnycklar som ingår i en licens.
content_key_specs Matris med JSON-strukturer, se avsnittet "Innehållsnyckelspecifikationer". En finkornig kontroll över vilka innehållsnycklar som ska returneras. Mer information finns i avsnittet "Innehållsnyckelspecifikationer". Endast ett av värdena för allowed_track_types och content_key_specs kan anges.
use_policy_overrides_exclusively Booleskt värde, sant eller falskt Använd principattribut som anges av policy_overrides och utelämna alla tidigare lagrade principer.
policy_overrides JSON-struktur, se avsnittet "Princip åsidosättningar". Principinställningar för den här licensen. Om den här tillgången har en fördefinierad princip används dessa angivna värden.
session_init JSON-struktur, se avsnittet "Sessionsinitiering". Valfria data skickas till licensen.
parse_only Booleskt värde, sant eller falskt Licensbegäran parsas, men ingen licens utfärdas. Värden från licensbegäran returneras dock i svaret.

Innehållsnyckelspecifikationer

Om det finns en befintlig princip behöver du inte ange något av värdena i innehållsnyckelspecifikationen. Den befintliga principen som är associerad med det här innehållet används för att fastställa utdataskyddet, till exempel HDCP (High-Bandwidth Digital Content Protection) och CGMS (Copy General Management System). Om en befintlig princip inte är registrerad hos Widevine-licensservern kan innehållsprovidern mata in värdena i licensbegäran.

Varje content_key_specs värde måste anges för alla spår, oavsett use_policy_overrides_exclusively alternativ.

Name Värde Beskrivning
content_key_specs. track_type sträng Ett namn på spårtyp. Om content_key_specs anges i licensbegäran måste du uttryckligen ange alla spårtyper. Om du inte gör det går det inte att spela upp de senaste 10 sekunderna.
content_key_specs
security_level
uint32 Definierar kraven på klientens robusthet för uppspelning.
– Programvarubaserad kryptering med vit låda krävs.
– Programvarukryptografi och en dold avkodare krävs.
– Nyckelmaterial- och kryptografiåtgärderna måste utföras i en maskinvarustödd betrodd körningsmiljö.
– Kryptografi och avkodning av innehåll måste utföras i en maskinvarustödd betrodd körningsmiljö.
– Kryptografi, avkodning och all hantering av mediet (komprimerad och okomprimerad) måste hanteras i en maskinvarustödd betrodd körningsmiljö.
content_key_specs
required_output_protection.hdc
sträng, en av HDCP_NONE, HDCP_V1, HDCP_V2 Anger om HDCP krävs.
content_key_specs
key
Base64-
kodad sträng
Innehållsnyckel som ska användas för det här spåret. Om det anges krävs track_type eller key_id. Innehållsleverantören kan använda det här alternativet för att mata in innehållsnyckeln för det här spåret i stället för att låta Widevine-licensservern generera eller leta upp en nyckel.
content_key_specs.key_id Base64-kodad sträng binär, 16 byte Unik identifierare för nyckeln.

Åsidosättningar av principer

Name Värde Beskrivning
policy_overrides. can_play Booleskt värde, sant eller falskt Anger att uppspelning av innehållet tillåts. Standardvärdet är false.
policy_overrides. can_persist Booleskt värde, sant eller falskt Anger att licensen kan sparas till icke-beständig lagring för offlineanvändning. Standardvärdet är false.
policy_overrides. can_renew Booleskt värde, sant eller falskt Anger att förnyelse av den här licensen tillåts. Om det är sant kan licensens varaktighet förlängas med pulsslag. Standardvärdet är false.
policy_overrides. license_duration_seconds int64 Anger tidsperioden för den här specifika licensen. Värdet 0 anger att det inte finns någon gräns för varaktigheten. Standardvärdet är 0.
policy_overrides. rental_duration_seconds int64 Anger tidsfönstret när uppspelning tillåts. Värdet 0 anger att det inte finns någon gräns för varaktigheten. Standardvärdet är 0.
policy_overrides. playback_duration_seconds int64 Visningsfönstret efter uppspelningen startar inom licensens varaktighet. Värdet 0 anger att det inte finns någon gräns för varaktigheten. Standardvärdet är 0.
policy_overrides. renewal_server_url sträng Alla pulsslagsbegäranden (förnyelse) för den här licensen dirigeras till den angivna URL:en. Det här fältet används bara om can_renew är sant.
policy_overrides. renewal_delay_seconds int64 Hur många sekunder efter license_start_time före förnyelsen görs först. Det här fältet används bara om can_renew är sant. Standardvärdet är 0.
policy_overrides. renewal_retry_interval_seconds int64 Anger fördröjningen i sekunder mellan efterföljande begäranden om licensförnyelse i händelse av fel. Det här fältet används bara om can_renew är sant.
policy_overrides. renewal_recovery_duration_seconds int64 Tidsperioden då uppspelningen kan fortsätta medan förnyelsen görs, men misslyckas på grund av serverdelsproblem med licensservern. Värdet 0 anger att det inte finns någon gräns för varaktigheten. Det här fältet används bara om can_renew är sant.
policy_overrides. renew_with_usage Booleskt värde, sant eller falskt Anger att licensen skickas för förnyelse när användningen startar. Det här fältet används bara om can_renew är sant.

Sessionsinitiering

Name Värde Beskrivning
provider_session_token Base64-kodad sträng Denna sessionstoken skickas tillbaka i licensen och finns i efterföljande förnyelser. Sessionstoken bevaras inte längre än sessioner.
provider_client_token Base64-kodad sträng Klienttoken som ska skickas tillbaka i licenssvaret. Om licensbegäran innehåller en klienttoken ignoreras det här värdet. Klienttoken finns kvar utöver licenssessioner.
override_provider_client_token Booleskt värde, sant eller falskt Om false och licensbegäran innehåller en klienttoken använder du token från begäran även om en klienttoken har angetts i den här strukturen. Om det är sant använder du alltid den token som anges i den här strukturen.

Konfigurera dina Widevine-licenser med hjälp av .NET-typer

Media Services tillhandahåller .NET-API:er som du kan använda för att konfigurera Dina Widevine-licenser.

Klasser enligt definitionen i Media Services .NET SDK

Följande klasser är definitionerna av dessa typer:

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
}

Exempel

I följande exempel visas hur du använder .NET-API:er för att konfigurera en enkel Widevine-licens:

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

Ytterligare information

  • Widevine är en tjänst som tillhandahålls av Google Inc. och omfattas av användarvillkoren och sekretesspolicyn för Google, Inc.