Configurare i criteri di distribuzione degli asset con .NET SDKConfigure asset delivery policies with .NET SDK

OverviewOverview

Se si prevede di distribuire dinamicamente asset crittografati in modo dinamico, uno dei passaggi del flusso di lavoro di distribuzione dei contenuti in Servizi multimediali consiste nella configurazione dei criteri di distribuzione degli asset.If you plan to delivery encrypted assets, one of the steps in the Media Services content delivery workflow is configuring delivery policies for assets. Questi criteri indicano a Servizi multimediali la modalità di distribuzione di un asset, ovvero il protocollo di streaming da usare per la creazione dinamica dei pacchetti (ad esempio, MPEG DASH, HLS, Smooth Streaming o tutti), se l'asset deve essere crittografato dinamicamente e l'eventuale modalità di crittografia (envelope o common).The asset delivery policy tells Media Services how you want for your asset to be delivered: into which streaming protocol should your asset be dynamically packaged (for example, MPEG DASH, HLS, Smooth Streaming, or all), whether or not you want to dynamically encrypt your asset and how (envelope or common encryption).

Questo argomento illustra perché e come creare i criteri di distribuzione degli asset.This topic discusses why and how to create and configure asset delivery policies.

Nota

Quando l'account AMS viene creato, un endpoint di streaming predefinito viene aggiunto all'account con stato Arrestato.When your AMS account is created a default streaming endpoint is added to your account in the Stopped state. Per avviare lo streaming del contenuto e sfruttare i vantaggi della creazione dinamica dei pacchetti e della crittografia dinamica, l'endpoint di streaming da cui si vuole trasmettere il contenuto deve essere nello stato In esecuzione.To start streaming your content and take advantage of dynamic packaging and dynamic encryption, the streaming endpoint from which you want to stream content has to be in the Running state.

Per usare la creazione dinamica dei pacchetti e la crittografia dinamica, l'asset deve contenere un set di file MP4 o Smooth Streaming a velocità in bit adattiva.Also, to be able to use dynamic packaging and dynamic encryption your asset must contain a set of adaptive bitrate MP4s or adaptive bitrate Smooth Streaming files.

È possibile applicare criteri differenti allo stesso asset.You could apply different policies to the same asset. È ad esempio possibile applicare la crittografia PlayReady a Smooth Streaming e la crittografia envelope AES (Advanced Encryption Standard) a MPEG DASH e HLS.For example, you could apply PlayReady encryption to Smooth Streaming and AES Envelope encryption to MPEG DASH and HLS. Gli eventuali protocolli non definiti nei criteri di distribuzione (ad esempio quando si aggiunge un singolo criterio che specifica soltanto HLS come protocollo) verranno esclusi dallo streaming.Any protocols that are not defined in a delivery policy (for example, you add a single policy that only specifies HLS as the protocol) will be blocked from streaming. Questo comportamento non si verifica quando non è presente alcun criterio di distribuzione degli asset.The exception to this is if you have no asset delivery policy defined at all. In tal caso, sono consentiti tutti i protocolli in chiaro.Then, all protocols will be allowed in the clear.

Se si desidera distribuire un asset con memoria crittografata, è necessario configurare i criteri di distribuzione appropriati.If you want to deliver a storage encrypted asset, you must configure the asset’s delivery policy. Prima di trasmettere in streaming l'asset in base ai criteri specificati, il server rimuove la crittografia di archiviazione.Before your asset can be streamed, the streaming server removes the storage encryption and streams your content using the specified delivery policy. Ad esempio, per distribuire l'asset crittografato con una chiave di crittografia envelope AES (Advanced Encryption Standard), impostare il tipo di criteri su DynamicEnvelopeEncryption.For example, to deliver your asset encrypted with Advanced Encryption Standard (AES) envelope encryption key, set the policy type to DynamicEnvelopeEncryption. Per rimuovere la crittografia di archiviazione e trasmettere l'asset in chiaro, impostare il tipo di criteri su NoDynamicEncryption.To remove storage encryption and stream the asset in the clear, set the policy type to NoDynamicEncryption. I seguenti esempi mostrano come configurare questi tipi di criteri.Examples that show how to configure these policy types follow.

A seconda della modalità di configurazione dei criteri di distribuzione degli asset, sarà possibile creare dinamicamente i pacchetti, applicare la crittografia dinamica e trasmettere i protocolli di streaming seguenti: Smooth Streaming, HLS e MPEG-DASH.Depending on how you configure the asset delivery policy you would be able to dynamically package, dynamically encrypt, and stream the following streaming protocols: Smooth Streaming, HLS, and MPEG DASH streams.

L'elenco seguente mostra i formati usati per i flussi Smooth, HLS e DASH.The following list shows the formats that you use to stream Smooth, HLS, and DASH.

Smooth Streaming:Smooth Streaming:

{nome endpoint di streaming-nome account servizi multimediali}.streaming.mediaservices.windows.net/{ID localizzatore}/{nome file}.ism/Manifest{streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest

HLS:HLS:

{nome endpoint di streaming-nome account servizi multimediali}.streaming.mediaservices.windows.net/{ID localizzatore}/{nome file}.ism/Manifest(format=m3u8-aapl){streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest(format=m3u8-aapl)

MPEG DASHMPEG DASH

{nome endpoint di streaming-nome account servizi multimediali}.streaming.mediaservices.windows.net/{ID localizzatore}/{nome file}.ism/Manifest(format=mpd-time-csf){streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest(format=mpd-time-csf)

ConsiderazioniConsiderations

  • Non è possbile eliminare un AssetDeliveryPolicy con un asset se esiste un localizzatore OnDemand (streaming) per quell’asset.You cannot delete an AssetDeliveryPolicy associated with an asset while an OnDemand (streaming) locator exists for that asset. Si suggerisce di rimuovere il criterio dall'asset prima di eliminare il criterio.The recommendation is to remove the policy from the asset before deleting the policy.
  • Non è possibile creare un localizzatore di streaming in un asset crittografato per l’archiviazione se non è impostato alcun criterio di distribuzione degli asset.A streaming locator cannot be created on a storage encrypted asset when no asset delivery policy is set. Se l'asset non è crittografato per l'archiviazione, il sistema consentirà di creare un localizzatore ed eseguire in streaming l'asset in chiaro senza un criterio di distribuzione degli asset.If the Asset isn’t storage encrypted, the system will let you create a locator and stream the asset in the clear without an asset delivery policy.
  • È possibile avere più criteri di distribuzione degli asset associati a un singolo asset, ma è possibile specificare solo un modo per gestire un determinato AssetDeliveryProtocol.You can have multiple asset delivery policies associated with a single asset but you can only specify one way to handle a given AssetDeliveryProtocol. Ciò significa che se si tenta di collegare due criteri di distribuzione che specificano il protocollo AssetDeliveryProtocol.SmoothStreaming, verrà generato un errore perché il sistema non sa quale applicare quando un client effettua una richiesta di Smooth Streaming.Meaning if you try to link two delivery policies that specify the AssetDeliveryProtocol.SmoothStreaming protocol that will result in an error because the system does not know which one you want it to apply when a client makes a Smooth Streaming request.
  • Se si dispone di un asset con un localizzatore di streaming esistente, non è possibile collegare un nuovo criterio all'asset (è possibile scollegare un criterio esistente dall'asset, o aggiornare un criterio di distribuzione associato all'asset).If you have an asset with an existing streaming locator, you cannot link a new policy to the asset (you can either unlink an existing policy from the asset, or update a delivery policy associated with the asset). È innanzitutto necessario rimuovere il localizzatore di streaming, modificare i criteri e quindi creare nuovamente il localizzatore di streaming.You first have to remove the streaming locator, adjust the policies, and then re-create the streaming locator. È possibile utilizzare lo stesso ID quando si ricrea il localizzatore di streaming, ma è necessario assicurarsi che questo non causi problemi per i client poiché il contenuto può essere memorizzato nella cache per l'origine o una rete CDN a valle.You can use the same locatorId when you recreate the streaming locator but you should ensure that won’t cause issues for clients since content can be cached by the origin or a downstream CDN.

Criteri di distribuzione degli asset ClearClear asset delivery policy

Il metodo ConfigureClearAssetDeliveryPolicy seguente specifica di non applicare la crittografia dinamica e di distribuire il flusso con uno dei protocolli seguenti: MPEG DASH, HLS e Smooth Streaming.The following ConfigureClearAssetDeliveryPolicy method specifies to not apply dynamic encryption and to deliver the stream in any of the following protocols: MPEG DASH, HLS, and Smooth Streaming protocols. È possibile applicare questo criterio alle risorse crittografate di archiviazione.You might want to apply this policy to your storage encrypted assets.

Per informazioni sui valori che è possibile specificare quando si crea un oggetto AssetDeliveryPolicy, vedere la sezione Tipi usati durante la definizione di AssetDeliveryPolicy .For information on what values you can specify when creating an AssetDeliveryPolicy, see the Types used when defining AssetDeliveryPolicy section.

static public void ConfigureClearAssetDeliveryPolicy(IAsset asset)
{
    IAssetDeliveryPolicy policy =
    _context.AssetDeliveryPolicies.Create("Clear Policy",
    AssetDeliveryPolicyType.NoDynamicEncryption,
    AssetDeliveryProtocol.HLS | AssetDeliveryProtocol.SmoothStreaming | AssetDeliveryProtocol.Dash, null);

    asset.DeliveryPolicies.Add(policy);
}

Criteri di distribuzione degli asset DynamicCommonEncryptionDynamicCommonEncryption asset delivery policy

Il metodo CreateAssetDeliveryPolicy seguente crea l'oggetto AssetDeliveryPolicy configurato in modo da applicare la crittografia dinamica di tipo common (DynamicCommonEncryption) a un protocollo Smooth Streaming (gli altri protocolli vengono esclusi dallo streaming).The following CreateAssetDeliveryPolicy method creates the AssetDeliveryPolicy that is configured to apply dynamic common encryption (DynamicCommonEncryption) to a smooth streaming protocol (other protocols will be blocked from streaming). Il metodo accetta due parametri: Asset, cioè l'asset a cui applicare i criteri di distribuzione, e IContentKey, cioè la chiave simmetrica del tipo CommonEncryption. Per altre informazioni, vedere l'articolo relativo alla creazione di una chiave simmetrica.The method takes two parameters : Asset (the asset to which you want to apply the delivery policy) and IContentKey (the content key of the CommonEncryption type, for more information, see: Creating a content key).

Per informazioni sui valori che è possibile specificare quando si crea un oggetto AssetDeliveryPolicy, vedere la sezione Tipi usati durante la definizione di AssetDeliveryPolicy .For information on what values you can specify when creating an AssetDeliveryPolicy, see the Types used when defining AssetDeliveryPolicy section.

static public void CreateAssetDeliveryPolicy(IAsset asset, IContentKey key)
{
    Uri acquisitionUrl = key.GetKeyDeliveryUrl(ContentKeyDeliveryType.PlayReadyLicense);

    Dictionary<AssetDeliveryPolicyConfigurationKey, string> assetDeliveryPolicyConfiguration =
            new Dictionary<AssetDeliveryPolicyConfigurationKey, string>
        {
            {AssetDeliveryPolicyConfigurationKey.PlayReadyLicenseAcquisitionUrl, acquisitionUrl.ToString()},
        };

        var assetDeliveryPolicy = _context.AssetDeliveryPolicies.Create(
                "AssetDeliveryPolicy",
            AssetDeliveryPolicyType.DynamicCommonEncryption,
            AssetDeliveryProtocol.SmoothStreaming,
            assetDeliveryPolicyConfiguration);

        // Add AssetDelivery Policy to the asset
        asset.DeliveryPolicies.Add(assetDeliveryPolicy);

        Console.WriteLine();
        Console.WriteLine("Adding Asset Delivery Policy: " +
            assetDeliveryPolicy.AssetDeliveryPolicyType);
 }

Servizi multimediali di Azure consente inoltre di aggiungere la crittografia Widevine.Azure Media Services also enables you to add Widevine encryption. Nell'esempio seguente viene illustrato sia PlayReady che Widevine da aggiungere al criterio di recapito di asset.The following example demonstrates both PlayReady and Widevine being added to the asset delivery policy.

static public void CreateAssetDeliveryPolicy(IAsset asset, IContentKey key)
{
    // Get the PlayReady license service URL.
    Uri acquisitionUrl = key.GetKeyDeliveryUrl(ContentKeyDeliveryType.PlayReadyLicense);


    // GetKeyDeliveryUrl for Widevine attaches the KID to the URL.
    // For example: https://amsaccount1.keydelivery.mediaservices.windows.net/Widevine/?KID=268a6dcb-18c8-4648-8c95-f46429e4927c.  
    // The WidevineBaseLicenseAcquisitionUrl (used below) also tells Dynamaic Encryption 
    // to append /? KID =< keyId > to the end of the url when creating the manifest.
    // As a result Widevine license acquisition URL will have KID appended twice, 
    // so we need to remove the KID that in the URL when we call GetKeyDeliveryUrl.

    Uri widevineUrl = key.GetKeyDeliveryUrl(ContentKeyDeliveryType.Widevine);
    UriBuilder uriBuilder = new UriBuilder(widevineUrl);
    uriBuilder.Query = String.Empty;
    widevineUrl = uriBuilder.Uri;

    Dictionary<AssetDeliveryPolicyConfigurationKey, string> assetDeliveryPolicyConfiguration =
        new Dictionary<AssetDeliveryPolicyConfigurationKey, string>
    {
        {AssetDeliveryPolicyConfigurationKey.PlayReadyLicenseAcquisitionUrl, acquisitionUrl.ToString()},
        {AssetDeliveryPolicyConfigurationKey.WidevineLicenseAcquisitionUrl, widevineUrl.ToString()}

    };

    var assetDeliveryPolicy = _context.AssetDeliveryPolicies.Create(
            "AssetDeliveryPolicy",
        AssetDeliveryPolicyType.DynamicCommonEncryption,
        AssetDeliveryProtocol.Dash,
        assetDeliveryPolicyConfiguration);


    // Add AssetDelivery Policy to the asset
    asset.DeliveryPolicies.Add(assetDeliveryPolicy);

}

Nota

Durante la crittografia con Widevine, si sarebbe in grado di recapitare utilizzando DASH.When encrypting with Widevine, you would only be able to deliver using DASH. Assicurarsi di specificare il protocollo di recapito asset DASH.Make sure to specify DASH in the asset delivery protocol.

Criteri di distribuzione degli asset DynamicEnvelopeEncryptionDynamicEnvelopeEncryption asset delivery policy

Il metodo CreateAssetDeliveryPolicy seguente crea l'oggetto AssetDeliveryPolicy configurato in modo da applicare la crittografia envelope dinamica (DynamicEnvelopeEncryption) ai protocolli Smooth Streaming, HLS e DASH (se si decide di non specificare alcuni protocolli, questi saranno esclusi dallo streaming).The following CreateAssetDeliveryPolicy method creates the AssetDeliveryPolicy that is configured to apply dynamic envelope encryption (DynamicEnvelopeEncryption) to Smooth Streaming, HLS, and DASH protocols (if you decide to not specify some protocols, they will be blocked from streaming). Il metodo accetta due parametri: Asset, cioè l'asset a cui applicare i criteri di distribuzione, e IContentKey, cioè la chiave simmetrica del tipo EnvelopeEncryption. Per altre informazioni, vedere l'articolo relativo alla creazione di una chiave simmetrica.The method takes two parameters : Asset (the asset to which you want to apply the delivery policy) and IContentKey (the content key of the EnvelopeEncryption type, for more information, see: Creating a content key).

Per informazioni sui valori che è possibile specificare quando si crea un oggetto AssetDeliveryPolicy, vedere la sezione Tipi usati durante la definizione di AssetDeliveryPolicy .For information on what values you can specify when creating an AssetDeliveryPolicy, see the Types used when defining AssetDeliveryPolicy section.

private static void CreateAssetDeliveryPolicy(IAsset asset, IContentKey key)
{

    //  Get the Key Delivery Base Url by removing the Query parameter.  The Dynamic Encryption service will
    //  automatically add the correct key identifier to the url when it generates the Envelope encrypted content
    //  manifest.  Omitting the IV will also cause the Dynamice Encryption service to generate a deterministic
    //  IV for the content automatically.  By using the EnvelopeBaseKeyAcquisitionUrl and omitting the IV, this
    //  allows the AssetDelivery policy to be reused by more than one asset.
    //
    Uri keyAcquisitionUri = key.GetKeyDeliveryUrl(ContentKeyDeliveryType.BaselineHttp);
    UriBuilder uriBuilder = new UriBuilder(keyAcquisitionUri);
    uriBuilder.Query = String.Empty;
    keyAcquisitionUri = uriBuilder.Uri;

    // The following policy configuration specifies: 
    //   key url that will have KID=<Guid> appended to the envelope and
    //   the Initialization Vector (IV) to use for the envelope encryption.
    Dictionary<AssetDeliveryPolicyConfigurationKey, string> assetDeliveryPolicyConfiguration =
        new Dictionary<AssetDeliveryPolicyConfigurationKey, string> 
    {
        {AssetDeliveryPolicyConfigurationKey.EnvelopeBaseKeyAcquisitionUrl, keyAcquisitionUri.ToString()},
    };

    IAssetDeliveryPolicy assetDeliveryPolicy =
        _context.AssetDeliveryPolicies.Create(
                    "AssetDeliveryPolicy",
                    AssetDeliveryPolicyType.DynamicEnvelopeEncryption,
                    AssetDeliveryProtocol.SmoothStreaming | AssetDeliveryProtocol.HLS | AssetDeliveryProtocol.Dash,
                    assetDeliveryPolicyConfiguration);

    // Add AssetDelivery Policy to the asset
    asset.DeliveryPolicies.Add(assetDeliveryPolicy);

    Console.WriteLine();
    Console.WriteLine("Adding Asset Delivery Policy: " + assetDeliveryPolicy.AssetDeliveryPolicyType);
}

Types used when defining AssetDeliveryPolicy

AssetDeliveryProtocolAssetDeliveryProtocol

L'enumerazione seguente descrive i valori che è possibile impostare per il protocollo di recapito di risorse.The following enum describes values you can set for the asset delivery protocol.

[Flags]
public enum AssetDeliveryProtocol
{
    /// <summary>
    /// No protocols.
    /// </summary>
    None = 0x0,

    /// <summary>
    /// Smooth streaming protocol.
    /// </summary>
    SmoothStreaming = 0x1,

    /// <summary>
    /// MPEG Dynamic Adaptive Streaming over HTTP (DASH)
    /// </summary>
    Dash = 0x2,

    /// <summary>
    /// Apple HTTP Live Streaming protocol.
    /// </summary>
    HLS = 0x4,

    ProgressiveDownload = 0x10, 

    /// <summary>
    /// Include all protocols.
    /// </summary>
    All = 0xFFFF
}

AssetDeliveryPolicyTypeAssetDeliveryPolicyType

L'enumerazione seguente descrive i valori che è possibile impostare per il tipo di criterio di recapito.The following enum describes values you can set for the asset delivery policy type.

public enum AssetDeliveryPolicyType
{
    /// <summary>
    /// Delivery Policy Type not set.  An invalid value.
    /// </summary>
    None,

    /// <summary>
    /// The Asset should not be delivered via this AssetDeliveryProtocol. 
    /// </summary>
    Blocked, 

    /// <summary>
    /// Do not apply dynamic encryption to the asset.
    /// </summary>
    /// 
    NoDynamicEncryption,  

    /// <summary>
    /// Apply Dynamic Envelope encryption.
    /// </summary>
    DynamicEnvelopeEncryption,

    /// <summary>
    /// Apply Dynamic Common encryption.
    /// </summary>
    DynamicCommonEncryption
    }

ContentKeyDeliveryTypeContentKeyDeliveryType

L'enumerazione seguente descrive i valori che è possibile usare per configurare il metodo di recapito della chiave simmetrica al client.The following enum describes values you can use to configure the delivery method of the content key to the client.

public enum ContentKeyDeliveryType
{
    /// <summary>
    /// None.
    ///
    </summary>
    None = 0,

    /// <summary>
    /// Use PlayReady License acquistion protocol
    ///
    </summary>
    PlayReadyLicense = 1,

    /// <summary>
    /// Use MPEG Baseline HTTP key protocol.
    ///
    </summary>
    BaselineHttp = 2,

    /// <summary>
    /// Use Widevine License acquistion protocol
    ///
    </summary>
    Widevine = 3

}

AssetDeliveryPolicyConfigurationKeyAssetDeliveryPolicyConfigurationKey

L'enumerazione seguente descrive i valori che è possibile impostare per configurare le chiavi usate per ottenere una configurazione specifica per un criterio di recapito di risorse.The following enum describes values you can set to configure keys used to get specific configuration for an asset delivery policy.

public enum AssetDeliveryPolicyConfigurationKey
{
    /// <summary>
    /// No policies.
    /// </summary>
    None,

    /// <summary>
    /// Exact Envelope key URL.
    /// </summary>
    EnvelopeKeyAcquisitionUrl,

    /// <summary>
    /// Base key url that will have KID=<Guid> appended for Envelope.
    /// </summary>
    EnvelopeBaseKeyAcquisitionUrl,

    /// <summary>
    /// The initialization vector to use for envelope encryption in Base64 format.
    /// </summary>
    EnvelopeEncryptionIVAsBase64,

    /// <summary>
    /// The PlayReady License Acquisition Url to use for common encryption.
    /// </summary>
    PlayReadyLicenseAcquisitionUrl,

    /// <summary>
    /// The PlayReady Custom Attributes to add to the PlayReady Content Header
    /// </summary>
    PlayReadyCustomAttributes,

    /// <summary>
    /// The initialization vector to use for envelope encryption.
    /// </summary>
    EnvelopeEncryptionIV,

    /// <summary>
    /// Widevine DRM acquisition url
    /// </summary>
    WidevineLicenseAcquisitionUrl
}

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: