エクスポート (0) 印刷
すべて展開

Media Services SDK による Media Services への接続

更新日: 2014年2月

このトピックでは、Media Services SDK for .NET でプログラミングするときに Microsoft Azure のメディア サービス にプログラムから接続する方法について説明します。

このトピックでは以下の項目について説明します。

Media Services への接続

プログラムで Media Services に接続するには、先に、Azure アカウントを設定し、そのアカウントに Media Services を構成し、Media Services SDK for .NET で開発するための Visual Studio プロジェクトを設定しておく必要があります。詳細については、「Media Services SDK for .NET での開発のセットアップ」を参照してください。

Media Services アカウント セットアップ処理の最後で、以下の必要な接続値を入手します。これらを使用してプログラムから Media Services に接続します。

  • Media Services アカウント名。

  • Media Services アカウント キー。

note
これらの値を調べるには、Windows Azure ポータルにアクセスし、Media Service アカウントを選択して、ポータル ウィンドウの下部にある “キーの管理” アイコンをクリックします。各テキスト ボックスの隣にあるアイコンをクリックすると、値がシステム クリップボードにコピーされます。

CloudMediaContext インスタンスの作成

Media Services に対するプログラミングを開始するには、サーバー コンテキストを表す CloudMediaContext インスタンスを作成する必要があります。CloudMediaContext には、ジョブ、資産、ファイル、アクセス ポリシー、ロケーターなど、重要なコレクションへの参照が含まれます。

note
CloudMediaContext クラスはスレッド セーフではありません。スレッドごと、または一連の操作ごとに新しい CloudMediaContext を作成する必要があります。

CloudMediaContext には、5 つのコンストラクター オーバーロードがあります。MediaServicesCredentials をパラメーターとして使用するコンストラクターを使用することをお勧めします。詳細については、「Reusing Access Control Service Tokens」を参照してください。

  • 次のオーバーロードは、CloudMediaContext クラスの新しいインスタンスを、認証に使用する指定された Microsoft Azure のメディア サービス アカウント名およびアカウント キーで初期化します。

    public CloudMediaContext(string accountName, string accountKey)
    
  • 次のオーバーロードは、CloudMediaContext クラスの新しいインスタンスを、指定された Microsoft Azure のメディア サービス 資格情報で初期化します。このオーバーロードは、Media Services Client SDK バージョン 3.0.0.0 で追加されました。

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • 次のオーバーロードは、CloudMediaContext クラスの新しいインスタンスを、指定された Microsoft Azure のメディア サービス エンドポイントおよび Media Services 資格情報で初期化します。このオーバーロードは、Media Services Client SDK バージョン 3.0.0.0 で追加されました。

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • 次のオーバーロードは、CloudMediaContext クラスの新しいインスタンスを、認証に使用する指定された Microsoft Azure のメディア サービス エンドポイント、アカウント名、およびアカウント キーで初期化します。

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • 次のオーバーロードは、所定のパラメーターを使用する CloudMediaContext クラスの新しいインスタンスを初期化します。そのパラメーターとは、認証に使用する Media Services エンドポイント、アカウント名、およびアカウントキーと、認証のスコープと、認証の対象となる アクセス制御サービス エンドポイントです。

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

次の例では、新しい CloudMediaContext インスタンスを作成し、Media Services アカウント名とキー文字列の値を渡します。

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

次のセクションでは、パラメーターに MediaServicesCredentials を使用する CloudMediaContext コンストラクターを使用してアクセス制御サービス トークンを再利用する方法を示します。

アクセス制御サービス トークンの再利用

Windows Azure Active Directory Access Control (アクセス制御サービスまたは ACS とも呼ばれる) は、目的の Web アプリケーションにアクセスするユーザーを認証および承認する簡単な方法を提供するクラウドベースのサービスです。Microsoft Azure のメディア サービス では、ACS トークンを必要とする OAuth プロトコルを通してサービスへのアクセス権を管理します。Media Services は、認証サーバーから ACS トークンを受信します。

Media Services SDK で開発する場合は、SDK コードがトークンを管理するため、トークンの処理を行わないよう選択することもできます。ただし、ACS トークンの管理を完全に SDK に任せると、不要なトークン要求も生じすることになります。トークンを要求する処理は、時間を要し、クライアントとサーバーのリソースが消費されます。また、要求の発生率が高すぎる場合は、ACS サーバーが要求をスロットルで調整します。要求の上限は、1 秒あたり 30 回です。詳細については、「ACS サービスの制限事項」を参照してください。

Media Services SDK バージョン 3.0.0.0 以降では、ACS トークンを再利用できます。パラメーターとして MediaServicesCredentials を使用する CloudMediaContext コンストラクターでは、複数のコンテキスト間で ACS トークンを共有できます。MediaServicesCredentials クラスは、Media Services 資格情報をカプセル化します。ACS トークンを使用でき、その有効期限がわかっている場合は、トークンで新しい MediaServicesCredentials インスタンスを作成し、そのインスタンスを CloudMediaContext のコンストラクターに渡すことができます。トークンの有効期限が切れるたびに Media Services SDK によってトークンが自動的に更新されることに留意してください。以下の例に示すように、ACS トークンを再利用するには 2 つの方法があります。

  • MediaServicesCredentials オブジェクトをメモリ (静的クラス変数など) にキャッシュできます。次に、キャッシュされたオブジェクトを CloudMediaContext コンストラクターに渡します。MediaServicesCredentials オブジェクトに含まれている ACS トークンは、有効期限内であれば再利用可能です。有効期限を過ぎている場合、MediaServicesCredentials コンストラクターに渡された資格情報を使用してトークンが Media Services SDK によって更新されます。

    MediaServicesCredentials オブジェクトは、RefreshToken が呼び出された後に有効なトークンを取得します。CloudMediaContext はコンストラクターで RefreshToken メソッドを呼び出します。トークンの値を外部ストレージに保存する計画の場合は、トークン データを保存する前に TokenExpiration の値が有効かどうかを確認してください。有効でない場合は、キャッシュする前に RefreshToken を呼び出します。

    // 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);
    
  • AccessToken 文字列および TokenExpiration 値をキャッシュすることもできます。その後、これらの値はキャッシュされたトークン データで新しい MediaServicesCredentials オブジェクトを作成するために使用できます。これは複数のプロセスまたはコンピューター間でトークンを安全に共有できるシナリオで特に便利です。

    次のコード スニペットは、この例で定義されていない SaveTokenDataToExternalStorage、GetTokenDataFromExternalStorage、および UpdateTokenDataInExternalStorageIfNeeded メソッドを呼び出します。これらのメソッドを定義して、外部ストレージでトークン データを格納、取得、および更新できます。

     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); 
    
    保存されたトークンの値を使用して 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);
    
    トークンが Media Services SDK によって更新された場合に、トークンのコピーを更新します。

    if(tokenExpiration != context2.Credentials.TokenExpiration) {     UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration); } 
    
  • 複数の Media Services アカウントをお持ちの場合 (負荷分散の目的や地域配布など)、System.Collections.Concurrent.ConcurrentDictionary コレクションを使用して MediaServicesCredentials オブジェクトをキャッシュできます (ConcurrentDictionary コレクションは、複数のスレッドから同時にアクセスできるキー/値のペアのスレッド セーフ コレクションを表します)。その後、GetOrAdd メソッドを使用してキャッシュされた資格情報を取得できます。

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

構成への接続値の格納

接続値、特にアカウント名やパスワードなどの機密性の高い値を構成に格納する方法は強くお勧めします。また、機密性の高い構成データは暗号化することもお勧めします。構成ファイル全体の暗号化には、暗号化ファイル システム (EFS) を使用できます。ファイルで EFS を有効にするには、ファイルを右クリックし、[プロパティ] を選択して、[詳細設定] タブで暗号化を有効にします。または、保護された構成を使用して、構成ファイルの選択した部分を暗号化するためのカスタム ソリューションを作成することもできます。「保護された構成を使用した構成情報の暗号化」を参照してください。

次の App.config ファイルには、必要な接続値が含まれます。 <appSettings> 要素の値は、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> 

構成から接続値を取得するには、ConfigurationManager クラスを使用し、コード内のフィールドに値を代入します。

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

次のトピックに進んでください。 Media Services SDK for .NET を使用して資産をインジェストする.

参照


ビルド日:

2014-05-23

コミュニティの追加

表示:
© 2014 Microsoft