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

Media Services SDK for .NET을 사용하여 미디어 서비스에 연결

업데이트 날짜: 2014년 10월

이 항목에서는 미디어 서비스 SDK for .NET을 사용하여 프로그래밍할 때 프로그래밍 방식으로 Microsoft Azure 미디어 서비스에 연결하는 방법을 설정합니다.

이 항목에서는 다음 내용을 다룹니다.

프로그래밍 방식으로 미디어 서비스에 연결하려면 이전에 Azure 계정을 설정하고, 해당 계정에 대해 미디어 서비스를 구성한 다음 미디어 서비스 SDK for .NET로 개발하기 위해 Visual Studio 프로젝트를 설정한 상태여야 합니다. 자세한 내용은 Media Services SDK for .NET에서 개발을 위한 설정를 참조하십시오.

미디어 서비스 계정 설정 프로세스가 끝나면 다음과 같은 필수 연결 값이 제공됩니다. 이러한 값을 사용하여 프로그래밍 방식으로 미디어 서비스에 연결합니다.

  • 미디어 서비스 계정 이름

  • 미디어 서비스 계정 키

note참고
이러한 값을 찾으려면 Azure 포털로 이동하여 미디어 서비스 계정을 선택한 후 포털 창 하단에 있는 "키 관리" 아이콘을 클릭합니다. 텍스트 상자 옆에 있는 아이콘을 클릭하면 값이 시스템 클립보드로 복사됩니다.

미디어 서비스에 대한 프로그래밍을 시작하려면 서버 컨텍스트를 나타내는 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 클래스의 새 인스턴스를 초기화합니다. 이 오버로드는 미디어 서비스 클라이언트 SDK 버전 3.0.0.0에 추가되었습니다.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • 다음 오버로드는 지정된 Microsoft Azure 미디어 서비스 끝점과 미디어 서비스 자격 증명을 사용하여 CloudMediaContext 클래스의 새 인스턴스를 초기화합니다. 이 오버로드는 미디어 서비스 클라이언트 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 인스턴스를 만들고 미디어 서비스 계정 이름과 키 문자열 값을 전달합니다.

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

다음 섹션에서는 MediaServicesCredentials를 매개 변수로 사용하는 CloudMediaContext 생성자를 사용하여 액세스 제어 서비스 토큰을 다시 사용하는 방법을 보여 줍니다.

ACS(액세스 제어 서비스)라고도 하는 Azure Active Directory 액세스 제어는 사용자가 웹 응용 프로그램에 액세스할 수 있도록 인증 및 권한 부여를 위한 간편한 방법을 제공하는 클라우드 기반 서비스입니다. Microsoft Azure 미디어 서비스는 ACS 토큰이 필요한 OAuth 프로토콜을 통해 서비스 액세스를 제어합니다. 미디어 서비스는 권한 부여 서버에서 ACS 토큰을 받습니다.

미디어 서비스 SDK를 사용하여 개발할 때는 토큰을 사용하지 않도록 선택할 수 있습니다. SDK 코드에서 토큰을 자동으로 관리하기 때문입니다. 그러나 SDK가 ACS 토큰을 완전히 관리하도록 하면 불필요한 토큰 요청이 생성될 수 있습니다. 토큰을 요청하려면 시간이 걸리고 클라이언트 및 서버 리소스가 사용됩니다. 또한 요청 속도가 너무 빠르면 ACS 서버는 요청을 제한합니다. 초당 요청은 30개로 제한됩니다. 자세한 내용은 ACS 서비스 제한을 참조하세요.

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

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

    RefreshToken을 호출하고 나면 MediaServicesCredentials 개체가 유효한 토큰을 가져옵니다. 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);
    
    미디어 서비스 SDK가 토큰을 업데이트한 경우 토큰 복사본을 업데이트합니다.

    if(tokenExpiration != context2.Credentials.TokenExpiration)
    {
        UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration);
    }
    
    
  • 부하 분산용 또는 지리적 분산용과 같이 미디어 서비스 계정이 여러 개인 경우에는 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> 요소의 값이 미디어 서비스 계정 설정 프로세스에서 가져온 필수 값입니다.

<?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을 사용하여 자산 수집으로 진행할 수 있습니다.

참고 항목

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft