내보내기(0) 인쇄
모두 확장

Media Services SDK를 통해 Media Services에 연결

업데이트 날짜: 2014년 2월

이 항목에서는 .NET용 미디어 서비스 SDK를 사용하여 프로그램을 작성하는 경우 프로그래밍 방식으로 Microsoft Azure 미디어 서비스에 연결하는 방법을 설명합니다.

이 항목에서는 다음 내용을 설명합니다.

Media Services에 연결

프로그래밍 방식으로 미디어 서비스에 연결하려면 먼저 Azure 계정이 설정되어 있고, 이 계정에 미디어 서비스가 구성되어 있으며, .NET용 미디어 서비스 SDK로 개발할 Visual Studio 프로젝트가 설정되어 있어야 합니다. 자세한 내용은 .NET용 Media Services SDK 개발을 위한 설정을 참조하십시오.

미디어 서비스 계정 설정 과정이 끝날 때 다음과 같은 필수 연결 값을 얻을 수 있습니다. 미디어 서비스에 대한 프로그래밍 방식의 연결에 이러한 값을 사용합니다.

  • 미디어 서비스 계정 이름

  • 미디어 서비스 계정 키

note참고
이러한 값을 찾아 보려면 Windows Azure 포털로 이동하여 Media Service 계정을 선택하고 포털 창의 하단에 있는 ?키 관리?아이콘을 클릭합니다. 각 텍스트 상자 옆의 아이콘을 클릭하면 해당 값이 시스템 클립보드로 복사됩니다.

CloudMediaContext 인스턴스 만들기

미디어 서비스에 대해 프로그래밍을 시작하려면 서버 컨텍스트를 나타내는 CloudMediaContext 인스턴스를 만들어야 합니다. 작업, 자산, 파일, 액세스 정책 및 로케이터를 비롯하여 중요 컬렉션에 대한 참조도 CloudMediaContext에 포함됩니다.

note참고
CloudMediaContext 클래스는 스레드로부터 안전하지 않습니다. 스레드마다 또는 작업 집합마다 새 CloudMediaContext를 만들어야 합니다.

CloudMediaContext에는 5개의 생성자 오버로드가 있습니다. MediaServicesCredentials를 매개 변수로 사용하는 생성자를 사용하는 것이 좋습니다. 자세한 내용은 Reusing Access Control Service Tokens을 참조하십시오.

  • 다음 오버로드는 인증할 지정된 Microsoft Azure 미디어 서비스 계정 이름 및 계정 키로 CloudMediaContext 클래스의 새 인스턴스를 초기화합니다.

    public CloudMediaContext(string accountName, string accountKey)
    
  • 다음 오버로드는 지정된 Microsoft Azure 미디어 서비스 자격 증명을 사용하는 CloudMediaContext 클래스의 새 인스턴스를 초기화합니다. 이 오버로드는 Media Services Client SDK 버전 3.0.0.0에 추가되었습니다.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • 다음 오버로드는 지정된 Microsoft Azure 미디어 서비스 끝점 및 미디어 서비스 자격 증명을 사용하는 CloudMediaContext 클래스의 새 인스턴스를 초기화합니다. 이 오버로드는 Media Services Client SDK 버전 3.0.0.0에 추가되었습니다.

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • 다음 오버로드는 인증할 지정된 Microsoft Azure 미디어 서비스 끝점, 계정 이름 및 계정 키로 CloudMediaContext 클래스의 새 인스턴스를 초기화합니다.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • 다음 오버로드는 CloudMediaContext 클래스의 새 인스턴스를 초기화하여, 이 클래스는 인증할 미디어 서비스 끝점, 계정 이름 및 계정 키, 권한 부여 범위 및 인증할 액세스 제어 서비스 끝점 매개 변수를 사용합니다.

    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 액세스 제어(액세스 제어 서비스 또는 ACS라고도 함)는 웹 응용 프로그램에 액세스할 수 있도록 사용자를 인증하고 사용자에게 권한을 부여하는 간편한 방법을 제공하는 클라우드 기반 서비스입니다. Microsoft Azure 미디어 서비스는 ACS 토큰이 필요한 OAuth 프로토콜을 통해 해당 서비스에 대한 액세스를 제어합니다. 미디어 서비스는 권한 부여 서버에서 ACS 토큰을 받습니다.

미디어 서비스 SDK를 개발할 경우 SDK 코드 관리자가 토큰을 관리하므로 사용자가 토큰을 처리하지 않도록 선택할 수 있습니다. 하지만 SDK가 ACS 토큰을 전체적으로 관리하도록 하면 불필요한 토큰 요청이 발생할 수 있습니다. 토큰 요청에는 시간이 걸리며 클라이언트 및 서버 리소스가 사용됩니다. 또한 비율이 너무 높은 경우 ACS 서버가 요청을 제한합니다. 제한은 초당 30개 요청이며 자세한 내용은 ACS 서비스 제한을 참조하십시오.

Media Services SDK 버전 3.0.0.0부터는 ACS 토큰을 다시 사용할 수 있습니다. MediaServicesCredentials를 매개 변수로 사용하는 CloudMediaContext 생성자를 사용하면 여러 컨텍스트 간에 ACS 토큰을 공유할 수 있습니다. MediaServicesCredentials 클래스는 미디어 서비스 자격 증명을 캡슐화합니다. ACS 토큰을 사용할 수 있으며 해당 만료 시간을 알고 있는 경우 이 토큰으로 새 MediaServicesCredentials 인스턴스를 만들어 CloudMediaContext 생성자에게 전달할 수 있습니다. 미디어 서비스 SDK는 토큰이 만료될 때마다 토큰을 자동으로 새로 고칩니다. 아래 예에서와 같이 두 가지 방법으로 ACS 토큰을 다시 사용할 수 있습니다.

  • MediaServicesCredentials 개체를 메모리(예: 정적 클래스 변수)에 캐시할 수 있습니다. 그런 다음 캐시된 개체를 CloudMediaContext 생성자에 전달합니다. MediaServicesCredentials 개체에는 유효한 경우 다시 사용할 수 있는 ACS 토큰이 포함되어 있습니다. 토큰이 유효하지 않은 경우 미디어 서비스 SDK는 MediaServicesCredentials 생성자에 제공된 자격 증명을 사용하여 이를 새로 고칩니다.

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

구성에 연결 값 저장

계정 이름 및 암호와 같이 특히 중요한 연결 값은 구성에 저장하는 것이 좋습니다. 또한 중요한 구성 데이터는 암호화하도록 권장됩니다. Windows EFS(파일 시스템 암호화)를 사용하면 전체 구성 파일을 암호화할 수 있습니다. 파일에 EFS를 사용하도록 설정하려면 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 고급 설정 탭에서 암호화를 사용하도록 설정합니다. 또는 보호된 구성을 사용하여 구성 파일에서 선택된 부분만 암호화하는 사용자 지정 솔루션을 만들 수도 있습니다. 보호된 구성을 사용하여 구성 정보 암호화를 참조하십시오.

다음의 App.config 파일에는 필수 연결 값이 포함되어 있습니다. <appSettings> 요소의 값은 미디어 서비스 계정 설정 과정에서 얻은 필수 값입니다.

<?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"]; 

이제 다음의 항목으로 진행할 수 있습니다. .NET용 Media Services SDK를 사용하여 자산 수집.

참고 항목


빌드 날짜:

2014-05-23

커뮤니티 추가 항목

표시:
© 2014 Microsoft