使用 Azure 媒体服务执行实时流式处理以创建多比特率流

概述

在 Azure 媒体服务 (AMS) 中,频道表示用于处理实时传送视频流内容的管道。 通道 采用以下两种方式之一接收实时输入流:

  • 本地实时编码器(采用以下格式之一:RTP (MPEG-TS)、RTMP 或平滑流式处理(分片 MP4))将单比特率流发送至能够使用媒体服务执行实时编码的频道。 然后,频道将对传入的单比特率流执行实时编码,使之转换为多比特率(自适应)视频流。 收到请求时,媒体服务会将该流传送给客户。
  • 本地实时编码器将多比特率 RTMP 或平滑流式处理(分片 MP4)发送到无法通过 AMS 进行实时编码的频道。 引入流会通过 “通道”,但不会进行任何进一步处理。 这种方法称为 直通。 可以使用以下输出多比特率平滑流式处理的实时编码器:MediaExcel、Ateme、Imagine Communications、Envivio、Cisco、Elemental。 以下实时编码器输出 RTMP:Adobe Flash Media Live Encoder (FMLE)、Telestream Wirecast、Haivision、Teradek 和 Tricaster 编码器。 实时编码器也可将单比特率流发送到并未启用实时编码的通道,但不建议这样做。 收到请求时,媒体服务会将该流传送给客户。

    Note

    实时传送视频流时,使用直通方法是最经济的。

从媒体服务2.10 发行版开始,创建通道时,可以指定希望通道接收输入流的方式,以及是否希望通道对流执行实时编码。 可以使用两个选项:

  • - 如果计划使用输出多比特率流(直通流)的本地实时编码器,请指定此值。 在这种情况下,传入流将传递到输出,而不会进行任何编码。 这是 2.10 发行版以前的通道行为。 有关使用此类型频道的详细信息,请参阅使用创建多比特率流的本地编码器执行实时传送视频流
  • 标准 - 如果打算使用媒体服务将单比特率实时流编码为多比特率流,请选择此值。 请注意,实时编码会影响计费,应记住,将实时编码通道保持为“正在运行”状态会产生费用。 建议在实时流式处理事件完成之后立即停止正在运行的通道,以避免产生额外的小时费用。

Note

本主题讨论为执行实时编码(标准编码类型)启用的频道的属性。 若要了解如何使用无法执行实时编码的频道,请参阅使用创建多比特率流的本地编码器执行实时传送视频流

请务必仔细阅读 注意事项 部分。

计费影响

一旦通过 API 将实时编码通道的状态转换为“正在运行”,就会开始计费。 也可以在 Azure 门户或 Azure 媒体服务资源管理器工具 (http://aka.ms/amse) 中查看状态。

下表显示了通道状态如何映射到 API 和 Azure 门户中的计费状态。 请注意,API 与门户 UX 之间的状态略有不同。 一旦通过 API 将频道置于“正在运行”状态,或者在 Azure 门户中将其设置为“就绪”或“正在流式处理”状态,就会开始计费。 若要阻止通道进一步计费,必须通过 API 或 Azure 门户停止通道。 使用完实时编码通道后,需要亲自停止通道。 不停止编码通道会导致持续计费。

通道状态及其如何映射到计费模式

通道的当前状态。 可能的值包括:

  • 已停止。 这是通道在创建后的初始状态(除非在门户中选择了自动启动)。此状态下不会发生计费。 此状态下可以更新通道属性,但不允许进行流式传输。
  • 正在启动。 通道正在启动。 此状态下不会发生计费。 此状态下不允许进行更新或流式传输。 如果发生错误,通道会返回到“已停止”状态。
  • 正在运行。 通道能够处理实时流。 现在会计收使用费。 必须停止通道以防止进一步计费。
  • 正在停止。 通道正在停止。 此暂时性状态下不会发生计费。 此状态下不允许进行更新或流式传输。
  • 正在删除。 正在删除通道。 此暂时性状态下不会发生计费。 此状态下不允许进行更新或流式传输。

下表显示通道状态如何映射到计费模式。

通道状态 门户 UI 指示器 是否计费?
正在启动 正在启动 否(暂时状态)
正在运行 准备就绪(没有正在运行的节目)

流式处理(至少有一个正在运行的节目)
正在停止 正在停止 否(暂时状态)
已停止 已停止

自动关闭未使用的通道

从 2016 年 1 月 25 日开始,媒体服务推出了一项更新,对于长时间以未使用状态运行的通道,它会自动停止该通道(已启用实时编码)。 这适用于没有活动节目且长时间未收到输入贡献源的通道。

未使用期限的阈值通常为 12 个小时,但随时会变化。

实时编码工作流

下图表示了实时流式处理工作流,其中频道通过以下协议之一接收单比特率流:RTMP、平滑流式处理或 RTP (MPEG-TS);然后,将该流编码为多比特率流。

实时工作流

常见的实时流处理方案

以下是创建常见的实时流应用程序时涉及的常规步骤。

Note

目前,实时事件的最大建议持续时间为 8 小时。 请注意,实时编码会影响计费,应记住,将实时编码通道保持为“正在运行”状态会产生按小时计算的费用。 建议在实时流式处理事件完成之后立即停止正在运行的通道,以避免产生额外的小时费用。

  1. 将视频摄像机连接到计算机。 启动并配置可通过以下协议之一输出单比特率流的本地实时编码器:RTMP、平滑流式处理或 RTP (MPEG-TS)。

    此步骤也可以在创建频道后执行。

  2. 创建并启动通道。
  3. 检索通道引入 URL。
    实时编码器使用引入 URL 将流发送到频道。
  4. 检索频道预览 URL。
    使用此 URL 来验证通道是否正常接收实时流。
  5. 创建节目。
    使用 Azure 门户时,创建节目的同时还会创建资产。
    使用 .NET SDK 或 REST 时,需要创建一个资源并指定在创建节目时要使用该资源。
  6. 发布与节目关联的资源。

    Note

    创建 AMS 帐户后,会将一个处于“已停止”状态的默认流式处理终结点添加到帐户。 要从中流式传输内容的流式处理终结点必须处于“正在运行”状态。

  7. 准备好开始流式传输和存档后,启动节目。

  8. (可选)可以向实时编码器发信号,以启动广告。 将广告插入到输出流中。
  9. 在要停止对事件进行流式传输和存档时,停止节目。
  10. 删除节目(并选择性地删除资产)。

Note

千万不要忘记停止实时编码通道。 请注意,实时编码会影响每小时计费,应记住,将实时编码通道保持为“正在运行”状态会产生费用。 建议在实时流式处理事件完成之后立即停止正在运行的通道,以避免产生额外的小时费用。

频道输入(引入)配置

引入流式传输协议

如果“编码器类型”设为“标准”,则有效选项为:

  • RTP (MPEG-TS):RTP 上的 MPEG-2 传输流。
  • 单比特率 RTMP
  • 单比特率分片 MP4(平滑流式处理)

RTP (MPEG-TS) - RTP 上的 MPEG-2 传输流。

典型用例:

专业广播者通常使用供应商提供的高端本地实时编码器(如 Elemental Technologies、Ericsson、Ateme、Imagine 或 Envivio)来发送流。 通常与 IT 部门和专用网络配合使用。

注意事项:

  • 强烈建议使用单个节目传输流 (SPTS) 输入。
  • 使用 MPEG-2 TS over RTP 最多可以输入 8 个音频流。
  • 视频流应具有小于 15 Mbps 的平均比特率
  • 音频流的聚合平均比特率应小于 1 Mbps
  • 以下是支持的编解码器:
    • MPEG-2/H.262 Video
      • Main Profile (4:2:0)
      • High Profile (4:2:0, 4:2:2)
      • 422 Profile (4:2:0, 4:2:2)
    • MPEG-4 AVC/H.264 Video
      • Baseline、Main、High Profile(8 位 4:2:0)
      • High 10 Profile(10 位 4:2:0)
      • High 422 Profile(10 位 4:2:2)
    • MPEG-2 AAC-LC Audio
      • Mono、Stereo、Surround (5.1, 7.1)
      • MPEG-2 样式 ADTS 打包
    • Dolby Digital (AC-3) Audio
      • Mono、Stereo、Surround (5.1, 7.1)
    • MPEG Audio(层 II 和层 III)
      • Mono、Stereo
  • 推荐的广播编码器包括:

    • Imagine Communications Selenio ENC 1
    • Imagine Communications Selenio ENC 2
    • Elemental Live

单比特率 RTMP

注意事项:

  • 传入流不能包含多码率视频
  • 视频流应具有小于 15 Mbps 的平均比特率
  • 音频流应具有小于 1 Mbps 的平均比特率
  • 以下是支持的编解码器:
  • MPEG-4 AVC/H.264 Video
  • Baseline、Main、High Profile(8 位 4:2:0)
  • High 10 Profile(10 位 4:2:0)
  • High 422 Profile(10 位 4:2:2)
  • MPEG-2 AAC-LC Audio
  • Mono、Stereo、Surround (5.1, 7.1)
  • 44.1 kHz 采样率
  • MPEG-2 样式 ADTS 打包
  • 推荐的编码器包括:
  • Telestream Wirecast
  • Flash 媒体实时编码器

单比特率分片 MP4(平滑流式处理)

典型用例:

使用供应商提供的本地实时编码器(如 Elemental Technologies、Ericsson、Ateme、Envivio)通过开放的 Internet 将输入流发送到附近的 Azure 数据中心。

注意事项:

这同样适用于单比特率 RTMP

其他注意事项

  • 通道或其关联的节目正在运行时,无法更改输入协议。 如果需要不同的协议,应当针对每个输入协议创建单独的通道。
  • 传入视频流的最大分辨率为 1920 x 1080,如果隔行扫描,速率最大为 60 个字段/秒,如果渐进式下载,则速度为 30 帧/秒。

摄取 URL(终结点)

频道提供用户在实时编码器中指定的输入终结点(引入 URL),因此编码器可以将流推送到用户的频道。

创建通道后,可以获得引入 URL。 若要获取这些 URL,通道不一定要处于“正在运行” 状态。 准备好开始将数据推送到通道时,通道必须处于“正在运行”状态。 通道开始引入数据后,可通过预览 URL 来预览流。

可以选择通过 SSL 连接引入分片 MP4(平滑流式处理)实时流。 要通过 SSL 进行引入,请确保将引入 URL 更新为 HTTPS。 请注意,AMS 目前不支持对自定义域使用 SSL。

允许的 IP 地址

可以定义允许向此通道发布视频的 IP 地址。 允许的 IP 地址可以指定为单个 IP 地址(例如“10.0.0.1”)、使用一个 IP 地址和 CIDR 子网掩码的 IP 范围(例如“10.0.0.1/22”),或使用一个 IP 地址和点分十进制子网掩码的 IP 范围(例如'10.0.0.1(255.255.252.0)').

如果未指定 IP 地址并且没有规则定义,则不会允许任何 IP 地址。 若要允许任何 IP 地址,请创建规则并设置 0.0.0.0/0。

通道预览

预览 URL

通道还提供了一个预览终结点(预览 URL),可使用它在进一步处理和传递流之前预览流并对其进行验证。

可以在创建频道时获取预览 URL。 若要获取该 URL,通道不一定要处于“正在运行” 状态。

通道开始摄取数据后,可以预览流。

Note

当前,不管指定了哪种输入类型,都只能以分片 MP4(平滑流式处理)格式来传送预览流。 可以使用 http://smf.cloudapp.net/healthmonitor 播放器来测试平滑流。 还可以使用 Azure 门户中承载的播放器查看流。

允许的 IP 地址

可以定义允许连接到预览终结点的 IP 地址。 如果未指定 IP 地址,则允许任何 IP 地址。 允许的 IP 地址可以指定为单个 IP 地址(例如“10.0.0.1”)、使用一个 IP 地址和 CIDR 子网掩码的 IP 范围(例如“10.0.0.1/22”),或使用一个 IP 地址和点分十进制子网掩码的 IP 范围(例如‘10.0.0.1(255.255.252.0)’).

实时编码设置

本部分介绍当频道的“编码类型”设为“标准”时,如何调整频道内的实时编码器的设置。

Note

在 Azure 中输入多个语言轨迹和执行实时编码时,多语言输入仅支持 RTP。 使用 MPEG-2 TS over RTP 最多可以定义 8 个音频流。 当前不支持使用 RTMP 或平滑流引入多个音频轨迹。 使用本地实时编码执行实时编码时,不存在这种限制,因为发送到 AMS 的任何数据都会通过频道,而不做进一步的处理。

Ad 标记源

可以指定 Ad 标记信号的源。 默认值是 Api,它指示频道内的实时编码器应侦听异步 Ad 标记 API。

另一个有效选项是 Scte35(仅当引入流式处理协议设为 RTP (MPEG-TS) 时允许)。 当指定了 Scte35 时,实时编码器将分析输入 RTP (MPEG-TS) 流中的 SCTE-35 信号。

CEA 708 隐藏字幕

可选标志,它指示实时编码器忽略传入视频中嵌入的任何 CEA 708 字幕数据。 当该标志设为 false(默认值)时,编码器将检测 CEA 708 数据并将该数据重新插入到输出视频流中。

视频流

可选。 描述输入视频流。 如果未指定此字段,则使用默认值。 仅当输入流协议设为 RTP (MPEG-TS) 时,才允许使用此设置。

索引

从零开始的索引,它指定应由通道内的实时编码器处理的输入视频流。 仅当引入流协议是 RTP (MPEG-TS) 时,此设置才适用。

默认值为 0。 建议在单个节目传输流 (SPTS) 中发送。 如果输入流包含多个节目,实时编码器将分析输入中的节目映射表 (PMT),标识流类型名称为 MPEG-2 Video 或 H.264 的输入并以 PMT 中指定的顺序安排这些输入。 然后,会使用从零开始的索引选取该安排中的第 n 个条目。

音频流

可选。 描述输入音频流。 如果未指定此字段,则应用指定的默认值。 仅当输入流协议设为 RTP (MPEG-TS) 时,才允许使用此设置。

索引

建议在单个节目传输流 (SPTS) 中发送。 如果输入流包含多个节目,频道中的实时编码器将分析输入中的节目映射表 (PMT),标识流类型名称为 MPEG-2 AAC ADTS、AC-3 System-A、AC-3 System-B、MPEG-2 Private PES、MPEG-1 Audio 或 MPEG-2 Audio 的输入并以 PMT 中指定的顺序安排这些输入。 然后,会使用从零开始的索引选取该安排中的第 n 个条目。

语言

音频流的语言标识符符合 ISO 639-2 标准,如 ENG。 如果不存在,则默认为 UND(未定义)。

如果通道的输入为 MPEG-2 TS over RTP,则最多可以指定 8 个音频流集。 但是,不能有两个具有相同索引值的条目。

系统预设

指定此通道内的实时编码器要使用的预设。 目前,唯一允许的值是 Default720p(默认值)。

Default720p 会将视频编码为以下 7 层。

输出视频流

比特率 宽度 高度 MaxFPS 配置文件 输出流名称
3500 1280 720 30 Video_1280x720_3500kbps
2200 960 540 30 主要 Video_960x540_2200kbps
1350 704 396 30 主要 Video_704x396_1350kbps
850 512 288 30 主要 Video_512x288_850kbps
550 384 216 30 主要 Video_384x216_550kbps
350 340 192 30 基线 Video_340x192_350kbps
200 340 192 30 基线 Video_340x192_200kbps

输出音频流

音频以 64 kbps 的速率编码为立体声 AAC-LC,采样率为 44.1 kHz。

指示广告

通道启用实时编码后,管道中会有一个正在处理视频的组件,可对其进行操作。 可以向通道发出信号,以将静态图像和/或广告插入到传出自适应比特率流中。 盖板是在某些情况下(例如,在商业广告期间)可用于覆盖输入实时源的静止图像。 广告信号是嵌入到传出流中的时间同步信号,用于指示视频播放器执行特殊操作(例如,在适当时间切换到广告)。 有关用于此目的的 SCTE-35 信号机制的概述,请参阅此 博客 。 下面是可以在实时事件中实现的典型方案。

  1. 事件开始前,让观看者获得事件前图像。
  2. 事件结束后,让观看者获得事件后图像。
  3. 如果在事件期间出现问题(例如,在体育场中出现电源故障),则让观看者收到错误事件图像。
  4. 在商业广告期间发送广告时间图像以隐藏实时事件源。

以下是指示广告时可以设置的属性。

持续时间

商业广告的持续时间(以秒为单位)。 此持续时间必须是非零正值,才能启动商业广告。 商业广告正在播放时,将持续时间设为 0,并且 CueId 与正在播放的商业广告匹配,广告会被取消。

CueId

商业广告的唯一 ID,下游应用程序将使用它来执行相应操作。 必须是一个正整数。 可以将此值设为任意随机正整数,或使用上游系统跟踪提示 ID。 通过 API 提交之前,请确保将任何 ID 规范化为正整数。

显示静态图像

可选。 指示实时编码器在商业广告期间切换到默认盖板图像并隐藏传入视频源。 插入静态图像期间音频也会静音。 默认值为 false

所用图像将是在创建通道时通过默认静态图像资产 ID 属性指定的图像。 将对静态图像进行拉伸以适合显示图像大小。

插入“盖板”图像

可以向通道中的实时编码器发出信号,以切换到静态图像。 它还可以指示实时编码器结束正在显示的静态图像。

在某些情况下(例如,在广告期间)可以配置实时编码器以切换到静态图像,并隐藏传入的视频信号。 如果未配置此类静态图像,则在该广告期间不会屏蔽输入视频。

持续时间

静态图像的持续时间(以秒为单位)。 此持续时间必须是非零正值,才能启动静态图像。 如果正在显示静态图像,而指定的持续时间为零,则会终止正在显示的静态图像。

在 Ad 标记上插入静态图像

当设为 true 时,此设置会将实时编码器配置为在广告期间插入静态图像。 默认值为 true。

默认静态图像资产 ID

可选。 指定媒体服务资源(包含静态图像)的资源 ID。 默认值为 null。

Note

在创建频道之前,具有以下约束的盖板图像应当作为专用资产上传(该资产中不应有其他文件)。

  • 分辨率最大为 1920x1080。
  • 大小最大为 3 MB。
  • 文件名必须具有 *.jpg 扩展名。
  • 必须将该图像作为资产中的唯一 AssetFile 上传到资产,并应将此 AssetFile 标记为主文件。 资产不能加密存储。

如果未指定“默认盖板资产 Id”,并且“在 ad 标记上插入盖板”设为 true,则将使用默认 Azure 媒体服务图像隐藏输入视频流。 插入静态图像期间音频也会静音。

通道的节目

通道与节目相关联,使用节目,可以控制实时流中片段的发布和存储。 通道管理节目。 通道和节目的关系非常类似于传统媒体,通道具有恒定的内容流,而节目的范围限定为该通道上的一些定时事件。

可以通过设置 存档窗口 长度,指定希望保留节目录制内容的小时数。 此值的设置范围是最短 5 分钟,最长 25 小时。 存储时段长度还决定了客户端能够从当前实时位置按时间向后搜索的最长时间。 超出指定时间长度后,节目也能够运行,但落在时段长度后面的内容会全部被丢弃。 此属性的值还决定了客户端清单能够增加多长时间。

每个节目都与存储流式处理内容的资源相关联。 资产会映射到 Azure 存储帐户中的块 blob 容器,资产中的文件则作为 blob 存储在该容器中。 若要发布节目,以便客户查看该流,必须为关联的资源创建按需定位符。 创建此定位符后,可以生成提供给客户端的流式处理 URL。

一个通道最多支持三个并发运行的节目,因此可以为同一传入流创建多个存档。 这样,便可以根据需要发布和存档事件的不同部分。 例如,业务要求是存档 6 小时的节目,但只广播过去 10 分钟的内容。 为了实现此目的,需要创建两个同时运行的节目。 一个节目设置为存档 6 小时的事件但不发布该节目。 另一个节目设置为存档 10 分钟的事件,并且要发布该节目。

不应当将现有节目重用于新事件。 而是应当为每个事件创建并启动一个新节目,如“对实时流式传输应用程序进行编程”部分中所述。

准备好开始流式传输和存档后,启动节目。 要停止对事件进行流式传输和存档时,停止节目。

如果要删除存档的内容,请停止并删除节目,并删除关联的资产。 如果资产被某个节目使用,则无法将其删除;必须先删除该节目。

即使停止并删除了节目,只要没有删除资产,用户也能够将已存档内容作为点播视频进行流式传输。

如果希望保留已存档的内容但不希望其可供流式传输,请删除流式传输定位符。

获取实时源的缩略图预览

启用实时编码后,可以在实时源到达通道时获得实时源的预览。 这是一个很有用的工具,可用于检查实时源是否实际到达通道。

通道状态,以及状态如何映射到计费模式

通道的当前状态。 可能的值包括:

  • 已停止。 这是通道在创建后的初始状态。 此状态下可以更新通道属性,但不允许进行流式传输。
  • 正在启动。 通道正在启动。 此状态下不允许进行更新或流式传输。 如果发生错误,通道会返回到“已停止”状态。
  • 正在运行。 通道能够处理实时流。
  • 正在停止。 通道正在停止。 此状态下不允许进行更新或流式传输。
  • 正在删除。 正在删除通道。 此状态下不允许进行更新或流式传输。

下表显示通道状态如何映射到计费模式。

通道状态 门户 UI 指示器 是否计费?
正在启动 正在启动 否(暂时状态)
正在运行 准备就绪(没有正在运行的节目)

流式处理(至少有一个正在运行的节目)
正在停止 正在停止 否(暂时状态)
已停止 已停止

Note

目前,启动通道所需的平均时间为大约 2 分钟,最长可能需要 20 多分钟。 通道重置最长可能需要 5 分钟。

注意事项

  • 当某个编码类型为标准的通道出现输入源/贡献源丢失的情况时,该通道会采取相应的补偿措施,将源视频/音频替换为表示错误的静态图像和静音。 该通道会持续发出静态图像,直到输入/贡献源恢复。 我们建议不要让实时通道处于此类状态的时间超过 2 小时。 如果超出该限制,该通道无法保证输入重新连接时的行为,也无法保证其响应重置命令时的行为。 这种情况下必须停止通道并将其删除,并创建一个新的。
  • 通道或其关联的节目正在运行时,无法更改输入协议。 如果需要不同的协议,应当针对每个输入协议创建单独的通道。
  • 每次重新配置实时编码器后,请对通道调用 重置 方法。 重置通道之前,必须停止节目。 重置通道后,重新启动节目。
  • 只有当通道处于“正在运行”状态且通道中的所有节目都已停止时才能停止通道。
  • 默认情况下,只能向媒体服务帐户添加 5 个通道。 这是所有新帐户的软配额。 有关详细信息,请参阅配额和限制
  • 通道或其关联的节目正在运行时,无法更改输入协议。 如果需要不同的协议,应当针对每个输入协议创建单独的通道。
  • 仅当通道处于“正在运行” 状态时才会收取费用。 有关详细信息,请参阅部分。
  • 目前,实时事件的最大建议持续时间为 8 小时。
  • 确保使要从中流式传输内容的流式处理终结点处于“正在运行”状态。
  • 在 Azure 中输入多个语言轨迹和执行实时编码时,多语言输入仅支持 RTP。 使用 MPEG-2 TS over RTP 最多可以定义 8 个音频流。 当前不支持使用 RTMP 或平滑流引入多个音频轨迹。 使用本地实时编码执行实时编码时,不存在这种限制,因为发送到 AMS 的任何数据都会通过频道,而不做进一步的处理。
  • 编码预设使用“最大帧速率”30 fps 的思路。 因此,如果输入为 60fps/59.97i,则输入帧修剪/反交错为 30/29.97 fps。 如果输入为 50fps/50i,则输入帧将修剪/反交错为 25 fps。 如果输入为 25 fps,则输出将保持为 25 fps。
  • 完成后请不要忘记关闭通道。 否则会继续计费。

已知问题

  • 通道启动时间已改善为平均 2 分钟,但有时因为需求提高,可能仍然需要长达 20 分钟以上的时间。
  • RTP 支持迎合专业的广播装置。 请查看 博客中有关 RTP 的说明。
  • 盖板图像应符合此处所述的限制。 如果想要尝试创建默认静态图像大于 1920x1080 的通道,最终请求会出错。
  • 再次强调,完成流式处理后请不要忘记关闭通道。 否则会继续计费。

使用 Azure 媒体服务传送实时传送视频流事件

创建频道,通过门户执行从单比特率到自适应比特率流的实时编码

创建频道,通过 NET SDK 执行从单比特率到自适应比特率流的实时编码

Manage channels with REST API

媒体服务概念

Azure 媒体服务分片 MP4 实时引入规范