セールス: 1-800-867-1380

Media Services SDK for .NET を使用した Media Services への接続

更新日: 2014年10月

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

このトピックの内容は次のとおりです。

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

以下の必要な接続値を Media Services アカウント セットアップ プロセスの最後で取得済みです。それらの値を使用してプログラムから Media Services に接続します。

  • Media Services アカウント名。

  • Media Services アカウント キー。

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

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

noteメモ
CloudMediaContext クラスはスレッド セーフではありません。スレッドごとに、または一連の操作ごとに、新しい CloudMediaContext を作成してください。

CloudMediaContext には 5 つのコンストラクター オーバーロードがあります。MediaServicesCredentials をパラメーターとして受け取るコンストラクターを使用することをお勧めします。詳細については、「アクセス制御サービス トークンの再利用」を参照してください。次の例では、public CloudMediaContext(MediaServicesCredentials credentials) コンストラクターを使用しています。:

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

_context = new CloudMediaContext(_cachedCredentials);

次の一覧では、CloudMediaContext コンストラクターについて説明します。

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

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

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

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

    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 コンストラクターを使用して、アクセス制御サービス トークンを再利用する方法を示します。

Azure Active Directory アクセス制御 (アクセス制御サービスまたは ACS とも呼ばれる) は、Web アプリケーションにアクセスするユーザーを簡単に認証および承認できるようにするクラウド ベースのサービスです。Microsoft Azure のメディア サービス は、ACS トークンを必要とする OAuth プロトコルを通してサービスへのアクセスを制御します。Media Services は承認サーバーから ACS トークンを受け取ります。

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

Media Services SDK Version 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;
    }
    

アカウントが中国北部地域に存在する場合は、次のコンストラクターを使用します。

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

例:

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

接続値 (特に、アカウント名とパスワードなどの機密性の高い値) を保存することを強くお勧めします。また、機密性の高い構成データを暗号化することをお勧めします。Windows 暗号化ファイル システム (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 による資産の取り込み.

関連項目

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2015 Microsoft