教程:基于 URL 对远程文件进行编码并流式传输视频 - REST

媒体服务徽标 v3


使用 Azure 媒体服务可以将媒体文件编码为可在各种浏览器和设备上播放的格式。 例如,可能需要以 Apple 的 HLS 或 MPEG DASH 格式流式传输内容。 在流式传输之前,应该对高质量的数字媒体文件进行编码。 有关编码指南,请参阅编码概念

本教程介绍如何使用 REST 通过 Azure 媒体服务基于 URL 对文件进行编码并流式传输视频。

播放视频

本教程演示如何:

  • 创建媒体服务帐户
  • 访问媒体服务 API
  • 下载 Postman 文件
  • 配置 Postman
  • 使用 Postman 发送请求
  • 测试流式 URL
  • 清理资源

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

先决条件

  • 创建媒体服务帐户

    请务必记住用于资源组名称和媒体服务帐户名称的值

  • 安装 Postman REST 客户端,以便执行一些 AMS REST 教程中所示的 REST API。

    我们使用的是 Postman,但任何 REST 工具都适用。 其他替代工具包括:带有 REST 插件的 Visual Studio CodeTelerik Fiddler

下载 Postman 文件

克隆包含 Postman 集合和环境文件的 GitHub 存储库。

git clone https://github.com/Azure-Samples/media-services-v3-rest-postman.git

访问 API

有关详细信息,请参阅获取访问媒体服务 API 的凭据

配置 Postman

配置环境

  1. 打开 Postman 应用。

  2. 在屏幕的右侧,选择“管理环境”选项。

    管理环境

  3. 从“管理环境”对话框中,单击“导入”。

  4. 浏览到克隆 https://github.com/Azure-Samples/media-services-v3-rest-postman.git 时下载的 Azure Media Service v3 Environment.postman_environment.json 文件。

  5. Azure Media Service v3 Environment 环境已添加。

    备注

    使用从上面的“访问媒体服务 API”部分获得的值更新访问权限变量。

  6. 双击所选的文件,并输入通过执行访问 API 步骤获得的值。

  7. 关闭对话框。

  8. 从下拉列表中选择“Azure Media Service v3 Environment”环境。

    选择环境

配置集合

  1. 单击“导入”导入该集合文件。

  2. 浏览到克隆 https://github.com/Azure-Samples/media-services-v3-rest-postman.git 时下载的 Media Services v3.postman_collection.json 文件

  3. 选择 Media Services v3.postman_collection.json 文件。

    导入文件

使用 Postman 发送请求

在本部分中,请发送与编码和创建 URL 相关的请求,以便能够流式传输文件。 具体说来,将发送以下请求:

  1. 获取适用于服务主体身份验证的 Azure AD 令牌
  2. 启动流式处理终结点
  3. 创建输出资产
  4. 创建转换
  5. 创建作业
  6. 创建流定位符
  7. 列出流式处理定位符的路径

备注

本教程假定你使用唯一名称创建所有资源。

获取 Azure AD 令牌

  1. 在 Postman 应用的左窗口中,选择“步骤 1: 获取 AAD 身份验证令牌”。

  2. 然后,选择“获取适用于服务主体身份验证的 Azure AD 令牌”。

  3. 按“发送”。

    将会发送以下 POST 操作。

    https://login.partner.microsoftonline.cn/:aadTenantDomain/oauth2/token
    
  4. 响应会返回此令牌并将“AccessToken”环境变量设置为令牌值。 若要查看设置“AccessToken”的代码,请单击“测试”选项卡。

    获取 AAD 令牌

启动流式处理终结点

若要启用流式处理,必须首先启动要从中流式处理视频的流式处理终结点

备注

仅当流式处理终结点处于运行状态时才进行计费。

  1. 在 Postman 应用的左侧窗口中,选择“流式处理和实时”。

  2. 然后,选择“启动 StreamingEndpoint”。

  3. 按“发送”。

    • 发送以下 POST 操作:

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaservices/:accountName/streamingEndpoints/:streamingEndpointName/start?api-version={{api-version}}
      
    • 如果请求成功,则返回 Status: 202 Accepted

      此状态表示已接受请求进行处理;但是,处理尚未完成。 可以根据 Azure-AsyncOperation 响应标头中的值查询操作状态。

      例如,下面的 GET 操作返回操作的状态:

      https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/<resourceGroupName>/providers/Microsoft.Media/mediaservices/<accountName>/streamingendpointoperations/1be71957-4edc-4f3c-a29d-5c2777136a2e?api-version=2018-07-01

      跟踪异步 Azure 操作一文深入说明了如何通过响应中返回的值跟踪异步 Azure 操作的状态。

创建输出资产

输出资产会存储作业编码的结果。

  1. 在 Postman 应用的左侧窗口中,选择“资产”。

  2. 然后选择“创建或更新资产”。

  3. 按“发送”。

    • 将会发送以下 PUT 操作:

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/assets/:assetName?api-version={{api-version}}
      
    • 该操作具有以下正文:

      {
      "properties": {
          "description": "My Asset",
          "alternateId" : "some GUID",
          "storageAccountName": "<replace from environment file>",
          "container": "<supply any valid container name of your choosing>"
       }
      }
      

备注

确保用环境文件中的名称或自己提供的名称替换存储帐户和容器的名称。

完成本文其余部分中描述的步骤后,请确保在请求正文中提供有效的参数。

创建转换

对媒体服务中的内容进行编码或处理时,一种常见的模式是将编码设置设为脚本。 然后,需提交 作业,将该脚本应用于视频。 为每个新视频提交新作业后,可将该脚本应用到库中的所有视频。 媒体服务中的脚本称为 转换。 有关详细信息,请参阅转换和作业。 本教程中的示例定义有关将视频进行编码以将其流式传输到各种 iOS 和 Android 设备的脚本。

创建新实例时,需要指定希望生成的输出内容转换。 所需参数是 TransformOutput 对象。 每个 TransformOutput 包含一个预设 。 预设介绍了视频和/或音频处理操作的分步说明,这些操作将用于生成所需的 TransformOutput 。 本文中的示例使用名为 AdaptiveStreaming 的内置预设。 此预设将输入的视频编码为基于输入的分辨率和比特率自动生成的比特率阶梯(比特率 - 分辨率对),并通过与每个比特率 - 分辨率对相对应的 H.264 视频和 AAC 音频生成 ISO MP4 文件。 有关此预设的信息,请参阅自动生成比特率阶梯

可以使用内置 EncoderNamedPreset 或使用自定义预设。

备注

在创建 转换时,首先应检查是否已存在一个使用 Get 方法的转换。 本教程假定你使用唯一名称创建该转换。

  1. 在 Postman 应用的左侧窗口中,选择“编码和分析”。

  2. 然后选择“创建转换”。

  3. 按“发送”。

    • 将会发送以下 PUT 操作。

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/transforms/:transformName?api-version={{api-version}}
      
    • 该操作具有以下正文:

      {
          "properties": {
              "description": "Standard Transform using an Adaptive Streaming encoding preset from the library of built-in Standard Encoder presets",
              "outputs": [
                  {
                  "onError": "StopProcessingJob",
              "relativePriority": "Normal",
                  "preset": {
                      "@odata.type": "#Microsoft.Media.BuiltInStandardEncoderPreset",
                      "presetName": "AdaptiveStreaming"
                  }
                  }
              ]
          }
      }
      

创建作业

作业是针对媒体服务的实际请求,目的是将创建的 转换 应用到给定的输入视频或音频内容。 作业指定输入视频位置和输出位置等信息。

在此示例中,作业的输入基于 HTTPS URL(“https://nimbuscdn-nimbuspm.streaming.mediaservices.windows.net/2b533311-b215-4409-80af-529c3e853622/”)。

  1. 在 Postman 应用的左侧窗口中,选择“编码和分析”。

  2. 然后选择“创建或更新作业”。

  3. 按“发送”。

    • 将会发送以下 PUT 操作。

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/transforms/:transformName/jobs/:jobName?api-version={{api-version}}
      
    • 该操作具有以下正文:

      {
      "properties": {
          "input": {
          "@odata.type": "#Microsoft.Media.JobInputHttp",
          "baseUri": "https://nimbuscdn-nimbuspm.streaming.mediaservices.windows.net/2b533311-b215-4409-80af-529c3e853622/",
          "files": [
                  "Ignite-short.mp4"
              ]
          },
          "outputs": [
          {
              "@odata.type": "#Microsoft.Media.JobOutputAsset",
              "assetName": "testAsset1"
          }
          ]
      }
      }
      

此作业需要一些时间才能完成,完成时可发出通知。 若要查看作业的进度,建议使用事件网格。 事件网格旨在实现高可用性、一致性能和动态缩放。 使用事件网格,应用可以侦听和响应来自几乎所有 Azure 服务和自定义源的事件。 处理基于 HTTP 的反应事件非常简单,这有助于通过对事件的智能筛选和路由生成高效的解决方案。 请参阅将事件路由到自定义 Web 终结点

作业 通常会经历以下状态:已计划已排队正在处理已完成(最终状态)。 如果作业出错,则显示“错误”状态 。 如果作业正处于取消过程中,则显示“正在取消”,完成时则显示“已取消” 。

作业错误代码

请参阅错误代码

创建流式处理定位符

编码作业完成后,下一步是使输出 资产 中的视频可供客户端播放。 可通过两个步骤完成此操作:首先,创建 StreamingLocator,然后,生成客户端可以使用的流式 URL。

创建流定位符的过程称为发布。 默认情况下,除非配置可选的开始和结束时间,否则调用 API 后,流定位符立即生效,并持续到被删除为止。

创建 StreamingLocator 时,需要指定所需的 StreamingPolicyName。 在此示例中将流式传输明文(或未加密)内容,因此使用预定义的明文流式传输策略“Predefined_ClearStreamingOnly”。

重要

使用自定义的 StreamingPolicy 时,应为媒体服务帐户设计有限的一组此类策略,并在需要同样的加密选项和协议时重新将这些策略用于 StreamingLocators。

媒体服务帐户具有对应于 流式处理策略 条目数的配额。 不应为每个流式处理定位符创建新的流式处理策略。

  1. 在 Postman 应用的左侧窗口中,选择“流式处理策略和定位符”。

  2. 然后选择“创建流式处理定位符(清除)”。

  3. 按“发送”。

    • 将会发送以下 PUT 操作。

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/streamingLocators/:streamingLocatorName?api-version={{api-version}}
      
    • 该操作具有以下正文:

      {
        "properties": {
          "streamingPolicyName": "Predefined_ClearStreamingOnly",
          "assetName": "testAsset1",
          "contentKeys": [],
          "filters": []
       }
      }
      

列出路径和生成流式处理 URL

列出路径

创建流式处理定位符后,即可获取流式处理 URL

  1. 在 Postman 应用的左侧窗口中,选择“流式处理策略”。

  2. 然后,选择“列出路径”。

  3. 按“发送”。

    • 将会发送以下 POST 操作。

      https://management.chinacloudapi.cn/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/streamingLocators/:streamingLocatorName/listPaths?api-version={{api-version}}
      
    • 该操作没有正文:

  4. 记下要用于流式处理的某个路径,以便在下一部分使用。 在这种情况下,返回以下路径:

    "streamingPaths": [
        {
            "streamingProtocol": "Hls",
            "encryptionScheme": "NoEncryption",
            "paths": [
                "/cdb80234-1d94-42a9-b056-0eefa78e5c63/Ignite-short.ism/manifest(format=m3u8-aapl)"
            ]
        },
        {
            "streamingProtocol": "Dash",
            "encryptionScheme": "NoEncryption",
            "paths": [
                "/cdb80234-1d94-42a9-b056-0eefa78e5c63/Ignite-short.ism/manifest(format=mpd-time-csf)"
            ]
        },
        {
            "streamingProtocol": "SmoothStreaming",
            "encryptionScheme": "NoEncryption",
            "paths": [
                "/cdb80234-1d94-42a9-b056-0eefa78e5c63/Ignite-short.ism/manifest"
            ]
        }
    ]
    

生成流式处理 URL

在此部分,请生成 HLS 流式处理 URL。 URL 包含以下值:

  1. 发送数据时采用的协议。 在此示例中为“https”。

    备注

    如果播放器在 Https 站点上进行托管,请确保将 URL 更新为“https”。

  2. StreamingEndpoint 的主机名。 在本例中,该名称为“amsaccount-cne21.streaming.media.chinacloudapi.cn”。

    若要获取主机名,可以使用以下 GET 操作:

    https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaservices/:accountName/streamingEndpoints/default?api-version={{api-version}}
    

    确保设置 resourceGroupNameaccountName 参数以与环境文件相匹配。

  3. 在前面的(列出路径)部分中获得的路径。

因此,生成了以下 HLS URL

https://amsaccount-cne21.streaming.media.chinacloudapi.cn/cdb80234-1d94-42a9-b056-0eefa78e5c63/Ignite-short.ism/manifest(format=m3u8-aapl)

测试流式 URL

备注

确保要从中进行流式传输的 流式处理终结点 正在运行。

本文使用 Azure Media Player 测试流式传输。

  1. 打开 Web 浏览器并导航到 https://aka.ms/azuremediaplayer/
  2. 在“URL:”框中,粘贴生成的 URL。
  3. 按“更新播放器”。

Azure Media Player 可用于测试,但不可在生产环境中使用。

清理媒体服务帐户中的资源

通常情况下,除了打算重复使用的对象,应清理所有内容(通常会重复使用 转换 并保留 流式处理定位符 等)。 如果希望帐户在试验后保持干净状态,则应删除不打算重复使用的资源。

若要删除资源,请在要删除的任意资源下选择“删除...”操作。

清理资源

如果不再需要资源组中的任何一个资源(包括为本教程创建的媒体服务和存储帐户),请删除之前创建的资源组。

执行以下 CLI 命令:

az group delete --name amsResourceGroup

后续步骤

现已介绍如何上传、编码和流式传输视频,请参阅以下文章: