Panoramica del modello di licenza WidevineWidevine license template overview

Servizi multimediali di Azure consente di configurare e richiedere licenze Google Widevine.You can use Azure Media Services to configure and request Google Widevine licenses. Quando il lettore tenta di riprodurre contenuto protetto da Widevine, viene inviata una richiesta al servizio di distribuzione di licenze per ottenere una licenza.When the player tries to play your Widevine-protected content, a request is sent to the license delivery service to obtain a license. Se il servizio di licenza approva la richiesta, genera la licenza.If the license service approves the request, the service issues the license. Viene inviata al client e usata per decrittografare e riprodurre il contenuto specificato.It's sent to the client and is used to decrypt and play the specified content.

Una richiesta per la licenza Widevine è formattata come messaggio JSON.A Widevine license request is formatted as a JSON message.

Nota

È possibile creare un messaggio vuoto senza alcun valore, semplicemente "{}".You can create an empty message with no values, just "{}." Quindi viene creato un modello di licenza con le impostazioni predefinite.Then a license template is created with defaults. Il valore predefinito funziona nella maggior parte dei casi.The default works for most cases. Gli scenari di distribuzione di licenze basati su Microsoft devono sempre usare i valori predefiniti.Microsoft-based license-delivery scenarios should always use the defaults. Se è necessario impostare i valori di "provider" e "content_id", un provider deve corrispondere alle credenziali di Widevine.If you need to set the "provider" and "content_id" values, a provider must match Widevine credentials.

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

Messaggio JSONJSON message

NomeName ValoreValue DescrizioneDescription
payloadpayload Stringa con codifica Base64Base64-encoded string Richiesta di licenza inviata da un client.The license request sent by a client.
content_idcontent_id Stringa con codifica Base64Base64-encoded string Identificatore usato per derivare l'ID chiave e la chiave simmetrica per ogni content_key_specs.track_type.Identifier used to derive the key ID and content key for each content_key_specs.track_type.
providerprovider stringastring Consente di cercare criteri e chiavi simmetriche.Used to look up content keys and policies. Se viene usata la distribuzione delle chiavi Microsoft per la distribuzione di licenze Widevine, questo parametro viene ignorato.If Microsoft key delivery is used for Widevine license delivery, this parameter is ignored.
policy_namepolicy_name stringastring Nome di un criterio precedentemente registrato.Name of a previously registered policy. facoltativo.Optional.
allowed_track_typesallowed_track_types enumenum SD_ONLY o SD_HD.SD_ONLY or SD_HD. Consente di controllare le chiavi simmetriche incluse in una licenza.Controls which content keys are included in a license.
content_key_specscontent_key_specs Matrice di strutture JSON. Vedere la sezione "Specifiche della chiave simmetrica".Array of JSON structures, see the section "Content key specs." Controllo più granulare delle chiavi simmetriche da restituire.A finer-grained control on which content keys to return. Per altre informazioni, vedere la sezione "Specifiche della chiave simmetrica".For more information, see the section "Content key specs." È possibile specificare solo uno dei valori allowed_track_types e content_key_specs.Only one of the allowed_track_types and content_key_specs values can be specified.
use_policy_overrides_exclusivelyuse_policy_overrides_exclusively Booleano: true o falseBoolean, true or false Usare gli attributi di criteri specificati in policy_overrides e omettere tutti i criteri memorizzati in precedenza.Use policy attributes specified by policy_overrides, and omit all previously stored policy.
policy_overridespolicy_overrides Struttura JSON, vedere la sezione "Override dei criteri".JSON structure, see the section "Policy overrides." Impostazioni di criteri per questa licenza.Policy settings for this license. Nel caso in cui per questo asset esistano già criteri predefiniti, vengono usati questi valori specificati.In the event this asset has a predefined policy, these specified values are used.
session_initsession_init Struttura JSON, vedere la sezione "Inizializzazione della sessione".JSON structure, see the section "Session initialization." Dati facoltativi vengono passati alla licenza.Optional data is passed to the license.
parse_onlyparse_only Booleano: true o falseBoolean, true or false La richiesta di licenza viene analizzata, ma la licenza non viene generata.The license request is parsed, but no license is issued. Nella risposta, tuttavia, vengono restituiti i valori componenti la richiesta di licenza.However, values from the license request are returned in the response.

Specifiche della chiave simmetricaContent key specs

In presenza di criteri pre-esistenti, non è necessario specificare alcun valore nella specifica della chiave simmetrica. Il criterio pre-esistente associato a questo contenuto viene usato per determinare la protezione dell'output, ad esempio il sistema HDCP e il sistema CGMS.If a preexisting policy exists, there is no need to specify any of the values in the content key spec. The preexisting policy associated with this content is used to determine the output protection, such as High-bandwidth Digital Content Protection (HDCP) and the Copy General Management System (CGMS). Se i criteri pre-esistenti non sono registrati con il server di licenze Widevine, il provider di contenuti può inserire i valori nella richiesta di licenza.If a preexisting policy isn't registered with the Widevine license server, the content provider can inject the values into the license request.

Ogni valore content_key_specs deve essere specificato per tutte le singole tracce, indipendentemente dall'opzione use_policy_overrides_exclusively.Each content_key_specs value must be specified for all tracks, regardless of the use_policy_overrides_exclusively option.

NomeName ValoreValue DescrizioneDescription
content_key_specscontent_key_specs. track_typetrack_type stringastring Nome di un tipo di traccia.A track type name. Se nella richiesta di licenza è specificato un valore content_key_specs, assicurarsi di specificare esplicitamente tutti i tipi di traccia.If content_key_specs is specified in the license request, make sure to specify all track types explicitly. In caso contrario, non possono essere riprodotti gli ultimi 10 secondi.Failure to do so results in failure to play back past 10 seconds.
content_key_specscontent_key_specs
security_levelsecurity_level
Valore UInt32uint32 Definisce i requisiti di affidabilità client per la riproduzione.Defines client robustness requirements for playback.
- È richiesta una soluzione di crittografia white box basata su software.- Software-based white-box cryptography is required.
- Sono necessari una soluzione di crittografia software e un decodificatore offuscato.- Software cryptography and an obfuscated decoder are required.
- Il materiale della chiave e le operazioni di crittografia devono essere eseguiti all'interno di un ambiente di esecuzione affidabile basato su hardware.- The key material and cryptography operations must be performed within a hardware-backed trusted execution environment.
- Le operazioni di crittografia e decodifica del contenuto devono essere eseguite all'interno di un ambiente di esecuzione affidabile basato su hardware.- The cryptography and decoding of content must be performed within a hardware-backed trusted execution environment.
- Le operazioni di crittografia, decodifica e l'intera gestione dei file multimediali (con e senza compressione) devono essere eseguite all'interno di un ambiente di esecuzione affidabile basato su hardware.- The cryptography, decoding, and all handling of the media (compressed and uncompressed) must be handled within a hardware-backed trusted execution environment.
content_key_specscontent_key_specs
required_output_protection.hdcrequired_output_protection.hdc
Stringa, uno di HDCP_NONE, HDCP_V1, HDCP_V2string, one of HDCP_NONE, HDCP_V1, HDCP_V2 Indica se è necessario il protocollo HDCP.Indicates whether HDCP is required.
content_key_specscontent_key_specs
chiavekey
Base64Base64-
codifica Base64encoded string
Chiave simmetrica da usare per la traccia. Se specificato, è necessario immettere il valore track_type o key_idContent key to use for this track. If specified, the track_type or key_id is required. Il provider di contenuti può usare questa opzione per inserire la chiave simmetrica della traccia ed evitare quindi che sia il server di licenze Widevine a generare o cercare una chiave.The content provider can use this option to inject the content key for this track instead of letting the Widevine license server generate or look up a key.
content_key_specs.key_idcontent_key_specs.key_id Stringa binaria con codifica Base64, 16 byteBase64-encoded string binary, 16 bytes Identificatore univoco della chiave.Unique identifier for the key.

Override dei criteriPolicy overrides

NomeName ValoreValue DescrizioneDescription
policy_overridespolicy_overrides. can_playcan_play Booleano: true o falseBoolean, true or false Indica che è consentita la riproduzione del contenuto.Indicates that playback of the content is allowed. Il valore predefinito è false.Default is false.
policy_overridespolicy_overrides. can_persistcan_persist Booleano: true o falseBoolean, true or false Indica che la licenza può essere mantenuta in una memoria non volatile per l'uso offline.Indicates that the license might be persisted to nonvolatile storage for offline use. Il valore predefinito è false.Default is false.
policy_overridespolicy_overrides. can_renewcan_renew Booleano: true o falseBoolean, true or false Indica che è consentito il rinnovo della licenza.Indicates that renewal of this license is allowed. Se true, è possibile estendere la durata della licenza mediante heartbeat.If true, the duration of the license can be extended by heartbeat. Il valore predefinito è false.Default is false.
policy_overridespolicy_overrides. license_duration_secondslicense_duration_seconds int64int64 Indica la finestra temporale di validità della licenza.Indicates the time window for this specific license. Il valore 0 indica che non esiste alcun limite di durata.A value of 0 indicates that there is no limit to the duration. Il valore predefinito è 0.Default is 0.
policy_overridespolicy_overrides. rental_duration_secondsrental_duration_seconds int64int64 Indica la finestra temporale in cui è consentita la riproduzione.Indicates the time window while playback is permitted. Il valore 0 indica che non esiste alcun limite di durata.A value of 0 indicates that there is no limit to the duration. Il valore predefinito è 0.Default is 0.
policy_overridespolicy_overrides. playback_duration_secondsplayback_duration_seconds int64int64 La finestra temporale di visualizzazione a partire dall'inizio della riproduzione nell'ambito del periodo di validità della licenza.The viewing window of time after playback starts within the license duration. Il valore 0 indica che non esiste alcun limite di durata.A value of 0 indicates that there is no limit to the duration. Il valore predefinito è 0.Default is 0.
policy_overridespolicy_overrides. renewal_server_urlrenewal_server_url stringastring Tutte le richieste di heartbeat (rinnovo) per la licenza sono inoltrate all'URL specificato.All heartbeat (renewal) requests for this license are directed to the specified URL. Questo campo viene usato solo se can_renew è true.This field is used only if can_renew is true.
policy_overridespolicy_overrides. renewal_delay_secondsrenewal_delay_seconds int64int64 Numero di secondi prima che venga eseguito il primo tentativo di rinnovo, a partire dal valore license_start_time.How many seconds after license_start_time before renewal is first attempted. Questo campo viene usato solo se can_renew è true.This field is used only if can_renew is true. Il valore predefinito è 0.Default is 0.
policy_overridespolicy_overrides. renewal_retry_interval_secondsrenewal_retry_interval_seconds int64int64 Specifica l'intervallo di tempo, espresso in secondi, tra richieste di rinnovo della licenza consecutive, in caso di errore.Specifies the delay in seconds between subsequent license renewal requests, in case of failure. Questo campo viene usato solo se can_renew è true.This field is used only if can_renew is true.
policy_overridespolicy_overrides. renewal_recovery_duration_secondsrenewal_recovery_duration_seconds int64int64 La finestra temporale nella quale può continuare la riproduzione mentre vengono eseguiti nuovi tentativi di rinnovo, ancora con esito negativo a causa di problemi di back-end con il server licenze.The window of time in which playback can continue while renewal is attempted, yet unsuccessful due to back-end problems with the license server. Il valore 0 indica che non esiste alcun limite di durata.A value of 0 indicates that there is no limit to the duration. Questo campo viene usato solo se can_renew è true.This field is used only if can_renew is true.
policy_overridespolicy_overrides. renew_with_usagerenew_with_usage Booleano: true o falseBoolean, true or false Indica che la licenza viene inviata per il rinnovo nel momento in cui si inizia a usarla.Indicates that the license is sent for renewal when usage starts. Questo campo viene usato solo se can_renew è true.This field is used only if can_renew is true.

Inizializzazione della sessioneSession initialization

NomeName ValoreValue DescrizioneDescription
provider_session_tokenprovider_session_token Stringa con codifica Base64Base64-encoded string Questo token di sessione viene restituito alla licenza e persiste nei rinnovi successivi,This session token is passed back in the license and exists in subsequent renewals. ma non in altre sessioni.The session token doesn't persist beyond sessions.
provider_client_tokenprovider_client_token Stringa con codifica Base64Base64-encoded string Token client da restituire nella risposta di licenza.Client token to send back in the license response. Se la richiesta di licenza contiene un token client, questo valore viene ignorato.If the license request contains a client token, this value is ignored. Il token client persiste anche in altre sessioni della licenza.The client token persists beyond license sessions.
override_provider_client_tokenoverride_provider_client_token Booleano: true o falseBoolean, true or false Se false e la richiesta di licenza contiene un token client, usare il token della richiesta anche se nella struttura è stato specificato un token client.If false and the license request contains a client token, use the token from the request even if a client token was specified in this structure. Se true, usare sempre il token specificato nella struttura.If true, always use the token specified in this structure.

Configurare licenze Widevine usando tipi .NETConfigure your Widevine licenses by using .NET types

Servizi multimediali fornisce API .NET che consentono di configurare licenze Widevine.Media Services provides .NET APIs that you can use to configure your Widevine licenses.

Classi definite nell'SDK di Servizi multimediali per .NETClasses as defined in the Media Services .NET SDK

Le classi seguenti sono le definizioni di questi tipi:The following classes are the definitions of these types:

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
}

EsempioExample

L'esempio seguente mostra come usare le API .NET per configurare una licenza Widevine semplice:The following example shows how to use .NET APIs to configure a simple Widevine license:

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

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories:

Vedere anche See also

Usare la crittografia comune dinamica Widevine e/o PlayReadyUse PlayReady and/or Widevine dynamic common encryption