销售电话: 1-800-867-1380

使用 Media Services SDK 连接到 Media Services

更新时间: 2014年2月

注:本页面内容可能不完全适用中国大陆地区运营的 Windows Azure服务。如要了解不同地区 Windows Azure 服务的差异, 请参考本网站.

本主题介绍如何在使用用于 .NET 的 媒体服务 SDK 进行编程时获取与 Microsoft Azure Media Services 的编程连接。

本主题将介绍:

连接到 Media Services

若要以编程方式连接到 媒体服务,你必须在以前设置了一个 Azure 帐户,并在该帐户上配置了 媒体服务,然后设置一个 Visual Studio 项目,以便通过用于 .NET 的 媒体服务 SDK 进行开发。有关详细信息,请参阅在用于 .NET 的 Media Services SDK 上进行开发的设置

在 媒体服务 帐户设置过程结束时,你获得以下必需的连接值。请使用这些值以编程方式连接到 媒体服务。

  • 你的 媒体服务 帐户名。

  • 你的 媒体服务 帐户密钥。

note注意
若要查找这些值,请转到 Windows Azure Portal(Windows Azure 门户),选择你的 Media Service 帐户,然后单击该门户窗口底部的“管理密钥”图标。单击每个文本框旁边的图标将值复制到系统剪贴板中。

创建 CloudMediaContext 实例

若要开始针对 媒体服务 编程,你需要创建一个代表服务器上下文的 CloudMediaContext 实例。CloudMediaContext 包括对各种重要集合的引用,这些集合包括作业、资产、文件、访问策略和定位符。

note注意
CloudMediaContext 类不是线程安全的。每个线程或每组操作均应创建一个新 CloudMediaContext

CloudMediaContext 具有五个构造函数重载。建议使用以 MediaServicesCredentials 为参数的构造函数。有关详细信息,请参阅Reusing Access Control Service Tokens

  • 以下重载将初始化 CloudMediaContext 类的一个新实例,并提供指定的 Microsoft Azure Media Services 帐户名和帐户密钥用来验证身份。

    public CloudMediaContext(string accountName, string accountKey)
    
  • 以下重载将初始化 CloudMediaContext 类的一个新实例,并提供指定的 Microsoft Azure Media Services 凭据。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 Media Services 终结点、用来验证身份的帐户名和帐户密钥。

    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)是一套基于云的服务,可轻松对用户进行身份验证和授权以使用户获得访问其 Web 应用程序的权限。Microsoft Azure Media Services 通过需要 ACS 令牌的 OAuth 协议来控制对其服务的访问。媒体服务 从授权服务器接收 ACS 令牌。

使用 媒体服务 SDK 进行开发时,可选择不处理令牌,而是由 SDK 代码为你进行管理。不过,将 ACS 令牌完全交由 SDK 管理会导致不必要的令牌请求。请求令牌将耗用一定的时间并消耗客户端和服务器资源。此外,如果速度过快,ACS 服务器还会限制请求。上限为每秒钟 30 条请求,请参阅 ACS Service Limitations(ACS 服务限制)了解更多详细信息。

自 Media Services SDK 版本 3.0.0.0 起,可以重复使用 ACS 令牌。以 MediaServicesCredentials 作为参数的 CloudMediaContext 构造函数可实现在多个上下文之间共享 ACS 令牌。MediaServicesCredentials 类中封装有 媒体服务 凭据。如果 ACS 令牌可用且其过期时间已知,则可以使用该令牌创建一个新的 MediaServicesCredentials 实例并将其传递给 CloudMediaContext 的构造函数。注意,媒体服务 SDK 将在每次令牌过期时自动刷新令牌。有两种方法可重复使用 ACS 令牌,如以下示例中所示。

  • 你可以在内存中(例如,在静态类变量中)缓存 MediaServicesCredentials 对象。然后,将缓存的对象传递给 CloudMediaContext 构造函数。MediaServicesCredentials 对象包含一个 ACS 令牌,如果该令牌仍然有效,则可重复使用。如果该令牌无效,则会使用提供给 MediaServicesCredentials 构造函数的凭据通过 媒体服务 SDK 刷新该令牌。

    请注意,在调用 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);
    
    在令牌已由 Media Services SDK 更新的情况下,更新令牌副本。

    if(tokenExpiration != context2.Credentials.TokenExpiration) {     UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration); } 
    
  • 如果你具有多个 Media Services 帐户(例如,用于负载共享目的或地域分布,则可以使用 System.Collections.Concurrent.ConcurrentDictionary 集合(ConcurrentDictionary 集合表示可由多个线程同时访问的密钥/值对的线程安全集合)缓存 MediaServicesCredentials 对象。然后可以使用 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,请右键单击该文件,选择“属性”,然后在“高级”设置选项卡中启用加密。此外,你也可以使用受保护的配置来创建自定义解决方案,以便加密配置文件的所选部分。请参阅 Encrypting Configuration Information Using Protected Configuration(使用受保护的配置来加密配置信息)。

以下 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
本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈

社区附加资源

显示:
© 2014 Microsoft