Exportieren (0) Drucken
Alle erweitern

Herstellen einer Verbindung mit Media Services mit dem Media Services SDK für .NET

Letzte Aktualisierung: Oktober 2014

In diesem Thema wird beschrieben, wie eine programmgesteuerte Verbindung mit Microsoft Azure Media Services abgerufen wird, wenn Sie mit dem Media Services SDK für .NET programmieren.

In diesem Thema werden die folgenden Themen behandelt.

Damit Sie programmgesteuert eine Verbindung mit Media Services herstellen können, müssen Sie zuvor ein Azure-Konto eingerichtet, Media Services für dieses Konto konfiguriert und ein Visual Studio-Projekt für die Entwicklung mit dem Media Services SDK für .NET eingerichtet haben. Weitere Informationen finden Sie unter Setup für die Entwicklung mit dem Media Services SDK für .NET.

Am Ende des Einrichtungsvorgangs für das Media Services-Konto haben Sie die folgenden erforderlichen Verbindungswerte abgerufen. Verwenden Sie diese, um programmgesteuerte Verbindungen mit Media Services herzustellen.

  • Ihren Media Services-Kontonamen.

  • Ihren Media Services-Kontoschlüssel.

noteHinweis
Wenn Sie diese Werte ermitteln möchten, navigieren Sie zum Azure-Portal, wählen Sie Ihr Media Services-Konto aus, und klicken Sie dann unten im Portalfenster auf das Symbol "SCHLÜSSEL VERWALTEN". Klicken Sie auf die Symbole neben den Textfeldern, um den jeweiligen Wert in die Zwischenablage zu kopieren.

Wenn Sie mit der Programmierung für Media Services beginnen möchten, müssen Sie eine CloudMediaContext-Instanz erstellen, die den Serverkontext darstellt. Der CloudMediaContext umfasst Verweise auf wichtige Auflistungen, z. B. Aufträge, Medienobjekte, Dateien, Zugriffsrichtlinien und Locator.

noteHinweis
Die Klasse CloudMediaContext ist nicht threadsicher. Sie sollten für jeden Thread oder für jeden Satz von Vorgängen einen neuen CloudMediaContext erstellen.

CloudMediaContext hat fünf Konstruktorüberladungen. Es wird empfohlen, Konstruktoren zu verwenden, die MediaServicesCredentials als Parameter annehmen. Weitere Informationen finden Sie unter Wiederverwenden von Token des Zugriffssteuerungsdiensts. Im folgenden Beispiel wird der Konstruktor public CloudMediaContext(MediaServicesCredentials credentials) verwendet. :

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

In der folgenden Liste werden die CloudMediaContext-Konstruktoren beschrieben.

  • Die folgende Überladung initialisiert eine neue Instanz der Klasse CloudMediaContext mit dem angegebenen Microsoft Azure Media Services-Kontonamen und -Kontoschlüssel für die Authentifizierung.

    public CloudMediaContext(string accountName, string accountKey)
    
  • Die folgende Überladung initialisiert eine neue Instanz der Klasse CloudMediaContext mit den angegebenen Microsoft Azure Media Services-Anmeldeinformationen. Diese Überladung wurde im Media Services Client SDK, Version 3.0.0.0, hinzugefügt.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • Die folgende Überladung initialisiert eine neue Instanz der Klasse CloudMediaContext mit dem angegebenen Microsoft Azure Media Services-Endpunkt und den Media Services-Anmeldeinformationen. Diese Überladung wurde im Media Services Client SDK, Version 3.0.0.0, hinzugefügt.

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • Die folgende Überladung initialisiert eine neue Instanz der Klasse CloudMediaContext mit dem angegebenen Microsoft Azure Media Services-Endpunkt, -Kontonamen und -Kontoschlüssel für die Authentifizierung.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • Die folgende Überladung initialisiert eine neue Instanz der Klasse CloudMediaContext, an die die folgenden Parameter übergeben werden: der Media Services-Endpunkt, -Kontoname und -Kontoschlüssel für die Authentifizierung, der Autorisierungsbereich und der Endpunkt des Zugriffssteuerungsdiensts, mit dem die Authentifizierung erfolgt.

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

Das folgende Beispiel erstellt eine neue CloudMediaContext-Instanz und übergibt die Zeichenfolgenwerte des Media Services-Kontonamens und -Schlüssels.

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

Im folgenden Abschnitt wird gezeigt, wie die Token des Zugriffssteuerungsdiensts mithilfe der CloudMediaContext-Konstruktoren wiederverwendet werden, die MediaServicesCredentials als Parameter annehmen.

Die Azure Active Directory-Zugriffssteuerung (auch als Zugriffssteuerungsdienst oder ACS bezeichnet) ist ein cloudbasierter Dienst, der eine einfache Methode zum Authentifizieren und Autorisieren von Benutzern für den Zugriff auf ihre Webanwendungen bereitstellt. Microsoft Azure Media Services steuert den Zugriff auf die Dienste über das OAuth-Protokoll, das ein ACS-Token erfordert. Media Services empfängt die ACS-Token von einem Autorisierungsserver.

Wenn Sie mit dem Media Services SDK entwickeln, können Sie wahlweise die Token nicht berücksichtigen, weil der SDK-Code diese für Sie verwaltet. Wenn Sie dem SDK die vollständige Verwaltung der ACS-Token übergeben, führt dies zu nicht erforderlichen Tokenanforderungen. Das Anfordern von Token kostet Zeit und beansprucht Client- und Serverressourcen. Außerdem drosselt der ACS-Server die Anforderungen, wenn die Rate zu hoch ist. Der Grenzwert sind 30 Anforderungen pro Sekunde. Weitere Details finden Sie unter Einschränkungen des ACS-Diensts.

Ab dem Media Services SDK, Version 3.0.0.0, können Sie die ACS-Token wiederverwenden. Die CloudMediaContext-Konstruktoren, die MediaServicesCredentials als Parameter annehmen, ermöglichen das Freigeben der ACS-Token für mehrere Kontexte. Die Klasse MediaServicesCredentials kapselt die Media Services-Anmeldeinformationen Wenn ein ACS-Token verfügbar und seine Ablaufzeit bekannt ist, können Sie eine neue MediaServicesCredentials-Instanz mit dem Token erstellen und diese an den Konstruktor von CloudMediaContext übergeben. Beachten Sie, dass das Media Services SDK Token automatisch aktualisiert, wenn diese ablaufen. Die Beispiele unten zeigen, wie ACS-Token auf zwei verschiedene Arten wiederverwendet werden können.

  • Sie können das MediaServicesCredentials-Objekt im Arbeitsspeicher zwischenspeichern (z. B. in einer Variablen einer statischen Klasse). Übergeben Sie dieses zwischengespeicherte Objekt dann an den Konstruktor CloudMediaContext. Das "MediaServicesCredentials"-Objekt enthält ein ACS-Token, das wiederverwendet werden kann, wenn es noch gültig ist. Wenn das Token nicht gültig ist, wird es vom Media Services SDK mithilfe der an den Konstruktor MediaServicesCredentials übergebenen Anmeldeinformationen aktualisiert.

    Beachten Sie, dass das MediaServicesCredentials-Objekt nach dem Aufruf von RefreshToken ein gültiges Token abruft. CloudMediaContext ruft die Methode RefreshToken im Konstruktor auf. Wenn Sie planen, die Tokenwerte in einem externen Speicher zu speichern, stellen Sie sicher, dass der TokenExpiration-Wert gültig ist, bevor Sie die Tokendaten speichern. Wenn er nicht gültig ist, rufen Sie RefreshToken vor dem Zwischenspeichern auf.

    // 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);
    
  • Sie können auch die AccessToken-Zeichenfolge und die TokenExpiration-Werte zwischenspeichern. Die Werte können zu einem späteren Zeitpunkt zum Erstellen eines neuen MediaServicesCredentials-Objekts mit den zwischengespeicherten Tokendaten verwendet werden. Dies ist besonders in Szenarien sinnvoll, in denen das Token auf sichere Weise von mehreren Prozessen oder Computern gemeinsam verwendet werden kann.

    Die folgenden Codeausschnitte rufen die Methoden SaveTokenDataToExternalStorage, GetTokenDataFromExternalStorage und UpdateTokenDataInExternalStorageIfNeeded auf, die in diesem Beispiel nicht definiert sind. Sie können diese Methoden so definieren, dass sie Tokendaten in einem externen Speicher speichern bzw. aktualisieren oder aus einem solchen Speicher abrufen.

    
    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);
    
    
    Verwenden Sie die gespeicherten Tokenwerte, um MediaServicesCredentials zu erstellen.

    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);
    
    Aktualisieren Sie die Tokenkopie, wenn das Token vom Media Services SDK aktualisiert wurde.

    if(tokenExpiration != context2.Credentials.TokenExpiration)
    {
        UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration);
    }
    
    
  • Wenn Sie mehrere Media Services-Konten besitzen (z. B. für Nutzlastverteilungszwecke oder Geo-Verteilung), können Sie MediaServicesCredentials-Objekte mithilfe der System.Collections.Concurrent.ConcurrentDictionary-Auflistung zwischenspeichern (die ConcurrentDictionary-Auflistung stellt eine threadsichere Auflistung von Schlüssel/Wert-Paaren dar, auf die von mehreren Threads gleichzeitig zugegriffen werden kann). Sie können dann die Methode GetOrAdd verwenden, um die zwischengespeicherten Anmeldeinformationen abzurufen.

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

Wenn sich Ihr Konto in der Region Nordchina befindet, verwenden Sie den folgenden Konstruktor:

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

Beispiel:

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

Es wird dringend empfohlen, Verbindungswerte in der Konfiguration zu speichern. Dies gilt insbesondere für sensible Werte, etwa Ihren Kontonamen und das Kennwort. Außerdem wird empfohlen, sensible Konfigurationsdaten zu verschlüsseln. Sie können die gesamte Konfigurationsdatei mithilfe des verschlüsselnden Windows-Dateisystems (Encrypting File System, EFS) verschlüsseln. Klicken Sie zum Aktivieren von EFS für eine Datei mit der rechten Maustaste auf die Datei, wählen Sie Eigenschaften aus, und aktivieren Sie dann die Verschlüsselung unter den Einstellungen auf der Registerkarte Erweitert. Sie können auch eine benutzerdefinierte Lösung für das Verschlüsseln ausgewählter Teile einer Konfigurationsdatei erstellen, indem Sie eine geschützte Konfiguration verwenden. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe einer geschützten Konfiguration.

Die folgende "App.config"-Datei enthält die erforderlichen Verbindungswerte. Die Werte im Element <appSettings> sind die erforderlichen Werte, die Sie während des Einrichtungsvorgangs für das Media Services-Konto abgerufen haben.

<?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>

Zum Abrufen von Verbindungswerten aus der Konfiguration können Sie die Klasse ConfigurationManager verwenden und die Werte dann Feldern in Ihrem Code zuweisen:

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

Sie können nun mit dem nächsten Thema fortfahren: Erfassen von Medienobjekten mit dem Media Services SDK für .NET.

Siehe auch

Anzeigen:
© 2015 Microsoft