Panoramica del modello di licenza WidevineWidevine license template overview

Servizi multimediali di Azure consente di configurare e richiedere licenze Widevine.Azure Media Services enables you to configure and request Widevine licenses. Quando il lettore dell'utente finale tenta di riprodurre contenuto protetto da Widevine, viene inviata una richiesta al servizio di distribuzione di licenze per ottenere una licenza.When the end user player tries to play your Widevine protected content, a request is sent to the license delivery service to obtain a license. Se il servizio licenze approva la richiesta, la licenza viene rilasciata e inviata al client e potrà essere usata per decrittografare e riprodurre il contenuto specificato.If the license service approves the request, it issues the license which is sent to the client and can be used to decrypt and play the specified content.

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

Nota

È possibile scegliere di creare un messaggio vuoto senza valori, contenente solo "{}", e verrà creato un modello di licenza con tutti i valori predefiniti.You can choose to create an empty message with no values just "{}" and a license template will be created with all defaults. Il valore predefinito funziona nella maggior parte dei casi.The default works for most cases. Ad esempio, per scenari di distribuzione licenze basati su MS che devono essere sempre predefiniti.For example, for MS based license delivery scenarios that should always be default. Se è necessario impostare i valori di "content_id" e "provider", un provider deve corrispondere alle credenziali di Google Widevine.If you do need to set the "provider" and "content_id" values, a provider must match Google's 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 KeyId(s) e Content Key(s) per ogni content_key_specs.track_type.Identifier used to derive KeyId(s) and Content Key(s) for each content_key_specs.track_type.
providerprovider stringstring Consente di cercare criteri e chiavi simmetriche.Used to look up content keys and policies. Se viene usata la distribuzione delle chiavi MS per la distribuzione di licenze Widevine, questo parametro viene ignorato.If MS key delivery is used for Widevine license delivery, this parameter is ignored.
policy_namepolicy_name stringstring Nome di un criterio precedentemente registrato.Name of a previously registered policy. FacoltativoOptional
allowed_track_typesallowed_track_types enumenum SD_ONLY o SD_HD.SD_ONLY or SD_HD. Consente di specificare le chiavi simmetriche da includere in una licenzaControls which content keys should be included in a license
content_key_specscontent_key_specs Matrice di strutture JSON. Vedere la sezione Specifiche della chiave simmetrica riportata di seguitoarray of JSON structures, see Content Key Specs below Controllo più granulare dei contenuti da restituire.A finer grained control on what content keys to return. Per informazioni, vedere la sezione Specifiche della chiave simmetrica riportata di seguito.See Content Key Spec below for details. È possibile specificare solo uno dei valori allowed_track_types e content_key_specs.Only one of allowed_track_types and content_key_specs can be specified.
use_policy_overrides_exclusivelyuse_policy_overrides_exclusively boolean.boolean. true o falsetrue 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 riportata di seguitoJSON structure, see Policy Overrides below Impostazioni di criteri per questa licenza.Policy settings for this license. Nel caso in cui per questo asset esistano già criteri predefiniti, verranno usati questi valori specificati.In the event this asset has a pre-defined policy, these specified values will be used.
session_initsession_init Struttura JSON, vedere la sezione Inizializzazione della sessione riportata di seguitoJSON structure, see Session Initialization below Dati facoltativi passati alla licenza.Optional data passed to license.
parse_onlyparse_only boolean.boolean. true o falsetrue 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 form 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. Verranno infatti usati i criteri pre-esistenti associati al contenuto per determinare il tipo di protezione di output, ad esempio HDCP o CGMS.If a pre-existing policy exist, there is no need to specify any of the values in the Content Key Spec. The pre-existing policy associated with this content will be used to determine the output protection such as HDCP and CGMS. Se i criteri pre-esistenti non sono registrati con il server di licenze Widevine, il provider di contenuti può inserire manualmente i valori nella richiesta di licenza.If a pre-existing policy is not 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 must be specified for all tracks, regardless of the option use_policy_overrides_exclusively.

NomeName ValoreValue DescriptionDescription
content_key_specscontent_key_specs. track_typetrack_type stringstring 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 potranno essere riprodotti gli ultimi 10 secondi.Failure to do so will result in failure to playback 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.
1 - È richiesta una soluzione di crittografia white box basata su software.1 - Software-based whitebox crypto is required.
2 - È necessaria una soluzione di crittografia software e un decodificatore offuscato.2 - Software crypto and an obfuscated decoder is required.
3 - Il materiale della chiave e le operazioni di crittografia devono essere eseguiti all'interno di un ambiente di esecuzione affidabile basato su hardware.3 - The key material and crypto operations must be performed within a hardware backed trusted execution environment.
4 - Le operazioni di crittografia e decodifica devono essere eseguite all'interno di un ambiente di esecuzione affidabile basato su hardware.4 - The crypto and decoding of content must be performed within a hardware backed trusted execution environment.
5 - Le operazioni di crittografia e decodifica e l'intera gestione dei contenuti multimediali (con e senza compressione) devono essere eseguite all'interno di un ambiente di esecuzione affidabile basato su hardware.5 - The crypto, 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 HDCPIndicates whether HDCP is require
content_key_specscontent_key_specs
keykey
Stringa con Base64
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. Questa opzione consente al provider di contenuti di inserire manualmente la chiave simmetrica della traccia ed evitare quindi che sia il server di licenze Widevine a generare o cercare una chiave.This option allows the content provider to inject the content key for this track instead of letting Widevine license server generate or lookup 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 DescriptionDescription
policy_overridespolicy_overrides. can_playcan_play boolean.boolean. true o falsetrue 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 boolean.boolean. true o falsetrue or false Indica che la licenza può essere mantenuta in una risorsa di archiviazione non volatile per l'uso offline.Indicates that the license may be persisted to non-volatile 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 once 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 stringstring Tutte le richieste di heartbeat (rinnovo) per la licenza saranno inoltrate all'URL specificato.All heartbeat (renewal) requests for this license shall be directed to the specified URL. Questo campo viene usato solo se can_renew è true.This field is only used 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 only used if can_renew is true. Il valore predefinito è 0Default 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 only used if can_renew is true.
policy_overridespolicy_overrides. renewal_recovery_duration_secondsrenewal_recovery_duration_seconds int64int64 Il periodo di tempo per il quale può continuare la riproduzione mentre vengono eseguiti nuovi tentativi di rinnovo, ancora con negativo a causa di problemi di back-end con il server licenze.The window of time, in which playback is allowed to continue while renewal is attempted, yet unsuccessful due to backend 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 only used if can_renew is true.
policy_overridespolicy_overrides. renew_with_usagerenew_with_usage Booleano: true o falseboolean true or false Indica che la licenza verrà inviata per il rinnovo nel momento in cui si inizia ad usarla.Indicates that the license shall be sent for renewal when usage is started. Questo campo viene usato solo se can_renew è true.This field is only used 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 persisterà nei rinnovi successivi,This session token is passed back in the license and will exist in subsequent renewals. ma non in altre sessioni.The session token will not 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 persisterà anche in altre sessioni della licenza.The client token will persist beyond license sessions.
override_provider_client_tokenoverride_provider_client_token boolean.boolean. true o falsetrue 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 using .NET types

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

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

Di seguito sono riportate le definizioni di questi tipi.The following 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 ancheSee also

Uso della crittografia comune dinamica PlayReady e/o WidevineUsing PlayReady and/or Widevine Dynamic Common Encryption