使用本地编码器执行实时传送视频流以创建多比特率流

概述

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

  • 本地实时编码器将多比特率 RTMP 或平滑流式处理(分片 MP4)流发送到无法通过媒体服务执行实时编码的频道。 引入流会通过频道,而不会进行任何进一步处理。 这种方法称为 直通。 实时编码器也可将单比特率流发送到并未启用实时编码的频道,并不建议这样做。 媒体服务会将流传送给请求它的客户。

    Note

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

  • 本地实时编码器采用以下格式之一将单比特率流发送至能够使用媒体服务执行实时编码的频道:RTP (MPEG-TS)、RTMP 或平滑流式处理(分片 MP4)。 然后,频道将对传入的单比特率流执行实时编码,使之转换为多比特率(自适应)视频流。 媒体服务会将流传送给请求它的客户。

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

  • 直通:如果计划使用将多比特率流(直通流)作为输出的本地实时编码器,请指定此值。 在这种情况下,传入流无需任何编码即可传递到输出。 这是 2.10 版以前的频道行为。 本文提供有关如何使用这种频道的详细信息。
  • 实时编码:如果计划使用媒体服务将单比特率实时流编码为多比特率流,请选择此值。 使实时编码通道处于“正在运行”状态会产生帐单费用。 建议在实时传送视频流事件完成之后立即停止正在运行的频道,以避免产生额外的小时费用。 媒体服务会将流传送给请求它的客户。

Note

本文讨论未启用执行实时编码的频道的属性。 若要了解如何使用执行实时编码的频道,请参阅使用 Azure 媒体服务创建多比特率流的实时传送视频流

下图表示的是一个使用本地实时编码器输出多比特率 RTMP 或分片 MP4(平滑流式处理)流的实时传送视频流工作流。

实时工作流

常见的实时流处理方案

以下步骤介绍创建常见的实时传送视频流应用程序时涉及的任务。

  1. 将视频摄像机连接到计算机。 启动并配置输出多比特率 RTMP 或分段 MP4(平滑流式处理)流的本地实时编码器。 有关详细信息,请参阅 Azure 媒体服务 RTMP 支持和实时编码器

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

  2. 创建并启动频道。

  3. 检索通道引入 URL。

    实时编码器使用引入 URL 将流发送到频道。

  4. 检索频道预览 URL。

    使用此 URL 来验证频道是否正常接收实时流。

  5. 创建节目。

    使用 Azure 门户时,创建节目的同时还会创建资产。

    使用 .NET SDK 或 REST 时,需要创建一个资产并指定在创建节目时要使用该资产。

  6. 发布与节目关联的资产。

    Note

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

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

  8. (可选)可以向实时编码器发信号,以启动广告。 将广告插入到输出流中。

  9. 在要停止对事件进行流式传输和存档时,停止节目。

  10. 删除节目(并选择性地删除资产)。

频道及其相关组件的说明

频道输入(引入)配置

引入流式传输协议

媒体服务通过使用多比特率分片 MP4 和多比特率 RTMP 作为流式处理协议支持引入实时源。 选择了 RTMP 引入流式传输协议时,会为频道创建两个引入(输入)终结点:

  • 主 URL:指定频道的主 RTMP 引入终结点的完全限定 URL。
  • 辅助 URL(可选):指定频道的辅助 RTMP 引入终结点的完全限定 URL。

如果想要提高引入流的持久性和容错性,并实现编码器故障转移和容错性(尤其在以下情况时),请使用辅助 URL:

  • 单个编码器双推送到主和辅助 URL:

    此方案的主要目的是为网络波动和抖动提供更多的复原能力。 某些 RTMP 编码器无法良好处理网络断开连接情况。 当出现网络断开连接时,编码器可能会停止编码,并在重新连接情况发生时,不发送缓冲的数据。 这会导致不连续性和数据丢失。 网络断开连接可能是由错误的网络或 Azure 端的维护导致。 主/辅助 URL 可减少网络问题,并且提供受控的升级过程。 每当计划的网络发生断开连接情况时,媒体服务管理主要和次要断开连接并为两者提供延迟断开连接。 然后,编码器有时间保留发送的数据并再次重新连接。 断开连接的顺序可以是随机的,但是在主要/次要或次要/主要 URL 之间始终会存在延迟。 在此方案中,编码器仍是单点故障。

  • 多个编码器中的每个编码器推送到专用点:

    此方案提供编码器并引入冗余。 在此方案中编码器 1 推送到主 URL,而编码器 2 推送到辅助 URL。 当一个编码器发生故障时,其他编码器可以继续发送数据。 由于媒体服务不会同时断开主 URL 和辅助 URL 的连接,因此可保持数据冗余。 此方案假设编码器已同步时间,并提供完全相同的数据。

  • 多个编码器双推送到主和辅助 URL:

    在此方案中这两个编码器将数据推送到主和辅助 URL。 这提供了最佳的可靠性、容错能力以及数据冗余。 此方案可以容忍两个编码器同时发生故障和断开连接,即使一个编码器停止工作。 此方案假设编码器已同步时间,并提供完全相同的数据。

有关 RTMP 实时编码器详细信息,请参阅 Azure 媒体服务的 RTMP 支持和实时编码器

摄取 URL(终结点)

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

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

可以选择通过 SSL 连接引入分片 MP4(平滑流)实时流。 要通过 SSL 进行引入,请确保将引入 URL 更新为 HTTPS。 当前,无法通过 SSL 引入 RTMP。

关键帧间隔

当使用本地实时编码器生成多比特率流时,关键帧间隔指定外部编码器使用的帧组 (GOP) 的持续时间。 当频道收到此传入流后,可以通过下列任意格式将实时流传输到客户端播放应用程序:平滑流、基于 HTTP 的动态自适应流 (DASH) 和 HTTP Live Streaming (HLS)。 当执行实时传送视频流时,HLS 始终是动态打包的。 默认情况下,媒体服务根据从实时编码器收到的关键帧间隔自动计算 HLS 段打包比率(每段的片数)。

下表显示了段持续时间是如何计算的:

关键帧间隔 HLS 段打包比率 (FragmentsPerSegment) 示例
小于或等于 3 秒 3:1 如果 KeyFrameInterval(或 GOP)为 2 秒,则默认的 HLS 段打包比率是 3 比 1。 这会创建一个 6 秒的 HLS 段。
3 到 5 秒 2:1 如果 KeyFrameInterval(或 GOP)为 4 秒,则默认的 HLS 段打包比率是 2 比 1。 这会创建一个 8 秒的 HLS 段。
大于 5 秒 1:1 如果 KeyFrameInterval(或 GOP)为 6 秒,则默认的 HLS 段打包比率是 1 比 1。 这会创建一个 6 秒的 HLS 段。

可以通过配置频道的输出并设置 ChannelOutputHls 上的 FragmentsPerSegment 来更改每段的片数这一比率。

还可以通过设置 ChanneInput 上的 KeyFrameInterval 属性更改关键帧间隔值。 如果显式设置了 KeyFrameInterval,则会通过上述规则计算 HLS 段打包比率 FragmentsPerSegment。

如果同时显式设置了 KeyFrameInterval 和 FragmentsPerSegment,则媒体服务使用设置的值。

允许的 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,频道不一定要处于“正在运行”状态。 在频道开始引入数据后,可以预览流。

当前,不管指定了哪种输入类型,都只能以分片 MP4(平滑流式处理)流格式来传送预览流。 可以使用平滑流式处理运行状况监视器播放器来测试平滑流。 还可以使用 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))

频道输出

有关频道输出的信息,请参阅 关键帧间隔 部分。

频道管理的节目

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

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

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

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

不应当将现有节目重用于新事件。 应针对每个事件创建新节目。 准备好开始流式传输和存档后,启动节目。 要停止对事件进行流式传输和存档时,停止节目。

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

即使你停止并删除了节目,在删除资产之前,用户可以按需将已存档内容作为视频进行流式传输。 如果希望保留已存档内容但不希望其可供流式传输,请删除流式传输定位符。

频道状态和计费

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

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

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

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

流式处理(至少有一个正在运行的节目)

正在停止 正在停止 否(暂时状态)
已停止 已停止

隐藏式字幕和广告插入

下表展示了支持的隐藏式字幕和广告插入标准。

标准 注释
CEA-708 和 EIA-608 (708/608) CEA-708 和 EIA-608 是适用于美国和加拿大的隐藏式字幕标准。

当前,只有当编码的输入流中携带了该字幕时才支持该字幕。 需要使用可以在发送到媒体服务的编码流中插入 608 或 708 字幕的实时媒体编码器。 媒体服务会将带有插入的字幕的内容传送到查看器。

ismt 内的 TTML(平滑流式处理文本轨道) 媒体服务动态打包功能允许客户端对下列任何格式的内容进行流式传输:DASH、HLS 或平滑流式处理。 但是,如果引入 .ismt 内带有字幕(平滑流式处理文本轨道)的分片 MP4(平滑流式处理),则只能将该流传送到平滑流式处理客户端。
SCTE-35 SCTE-35 是用来提示广告插入的数字信号系统。 下游接收器使用该信号来将广告接合到流中并使其占用规定的时间。 SCTE-35 在输入流中必须作为稀疏轨道进行发送。

当前唯一受支持的可以携带广告信号的输入流格式是分片 MP4(平滑流式处理)。 唯一受支持的输出格式也是 Smooth Streaming.

注意事项

使用本地实时编码器将多比特率流发送到一个频道时,以下限制将适用:

  • 确保有足够的空闲 Internet 连接将数据发送到引入点。
  • 使用辅助引入 URL 需要额外的带宽。
  • 传入多比特率流最多可包含 10 个视频质量级别(层)和最多为 5 个音频轨。
  • 任何视频质量级别的最高平均比特率应低于 10 Mbps。
  • 所有视频和音频流的平均比特率聚合应小于 25 Mbps。
  • 当频道或其关联的节目正在运行时,无法更改输入协议。 如果需要不同的协议,应当针对每个输入协议创建单独的频道。
  • 可在频道中引入单比特率。 但由于频道不处理流,因此客户端应用程序也会接收单比特率流。 (不建议采用此选项。)

下面是与使用频道及其相关组件相关的其他注意事项:

  • 每次重新配置实时编码器后,请对通道调用 重置 方法。 重置通道之前,必须停止节目。 在重置频道后,重新启动节目。

    Note

    重新启动节目时,需要将其与新资产相关联,并创建新定位符。

  • 只有当频道处于“正在运行”状态且频道中的所有节目都已停止时,才能停止频道。

  • 默认情况下,只能向媒体服务帐户添加五个频道。 有关详细信息,请参阅配额和限制
  • 仅当频道处于“正在运行”状态时才会向你收费。 有关详细信息,请参阅频道状态和计费部分。

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

Azure 媒体服务概述和常见方案

媒体服务概念