Overzicht van Widevine-licentiesjablonen

media services-logo


Waarschuwing

Werk uw Azure Media Services REST API en SDK's bij naar v3 op 29 februari 2024. Versie 3 van Azure Media Services REST API en client-SDK's voor .NET en Java biedt meer mogelijkheden dan versie 2. Versie 2 van de Azure Media Services REST API en client-SDK's voor .NET en Java wordt buiten gebruik gesteld.

Actie vereist: Als u onderbreking van uw workloads wilt minimaliseren, raadpleegt u de migratiehandleiding voor het overzetten van uw code van versie 2 API en SDK's naar versie 3 API en SDK vóór 29 februari 2024. Na 29 februari 2024 accepteert Azure Media Services geen verkeer meer op de REST API van versie 2, de ARM-accountbeheer-API versie 2015-10-01 of vanaf de .NET-client-SDK's van versie 2. Dit omvat alle opensource-client-SDK's van derden die de API van versie 2 kunnen aanroepen. Meer informatie over de nieuwste versie, te beginnen met het Overzicht van Media Services v3.

U kunt Azure Media Services gebruiken om Google Widevine-licenties te configureren en aan te vragen. Wanneer de speler probeert uw met Widevine beveiligde inhoud af te spelen, wordt er een aanvraag verzonden naar de service voor het leveren van licenties om een licentie te verkrijgen. Als de licentieservice de aanvraag goedkeurt, geeft de service de licentie uit. Het wordt verzonden naar de client en wordt gebruikt om de opgegeven inhoud te ontsleutelen en af te spelen.

Een Widevine-licentieaanvraag wordt opgemaakt als een JSON-bericht.

Notitie

U kunt een leeg bericht zonder waarden maken, alleen '.{}' Vervolgens wordt er een licentiesjabloon gemaakt met standaardwaarden. De standaardinstellingen zijn in de meeste gevallen prima. Scenario's voor het leveren van licenties op basis van Microsoft moeten altijd gebruikmaken van de standaardwaarden. Als u de waarden 'provider' en 'content_id' moet instellen, moet een provider overeenkomen met Widevine-referenties.

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

Naam Waarde Beschrijving
nettolading Met Base64 gecodeerde tekenreeks De licentieaanvraag die door een client wordt verzonden.
content_id Met Base64 gecodeerde tekenreeks Id die wordt gebruikt om de sleutel-id en inhoudssleutel af te leiden voor elk content_key_specs.track_type.
Provider tekenreeks Wordt gebruikt om inhoudssleutels en beleidsregels op te zoeken. Als Microsoft-sleutellevering wordt gebruikt voor de levering van Widevine-licenties, wordt deze parameter genegeerd.
policy_name tekenreeks Naam van een eerder geregistreerd beleid. Optioneel.
allowed_track_types Enum SD_ONLY of SD_HD. Hiermee bepaalt u welke inhoudssleutels zijn opgenomen in een licentie.
content_key_specs Matrix van JSON-structuren, zie de sectie 'Inhoudssleutelspecificaties'. Een nauwkeuriger besturingselement waarop inhoudssleutels moeten worden geretourneerd. Zie de sectie Inhoudssleutelspecificaties voor meer informatie. Er kunnen slechts een van de allowed_track_types- en content_key_specs waarden worden opgegeven.
use_policy_overrides_exclusively Booleaanse waarde, waar of onwaar Gebruik beleidskenmerken die zijn opgegeven door policy_overrides en laat alle eerder opgeslagen beleidsregels weg.
policy_overrides JSON-structuur, zie de sectie 'Beleidsoverschrijvingen'. Beleidsinstellingen voor deze licentie. In het geval dat deze asset een vooraf gedefinieerd beleid heeft, worden deze opgegeven waarden gebruikt.
session_init JSON-structuur, zie de sectie Sessie-initialisatie. Optionele gegevens worden doorgegeven aan de licentie.
parse_only Booleaanse waarde, waar of onwaar De licentieaanvraag wordt geparseerd, maar er wordt geen licentie uitgegeven. Waarden uit de licentieaanvraag worden echter geretourneerd in het antwoord.

Specificaties voor inhoudssleutels

Als er een vooraf bestaand beleid bestaat, hoeft u geen van de waarden in de inhoudssleutelspecificatie op te geven. Het bestaande beleid dat aan deze inhoud is gekoppeld, wordt gebruikt om de uitvoerbeveiliging te bepalen, zoals High-Bandwidth Digital Content Protection (HDCP) en het Copy General Management System (CGMS). Als een vooraf bestaand beleid niet is geregistreerd bij de Widevine-licentieserver, kan de inhoudsprovider de waarden in de licentieaanvraag injecteren.

Elke content_key_specs waarde moet worden opgegeven voor alle tracks, ongeacht de optie use_policy_overrides_exclusively.

Naam Waarde Beschrijving
content_key_specs. track_type tekenreeks Een naam van het tracktype. Als content_key_specs is opgegeven in de licentieaanvraag, moet u alle tracktypen expliciet opgeven. Als u dit niet doet, wordt het afspelen van de afgelopen 10 seconden mislukt.
content_key_specs
security_level
uint32 Definieert de robuustheidsvereisten voor clients voor afspelen.
- Op software gebaseerde white-box cryptografie is vereist.
- Softwarecryptografie en een verborgen decoder zijn vereist.
- De belangrijkste materiaal- en cryptografiebewerkingen moeten worden uitgevoerd binnen een door hardware ondersteunde vertrouwde uitvoeringsomgeving.
- De cryptografie en decodering van inhoud moeten worden uitgevoerd binnen een door hardware ondersteunde omgeving voor vertrouwde uitvoering.
- De cryptografie, decodering en alle verwerking van de media (gecomprimeerd en ongecomprimeerd) moeten worden verwerkt binnen een door hardware ondersteunde vertrouwde uitvoeringsomgeving.
content_key_specs
required_output_protection.hdc
tekenreeks, een van HDCP_NONE, HDCP_V1, HDCP_V2 Geeft aan of HDCP is vereist.
content_key_specs
sleutel
Base64-
gecodeerde tekenreeks
Inhoudssleutel die voor dit nummer moet worden gebruikt. Indien opgegeven, is de track_type of key_id vereist. De inhoudsprovider kan deze optie gebruiken om de inhoudssleutel voor dit spoor in te voeren in plaats van de Widevine-licentieserver een sleutel te laten genereren of opzoeken.
content_key_specs.key_id Binaire tekenreeks met Base64-codering, 16 bytes Unieke id voor de sleutel.

Beleidsoverschrijvingen

Naam Waarde Beschrijving
policy_overrides. can_play Booleaanse waarde, waar of onwaar Geeft aan dat het afspelen van de inhoud is toegestaan. De standaardinstelling is onwaar.
policy_overrides. can_persist Booleaanse waarde, waar of onwaar Geeft aan dat de licentie mogelijk behouden blijft in niet-compatibele opslag voor offline gebruik. De standaardinstelling is onwaar.
policy_overrides. can_renew Booleaanse waarde, waar of onwaar Geeft aan dat verlenging van deze licentie is toegestaan. Indien waar, kan de duur van de licentie worden verlengd met heartbeat. De standaardinstelling is onwaar.
policy_overrides. license_duration_seconds int64 Geeft het tijdvenster voor deze specifieke licentie aan. Een waarde van 0 geeft aan dat er geen limiet is voor de duur. De standaardwaarde is 0.
policy_overrides. rental_duration_seconds int64 Geeft het tijdvenster aan terwijl afspelen is toegestaan. Een waarde van 0 geeft aan dat er geen limiet is voor de duur. De standaardwaarde is 0.
policy_overrides. playback_duration_seconds int64 Het weergavevenster na het afspelen begint binnen de licentieduur. Een waarde van 0 geeft aan dat er geen limiet is voor de duur. De standaardwaarde is 0.
policy_overrides. renewal_server_url tekenreeks Alle heartbeataanvragen (verlengingsaanvragen) voor deze licentie worden omgeleid naar de opgegeven URL. Dit veld wordt alleen gebruikt als can_renew waar is.
policy_overrides. renewal_delay_seconds int64 Hoeveel seconden na license_start_time voordat de verlenging voor het eerst wordt geprobeerd. Dit veld wordt alleen gebruikt als can_renew waar is. De standaardwaarde is 0.
policy_overrides. renewal_retry_interval_seconds int64 Hiermee geeft u de vertraging in seconden tussen volgende aanvragen voor het verlengen van licenties op, in het geval van een fout. Dit veld wordt alleen gebruikt als can_renew waar is.
policy_overrides. renewal_recovery_duration_seconds int64 Het tijdvenster waarin afspelen kan worden voortgezet tijdens het verlengen wordt geprobeerd, maar mislukt vanwege back-endproblemen met de licentieserver. Een waarde van 0 geeft aan dat er geen limiet is voor de duur. Dit veld wordt alleen gebruikt als can_renew waar is.
policy_overrides. renew_with_usage Booleaanse waarde, waar of onwaar Geeft aan dat de licentie wordt verzonden voor verlenging wanneer het gebruik wordt gestart. Dit veld wordt alleen gebruikt als can_renew waar is.

Sessie-initialisatie

Naam Waarde Beschrijving
provider_session_token Met Base64 gecodeerde tekenreeks Dit sessietoken wordt teruggegeven in de licentie en bestaat in volgende verlengingen. Het sessietoken blijft niet langer bestaan dan sessies.
provider_client_token Met Base64 gecodeerde tekenreeks Clienttoken dat moet worden teruggestuurd in het licentieantwoord. Als de licentieaanvraag een clienttoken bevat, wordt deze waarde genegeerd. Het clienttoken blijft bestaan buiten licentiesessies.
override_provider_client_token Booleaanse waarde, waar of onwaar Als onwaar is en de licentieaanvraag een clienttoken bevat, gebruikt u het token van de aanvraag, zelfs als er in deze structuur een clienttoken is opgegeven. Indien waar, gebruikt u altijd het token dat is opgegeven in deze structuur.

Uw Widevine-licenties configureren met behulp van .NET-typen

Media Services biedt .NET API's die u kunt gebruiken om uw Widevine-licenties te configureren.

Klassen zoals gedefinieerd in de Media Services .NET SDK

De volgende klassen zijn de definities van deze typen:

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
}

Voorbeeld

In het volgende voorbeeld ziet u hoe u .NET API's gebruikt om een eenvoudige Widevine-licentie te configureren:

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

Aanvullende opmerkingen

  • Widevine is een service van Google Inc. en is onderworpen aan de servicevoorwaarden en het privacybeleid van Google Inc.