Übersicht zu Media Services v3 mit Widevine-LizenzvorlageMedia Services v3 with Widevine license template overview

Mit Azure Media Services können Sie Ihre Inhalte mit Google Widevine verschlüsseln.Azure Media Services enables you to encrypt your content with Google Widevine. Media Services bietet darüber hinaus einen Dienst zum Übermitteln von Widevine-Lizenzen.Media Services also provides a service for delivering Widevine licenses. Widevine-Lizenzen können mithilfe von Azure Media Services-APIs konfiguriert werden.You can use Azure Media Services APIs to configure Widevine licenses. Wenn ein Player versucht, Ihre durch Widevine geschützten Inhalte wiederzugeben, wird eine Anforderung zum Erwerben einer Lizenz an den Lizenzbereitstellungsdienst gesendet.When a player tries to play your Widevine-protected content, a request is sent to the license delivery service to obtain the license. Wenn der Lizenzdienst die Anforderung genehmigt, stellt der Dienst die Lizenz aus.If the license service approves the request, the service issues the license. Sie wird an den Client gesendet und dient zum Entschlüsseln und Wiedergeben des angegebenen Inhalts.It's sent to the client and is used to decrypt and play the specified content.

Eine Widevine-Lizenzanforderung ist als JSON-Nachricht formatiert.A Widevine license request is formatted as a JSON message.

Hinweis

Sie können eine leere Nachricht ohne Werte erstellen, indem Sie einfach „{}“ verwenden.You can create an empty message with no values, just "{}." Dann wird eine Lizenzvorlage mit Standardeinstellungen erstellt.Then a license template is created with defaults. Die Standardeinstellungen funktionieren in den meisten Fällen.The default works for most cases. Microsoft-basierte Lizenzübermittlungsszenarien sollten immer die Standardeinstellungen verwenden.Microsoft-based license-delivery scenarios should always use the defaults. Wenn Sie die Werte für „provider“ und „content_id“ festlegen müssen, muss der Anbieter den Widevine-Anmeldeinformationen entsprechen.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>
   }
}

JSON-NachrichtJSON message

NameName WertValue BESCHREIBUNGDescription
payloadpayload Base64-codierte ZeichenfolgeBase64-encoded string Die von einem Client gesendete Lizenzanforderung.The license request sent by a client.
content_idcontent_id Base64-codierte ZeichenfolgeBase64-encoded string Bezeichner, der zum Ableiten der Schlüssel-ID und des Inhaltsschlüssels für „content_key_specs.track_type“ verwendet wird.Identifier used to derive the key ID and content key for each content_key_specs.track_type.
Providerprovider Zeichenfolgestring Wird zum Nachschlagen von Inhaltsschlüsseln und Richtlinien verwendet.Used to look up content keys and policies. Wenn für die Widevine-Lizenzbereitstellung die Microsoft-Schlüsselübermittlung verwendet wird, wird dieser Parameter ignoriert.If Microsoft key delivery is used for Widevine license delivery, this parameter is ignored.
policy_namepolicy_name Zeichenfolgestring Der Name einer zuvor registrierten Richtlinie.Name of a previously registered policy. Optional.Optional.
allowed_track_typesallowed_track_types enumenum SD_ONLY oder SD_HD.SD_ONLY or SD_HD. Steuert, welche Inhaltsschlüssel in eine Lizenz aufgenommen werden.Controls which content keys are included in a license.
content_key_specscontent_key_specs Array von JSON-Strukturen, siehe Abschnitt „Spezifikationen für Inhaltsschlüssel“.Array of JSON structures, see the section "Content key specs." Eine feiner abgestimmte Steuerung der zurückzugebenden Inhaltsschlüssel.A finer-grained control on which content keys to return. Weitere Informationen finden Sie im Abschnitt „Spezifikationen für Inhaltsschlüssel“.For more information, see the section "Content key specs." Nur einer der Werte („allowed_track_types“ oder „content_key_specs“) kann angegeben werden.Only one of the allowed_track_types and content_key_specs values can be specified.
use_policy_overrides_exclusivelyuse_policy_overrides_exclusively Boolescher Wert, true oder falseBoolean, true or false Verwenden Sie Richtlinienattribute, die von „policy_overrides“ angegeben werden, und lassen Sie alle zuvor gespeicherten Richtlinien weg.Use policy attributes specified by policy_overrides, and omit all previously stored policy.
policy_overridespolicy_overrides JSON-Struktur, siehe Abschnitt „Außerkraftsetzungen von Richtlinien“.JSON structure, see the section "Policy overrides." Richtlinieneinstellungen für diese Lizenz.Policy settings for this license. Falls dieses Medienobjekt über eine vorab definierte Richtlinie verfügt, werden diese angegebenen Werte verwendet.In the event this asset has a predefined policy, these specified values are used.
session_initsession_init JSON-Struktur, siehe Abschnitt „Sitzungsinitialisierung“.JSON structure, see the section "Session initialization." An die Lizenz werden optionale Daten übergeben.Optional data is passed to the license.
parse_onlyparse_only Boolescher Wert, true oder falseBoolean, true or false Die Lizenzanforderung wird analysiert, jedoch wird keine Lizenz ausgestellt.The license request is parsed, but no license is issued. Allerdings werden Werte aus der Lizenzanforderung in der Antwort zurückgegeben.However, values from the license request are returned in the response.

Spezifikationen für InhaltsschlüsselContent key specs

Wenn eine Richtlinie bereits vorhanden ist, müssen keine Werte in der Spezifikation für Inhaltsschlüssel angegeben werden. Die mit diesen Inhalten verbundene, bereits bestehende Richtlinie wird zur Bestimmung des Ausgabeschutzes verwendet, z.B. HDCP (High-bandwidth Digital Content Protection) und CGMS (Copy General Management System).If a pre-existing policy exists, there is no need to specify any of the values in the content key spec. The pre-existing 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). Wenn eine vorhandene Richtlinie nicht beim Widevine-Lizenzserver registriert ist, kann der Inhaltsanbieter die Werte in die Lizenzanforderung einfügen.If a pre-existing policy isn't registered with the Widevine license server, the content provider can inject the values into the license request.

Jeder content_key_specs-Wert muss für alle Titel angegeben werden, unabhängig von der Option „use_policy_overrides_exclusively“.Each content_key_specs value must be specified for all tracks, regardless of the use_policy_overrides_exclusively option.

NameName WertValue BESCHREIBUNGDescription
content_key_specs.content_key_specs. track_typetrack_type Zeichenfolgestring Der Name eines Titeltyps.A track type name. Wenn „content_key_specs“ in der Lizenzanforderung angegeben ist, sollten Sie unbedingt alle Titeltypen explizit angeben.If content_key_specs is specified in the license request, make sure to specify all track types explicitly. Andernfalls wird die Wiedergabe nach 10 Sekunden beendet.Failure to do so results in failure to play back past 10 seconds.
content_key_specscontent_key_specs
security_levelsecurity_level
uint32uint32 Definiert die Clientstabilitätsanforderungen für die Wiedergabe.Defines client robustness requirements for playback.
– Softwarebasierte White-Box-Kryptografie ist erforderlich.- Software-based white-box cryptography is required.
– Softwarekryptografie und ein verborgener Decoder sind erforderlich.- Software cryptography and an obfuscated decoder are required.
– Die zentralen Vorgänge für Daten und Kryptografie müssen innerhalb einer hardwaregestützten vertrauenswürdigen Ausführungsumgebung ausgeführt werden.- The key material and cryptography operations must be performed within a hardware-backed trusted execution environment.
– Kryptografie und Decodierung müssen innerhalb einer hardwaregestützten vertrauenswürdigen Ausführungsumgebung ausgeführt werden.- The cryptography and decoding of content must be performed within a hardware-backed trusted execution environment.
– Kryptografie, Decodierung und Verarbeitung von Medien (komprimiert und nicht komprimiert) müssen innerhalb einer hardwaregestützten vertrauenswürdigen Ausführungsumgebung verarbeitet werden.- 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
Zeichenfolge, HDCP_NONE, HDCP_V1 oder HDCP_V2string, one of HDCP_NONE, HDCP_V1, HDCP_V2 Gibt an, ob HDCP erforderlich ist.Indicates whether HDCP is required.
content_key_specscontent_key_specs
Schlüsselkey
Base64-Base64-
codierte Zeichenfolgeencoded string
Der Inhaltsschlüssel, der für diesen Titel verwendet werden soll. Wenn ein Wert angegeben wird, ist „track_type“ oder „key_id“ erforderlich.Content key to use for this track. If specified, the track_type or key_id is required. Mit dieser Option können Inhaltsanbieter den Inhaltsschlüssel für diesen Titel einfügen, statt einen Schlüssel durch den Widevine-Lizenzserver zu generieren oder zu suchen.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 Base64-codierte binäre Zeichenfolge, 16 BytesBase64-encoded string binary, 16 bytes Eindeutiger Bezeichner für den Schlüssel.Unique identifier for the key.

Außerkraftsetzungen von RichtlinienPolicy overrides

NameName WertValue BESCHREIBUNGDescription
policy_overrides.can_playpolicy_overrides.can_play Boolescher Wert, true oder falseBoolean, true or false Gibt an, dass die Wiedergabe des Inhalts zulässig ist.Indicates that playback of the content is allowed. Der Standardwert ist "false".Default is false.
policy_overrides.can_persistpolicy_overrides.can_persist Boolescher Wert, true oder falseBoolean, true or false Gibt an, dass die Lizenz in einem permanenten Speicher für die Offlineverwendung beibehalten werden kann.Indicates that the license might be persisted to nonvolatile storage for offline use. Der Standardwert ist "false".Default is false.
policy_overrides.can_renewpolicy_overrides.can_renew Boolescher Wert, true oder falseBoolean, true or false Gibt an, dass die Verlängerung dieser Lizenz zulässig ist.Indicates that renewal of this license is allowed. Bei „true“ kann die Dauer der Lizenz über den Takt verlängert werden.If true, the duration of the license can be extended by heartbeat. Der Standardwert ist "false".Default is false.
policy_overrides.license_duration_secondspolicy_overrides.license_duration_seconds int64int64 Gibt das Zeitfenster für diese bestimmte Lizenz an.Indicates the time window for this specific license. Der Wert 0 gibt an, dass es keine Beschränkung für die Dauer gibt.A value of 0 indicates that there is no limit to the duration. Standard ist "0".Default is 0.
policy_overrides.rental_duration_secondspolicy_overrides.rental_duration_seconds int64int64 Gibt das Zeitfenster an, in dem die Wiedergabe zulässig ist.Indicates the time window while playback is permitted. Der Wert 0 gibt an, dass es keine Beschränkung für die Dauer gibt.A value of 0 indicates that there is no limit to the duration. Standard ist "0".Default is 0.
policy_overrides.playback_duration_secondspolicy_overrides.playback_duration_seconds int64int64 Das Anzeigezeitfenster, sobald die Wiedergabe innerhalb der Lizenzdauer beginnt.The viewing window of time after playback starts within the license duration. Der Wert 0 gibt an, dass es keine Beschränkung für die Dauer gibt.A value of 0 indicates that there is no limit to the duration. Standard ist "0".Default is 0.
policy_overrides.renewal_server_urlpolicy_overrides.renewal_server_url Zeichenfolgestring Alle Heartbeatanforderungen (Verlängerung) für diese Lizenz werden an die angegebene URL weitergeleitet.All heartbeat (renewal) requests for this license is directed to the specified URL. Dieses Feld wird nur verwendet, wenn „can_renew“ auf „true“ festgelegt ist.This field is used only if can_renew is true.
policy_overrides.renewal_delay_secondspolicy_overrides.renewal_delay_seconds int64int64 Die Anzahl der Sekunden nach „license_start_time“, bevor der erste Versuch einer Verlängerung unternommen wird.How many seconds after license_start_time before renewal is first attempted. Dieses Feld wird nur verwendet, wenn „can_renew“ auf „true“ festgelegt ist.This field is used only if can_renew is true. Standard ist "0".Default is 0.
policy_overrides.renewal_retry_interval_secondspolicy_overrides.renewal_retry_interval_seconds int64int64 Gibt die Verzögerung in Sekunden zwischen den nachfolgenden Anforderungen zu Lizenzverlängerung an, falls ein Fehler auftritt.Specifies the delay in seconds between subsequent license renewal requests, in case of failure. Dieses Feld wird nur verwendet, wenn „can_renew“ auf „true“ festgelegt ist.This field is used only if can_renew is true.
policy_overrides.renewal_recovery_duration_secondspolicy_overrides.renewal_recovery_duration_seconds int64int64 Das Zeitfenster, für das die Wiedergabe fortgesetzt werden kann, während der Versuch einer Verlängerung unternommen wird, aber aufgrund von Back-End-Problemen mit dem Lizenzserver noch nicht erfolgreich war.The window of time in which playback can continue while renewal is attempted, yet unsuccessful due to back-end problems with the license server. Der Wert 0 gibt an, dass es keine Beschränkung für die Dauer gibt.A value of 0 indicates that there is no limit to the duration. Dieses Feld wird nur verwendet, wenn „can_renew“ auf „true“ festgelegt ist.This field is used only if can_renew is true.
policy_overrides.renew_with_usagepolicy_overrides.renew_with_usage Boolescher Wert, true oder falseBoolean, true or false Gibt an, dass die Lizenz zur Verlängerung gesendet wird, wenn die Verwendung startet.Indicates that the license is sent for renewal when usage starts. Dieses Feld wird nur verwendet, wenn „can_renew“ auf „true“ festgelegt ist.This field is used only if can_renew is true.

SitzungsinitialisierungSession initialization

NameName WertValue BESCHREIBUNGDescription
provider_session_tokenprovider_session_token Base64-codierte ZeichenfolgeBase64-encoded string Dieses Sitzungstoken wird wieder in der Lizenz übergeben und ist in nachfolgenden Verlängerungen vorhanden.This session token is passed back in the license and exists in subsequent renewals. Das Sitzungstoken bleibt nicht über Sitzungen hinaus erhalten.The session token doesn't persist beyond sessions.
provider_client_tokenprovider_client_token Base64-codierte ZeichenfolgeBase64-encoded string Clienttoken, das in der Lizenzantwort zurück gesendet wird.Client token to send back in the license response. Wenn die Lizenzanforderung ein Clienttoken enthält, wird dieser Wert ignoriert.If the license request contains a client token, this value is ignored. Das Clienttoken bleibt über Lizenzsitzungen hinaus erhalten.The client token persists beyond license sessions.
override_provider_client_tokenoverride_provider_client_token Boolescher Wert, true oder falseBoolean, true or false Wenn „false“ festgelegt wird und die Lizenzanforderung ein Clienttoken enthält, verwenden Sie das Token aus der Anforderung, selbst wenn ein Clienttoken in dieser Struktur angegeben wurde.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. Verwenden Sie bei „true“ immer das Token, das in dieser Struktur angegeben ist.If true, always use the token specified in this structure.

Konfigurieren der Widevine-Lizenz mit .NETConfigure your Widevine license with .NET

Media Services umfasst eine Klasse, mit der Sie eine Widevine-Lizenz konfigurieren können.Media Services provides a class that lets you configure a Widevine license. Um die Lizenz zu erstellen, übergeben Sie eine JSON-Zeichenfolge an WidevineTemplate.To construct the license, pass JSON to WidevineTemplate.

Zum Konfigurieren der Vorlage haben Sie folgende Möglichkeiten:To configure the template, you can:

Sie können direkt eine JSON-Zeichenfolge erstellen.Directly construct a JSON string

Diese Methode kann jedoch fehleranfällig sein.This method may be error-prone. Es wird empfohlen, eine andere Methode zu verwenden, wie in Definieren der erforderlichen Klassen und Serialisieren in JSON.It is recommended to use other method, described in Define needed classes and serialize to JSON.

ContentKeyPolicyWidevineConfiguration objContentKeyPolicyWidevineConfiguration = new ContentKeyPolicyWidevineConfiguration
{
    WidevineTemplate = @"{""allowed_track_types"":""SD_HD"",""content_key_specs"":[{""track_type"":""SD"",""security_level"":1,""required_output_protection"":{""hdcp"":""HDCP_V2""}}],""policy_overrides"":{""can_play"":true,""can_persist"":true,""can_renew"":false}}"
};

Definieren von erforderlichen Klassen und Serialisieren in JSONDefine needed classes and serialize to JSON

Definieren von KlassenDefine classes

Im Folgenden sehen Sie ein Beispiel für die Definition von Klassen, die dem Widevine JSON-Schema zugeordnet sind.The following example shows an example of definitions of classes that map to Widevine JSON schema. Sie können die Klassen instanziieren, bevor Sie sie in der JSON-Zeichenfolge serialisieren.You can instantiate the classes before serializing them to JSON string.

public class PolicyOverrides
{
    public bool CanPlay { get; set; }
    public bool CanPersist { get; set; }
    public bool CanRenew { get; set; }
    public int RentalDurationSeconds { get; set; }    //Indicates the time window while playback is permitted. A value of 0 indicates that there is no limit to the duration. Default is 0.
    public int PlaybackDurationSeconds { get; set; }  //The viewing window of time after playback starts within the license duration. A value of 0 indicates that there is no limit to the duration. Default is 0.
    public int LicenseDurationSeconds { get; set; }   //Indicates the time window for this specific license. A value of 0 indicates that there is no limit to the duration. Default is 0.
}

public class ContentKeySpec
{
    public string TrackType { get; set; }
    public int SecurityLevel { get; set; }
    public OutputProtection RequiredOutputProtection { get; set; }
}

public class OutputProtection
{
    public string HDCP { get; set; }
}

public class WidevineTemplate
{
    public string AllowedTrackTypes { get; set; }
    public ContentKeySpec[] ContentKeySpecs { get; set; }
    public PolicyOverrides PolicyOverrides { get; set; }
}

Konfigurieren der LizenzConfigure the license

Verwenden Sie die im vorherigen Abschnitt definierten Klassen, um eine JSON-Zeichenfolge zu erstellen, mit der WidevineTemplate konfiguriert wird:Use classes defined in the previous section to create JSON that is used to configure WidevineTemplate:

private static ContentKeyPolicyWidevineConfiguration ConfigureWidevineLicenseTempate()
{
    WidevineTemplate template = new WidevineTemplate()
    {
        AllowedTrackTypes = "SD_HD",
        ContentKeySpecs = new ContentKeySpec[]
        {
            new ContentKeySpec()
            {
                TrackType = "SD",
                SecurityLevel = 1,
                RequiredOutputProtection = new OutputProtection()
                {
                    HDCP = "HDCP_V2"
                }
            }
        },
        PolicyOverrides = new PolicyOverrides()
        {
            CanPlay = true,
            CanPersist = true,
            CanRenew = false,
            RentalDurationSeconds = 2592000,
            PlaybackDurationSeconds = 10800,
            LicenseDurationSeconds = 604800,
        }
    };

    ContentKeyPolicyWidevineConfiguration objContentKeyPolicyWidevineConfiguration = new ContentKeyPolicyWidevineConfiguration
    {
        WidevineTemplate = Newtonsoft.Json.JsonConvert.SerializeObject(template)
    };
    return objContentKeyPolicyWidevineConfiguration;
}

Zusätzliche HinweiseAdditional notes

  • Widevine ist ein von Google Inc. bereitgestellter Dienst, der den Vertragsbedingungen und der Datenschutzrichtlinie von Google, Inc. unterliegt.Widevine is a service provided by Google Inc. and subject to the terms of service and Privacy Policy of Google, Inc.

Nächste SchritteNext steps

Informieren Sie sich über das Schützen mit DRM.Check out how to protect with DRM