Exporter (0) Imprimer
Développer tout

Connexion à Media Services avec le Kit de développement logiciel (SDK) Media Services pour .NET

Mis à jour: octobre 2014

Cette rubrique décrit comment obtenir une connexion par programme à Microsoft Azure Media Services lorsque vous programmez avec le Kit de développement logiciel (SDK) Media Services pour .NET.

Elle couvre les sujets suivants :

Pour vous connecter à Media Services par programme, vous devez avoir configuré un compte Azure, Media Services sur ce compte, et un projet Visual Studio pour le développement avec le Kit de développement logiciel (SDK) Media Services pour .NET. Pour plus d'informations, consultez Configuration du développement avec le Kit de développement logiciel (SDK) Media Services pour .NET.

À la fin du processus de configuration du compte Media Services, vous avez obtenu les valeurs de connexion nécessaires suivantes. Utilisez-les pour établir les connexions par programme à Media Services.

  • Votre nom de compte Media Services.

  • Votre clé de compte Media Services.

noteRemarque
Pour trouver ces valeurs, accédez au portail Azure, sélectionnez votre compte Media Services et cliquez sur l'icône « GÉRER LES CLÉS » en bas de la fenêtre du portail. Cliquez sur l'icône à côté d'une zone de texte pour copier sa valeur dans le Presse-papiers système.

Pour démarrer la programmation dans Media Services, vous devez créer une instance CloudMediaContext qui représente le contexte serveur. Le CloudMediaContext inclut des références à des collections importantes y compris des tâches, des éléments multimédias, des fichiers, des stratégies d'accès et des localisateurs.

noteRemarque
La classe CloudMediaContext n'est pas de type thread-safe. Vous devez créer un CloudMediaContext par thread ou par ensemble d'opérations.

CloudMediaContext a cinq surcharges de constructeur. Nous vous conseillons d'utiliser des constructeurs qui acceptent MediaServicesCredentials comme paramètre. Pour plus d'informations, consultez Réutilisation des jetons Access Control Service. L'exemple suivant utilise le constructeur public CloudMediaContext(MediaServicesCredentials credentials). :

// _cachedCredentials and _context are class member variables. 
_cachedCredentials = new MediaServicesCredentials(
                _mediaServicesAccountName,
                _mediaServicesAccountKey);

_context = new CloudMediaContext(_cachedCredentials);

La liste suivante décrit les constructeurs CloudMediaContext.

  • La surcharge suivante initialise une nouvelle instance de la classe CloudMediaContext avec le nom de compte et la clé de compte Microsoft Azure Media Services spécifiés pour l'authentification.

    public CloudMediaContext(string accountName, string accountKey)
    
  • La surcharge suivante initialise une nouvelle instance de la classe CloudMediaContext avec les informations d'identification Microsoft Azure Media Services spécifiées. Cette surcharge a été ajoutée dans le Kit de développement logiciel (SDK) du client Media Services version 3.0.0.0.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • La surcharge suivante initialise une nouvelle instance de la classe CloudMediaContext avec le point de terminaison Microsoft Azure Media Services et les informations d'identification Media Services spécifiés. Cette surcharge a été ajoutée dans le Kit de développement logiciel (SDK) du client Media Services version 3.0.0.0.

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • La surcharge suivante initialise une nouvelle instance de la classe CloudMediaContext avec le point de terminaison, le nom de compte et la clé de compte Microsoft Azure Media Services spécifiés pour l'authentification.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • La surcharge suivante initialise une nouvelle instance de la classe CloudMediaContext qui accepte les paramètres suivants : point de terminaison, nom de compte et clé de compte Media Services pour l'authentification, portée de l'autorisation et point de terminaison Access Control Service pour l'authentification.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey, string scope, string acsBaseAddress)
    

L'exemple suivant crée une instance CloudMediaContext et passe les valeurs de chaîne de nom et de clé de compte Media Services.

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

La section suivante montre comment réutiliser les jetons Access Control Service en utilisant les constructeurs CloudMediaContext qui acceptent MediaServicesCredentials comme paramètre.

Azure Active Directory Access Control (également appelé Access Control Service ou ACS) est un service cloud qui fournit un moyen simple d'authentifier les utilisateurs et de les autoriser à accéder à leurs applications web. Microsoft Azure Media Services contrôle l'accès à ses services par le protocole OAuth, qui a besoin d'un jeton ACS. Media Services reçoit les jetons ACS d'un serveur d'autorisation.

Lors du développement avec le Kit de développement logiciel (SDK) Media Services, vous pouvez décider de ne pas gérer les jetons, car le code SDK s'en charge. Cependant, laisser la gestion intégrale des jetons au Kit de développement logiciel (SDK) aboutit à des demandes de jetons inutiles. Demander des jetons prend du temps et consomme les ressources du client et du serveur. Ajoutons à cela que le serveur ACS limite les demandes si le débit est trop élevé. La limite est de 30 demandes par seconde. Pour plus d'informations, consultez la page Limites du service de contrôle d'accès (ACS).

À compter du Kit de développement logiciel (SDK) Media Services version 3.0.0.0, vous pouvez réutiliser les jetons ACS. Les constructeurs CloudMediaContext qui acceptent MediaServicesCredentials comme paramètre autorisent le partage des jetons ACS entre plusieurs contextes. La classe MediaServicesCredentials encapsule les informations d'identification Media Services. Si un jeton ACS est disponible et que son délai d'expiration est connu, vous pouvez créer une instance MediaServicesCredentials avec le jeton et la passer au constructeur de CloudMediaContext. Notez que le Kit de développement logiciel (SDK) Media Services actualise automatiquement les jetons lorsqu'ils expirent. Il existe deux façons de réutiliser les jetons ACS, comme indiqué dans les exemples suivants.

  • Vous pouvez mettre en cache l'objet MediaServicesCredentials en mémoire (par exemple, dans une variable de classe statique). Vous pouvez ensuite passer l'objet mis en cache au constructeur CloudMediaContext. L'objet MediaServicesCredentials contient un jeton ACS qui peut être réutilisé s'il est encore valide. Si le jeton n'est plus valide, il est actualisé par le Kit de développement logiciel (SDK) Media Services avec les informations d'identification données au constructeur MediaServicesCredentials.

    Notez que l'objet MediaServicesCredentials obtient un jeton valide après l'appel de RefreshToken. Le CloudMediaContext appelle la méthode RefreshToken dans le constructeur. Si vous prévoyez d'enregistrer les valeurs de jeton dans un stockage externe, vérifiez la validité de la valeur TokenExpiration avant d'enregistrer les données de jeton. Si elle n'est pas valide, appelez RefreshToken avant la mise en cache.

    // Create and cache the Media Services credentials in a static class variable.
    _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey);
    
    


    // Use the cached credentials to create a new CloudMediaContext object.
    if(_cachedCredentials == null)
    {
        _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey);
    }
    
    CloudMediaContext context = new CloudMediaContext(_cachedCredentials);
    
  • Vous pouvez également mettre en cache la chaîne AccessToken et les valeurs TokenExpiration. Les valeurs peuvent être utilisées ultérieurement pour créer un objet MediaServicesCredentials avec les données de jeton mises en cache. Ceci est particulièrement utile dans les scénarios où le jeton peut être partagé de façon sécurisée entre plusieurs processus ou ordinateurs.

    Les extraits de code ci-dessous appellent les méthodes SaveTokenDataToExternalStorage, GetTokenDataFromExternalStorage et UpdateTokenDataInExternalStorageIfNeeded qui ne sont pas définies dans cet exemple. Vous pouvez définir ces méthodes pour stocker, récupérer et mettre à jour les données de jeton dans un stockage externe.

    
    CloudMediaContext context1 = new CloudMediaContext(_mediaServicesAccountName, _mediaServicesAccountKey);
    
    // Get token values from the context.
    var accessToken = context1.Credentials.AccessToken;
    var tokenExpiration = context1.Credentials.TokenExpiration;
    
    // Save token values for later use. 
    // The SaveTokenDataToExternalStorage method should check 
    // whether the TokenExpiration value is valid before saving the token data. 
    // If it is not valid, call MediaServicesCredentials’s RefreshToken before caching.
    SaveTokenDataToExternalStorage(accessToken, tokenExpiration);
    
    
    Utilisez les valeurs de jeton enregistrées pour créer MediaServicesCredentials.

    var accessToken = "";
    var tokenExpiration = DateTime.UtcNow;
    
    // Retrieve saved token values.
    GetTokenDataFromExternalStorage(out accessToken, out tokenExpiration);
    
    // Create a new MediaServicesCredentials object using saved token values.
    MediaServicesCredentials credentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey)
    {
        AccessToken = accessToken,
        TokenExpiration = tokenExpiration
    };
    
    CloudMediaContext context2 = new CloudMediaContext(credentials);
    
    Mettez à jour la copie du jeton si ce dernier a été mis à jour par le Kit de développement logiciel (SDK) Media Services.

    if(tokenExpiration != context2.Credentials.TokenExpiration)
    {
        UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration);
    }
    
    
  • Si vous avez plusieurs comptes Media Services (par exemple, pour le partage des charges ou la géodistribution), vous pouvez mettre en cache les objets MediaServicesCredentials à l'aide de la collection System.Collections.Concurrent.ConcurrentDictionary (la collection ConcurrentDictionary est une collection de type thread-safe de paires clé/valeur qui peuvent être lues simultanément par plusieurs threads). Vous pouvez ensuite utiliser la méthode GetOrAdd pour obtenir les informations d'identification mises en cache.

    // Declare a static class variable of the ConcurrentDictionary type in which the Media Services credentials will be cached.  
    private static readonly ConcurrentDictionary<string, MediaServicesCredentials> mediaServicesCredentialsCache = 
        new ConcurrentDictionary<string, MediaServicesCredentials>();
    
    // Cache (or get already cached) Media Services credentials. Use these credentials to create a new CloudMediaContext object.
    static public CloudMediaContext CreateMediaServicesContext(string accountName, string accountKey)
    {
        CloudMediaContext cloudMediaContext;
        MediaServicesCredentials mediaServicesCredentials;
    
        mediaServicesCredentials = mediaServicesCredentialsCache.GetOrAdd(
            accountName,
            valueFactory => new MediaServicesCredentials(accountName, accountKey));
    
        cloudMediaContext = new CloudMediaContext(mediaServicesCredentials);
    
        return cloudMediaContext;
    }
    

Si votre compte est situé dans la région « Chine du Nord », utilisez le constructeur suivant :

public CloudMediaContext(Uri apiServer, string accountName, string accountKey, string scope, string acsBaseAddress)

Par exemple :

_context = new CloudMediaContext(
    new Uri("https://wamsbjbclus001rest-hs.chinacloudapp.cn/API/"),
    _mediaServicesAccountName,
    _mediaServicesAccountKey,
    "urn:WindowsAzureMediaServices",
    "https://wamsprodglobal001acs.accesscontrol.chinacloudapi.cn");

Nous vous recommandons fortement de stocker les valeurs de connexion dans la configuration, notamment les valeurs sensibles comme votre nom de compte et votre mot de passe. Nous vous recommandons également de chiffrer les données de configuration sensibles. Vous pouvez chiffrer tout le fichier de configuration en utilisant le système de fichiers Windows Encrypting File System (EFS). Pour activer EFS sur un fichier, cliquez avec le bouton droit sur le fichier, sélectionnez Propriétés, puis activez le chiffrement sous l'onglet des paramètres Avancé. Vous pouvez également créer une solution personnalisée pour chiffrer les parties sélectionnées d'un fichier de configuration en utilisant la configuration protégée. Consultez la page Chiffrement des informations de configuration à l'aide de la configuration protégée.

Le fichier App.config suivant contient les valeurs de connexion nécessaires. Les valeurs dans l'élément <appSettings> sont les valeurs nécessaires obtenues par le processus de configuration du compte Media Services.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="MediaServicesAccountName" value="Add-Media-Services-Account-Name" />
    <add key="MediaServicesAccountKey" value="Add-Media-Services-Account-Key" />
  </appSettings>
</configuration>

Pour récupérer les valeurs de connexion de la configuration, vous pouvez utiliser la classe ConfigurationManager, puis affecter les valeurs aux champs de votre code :

private static readonly string _accountName = ConfigurationManager.AppSettings["MediaServicesAccountName"];
private static readonly string _accountKey = ConfigurationManager.AppSettings["MediaServicesAccountKey"];

Vous êtes prêt à passer à la rubrique suivante : Réception d'éléments multimédias à l'aide du Kit de développement logiciel (SDK) Media Services pour .NET.

Voir aussi

Afficher:
© 2014 Microsoft