媒体服务实时传送流最佳做法指南

客户经常询问如何能够降低实时传送流的延迟。 本文介绍除了实时事件编码之外,还介绍了实现低延迟实时流的最佳做法。

注意

在继续阅读本文之前,请阅读 低延迟 HLS (LL-HLS) 一文,了解实时事件编码的低延迟。 然后,返回到本指南,了解其他哪些因素可能会影响流式处理延迟。

除了媒体的编码方式之外,还有许多因素决定了流的端到端延迟。 下面是应考虑的一些因素:

  1. 贡献编码器端的延迟。 客户使用 OBS Studio、Wirecast 等编码软件将 RTMP 实时传送流发送到媒体服务。 此软件中的设置会影响实时传送流的端到端延迟。

  2. Azure 媒体服务中的实时传送流管道延迟

  3. CDN 性能

  4. 客户端中的视频播放器缓冲算法和网络状况

  5. 预配时间

贡献编码器

你可以在 RTMP 流抵达媒体服务之前控制源编码器的设置。 下面是有关可以尽量降低延迟的设置的一些建议:

  1. 为媒体服务帐户选择实际位置最靠近贡献编码器的区域。 这可以确保与媒体服务帐户保持极好的网络连接。

  2. 使用一致的片段大小。 建议将 GOP 大小设置为 2 秒。 某些编码器(例如 OBS)的默认值为 8 秒。 确保更改此设置。

  3. 如果编码软件允许使用 GPU 编码器,请使用这种编码器。 这样,就可以将 CPU 的工作负载分散到 GPU。

  4. 使用针对低延迟优化的编码配置文件。 例如,如果使用 Nvidia H.264 编码器,则在 OBS Studio 中可能会看到“零延迟”预设。

  5. 确保所发送内容的分辨率不高于你要流式传输的内容。 例如,如果使用 720p 标准编码实时事件,则发送一个已经是 720p 的流。

  6. 除非使用直通实时事件,否则将帧速率保持在 30fps 或更低。 虽然我们支持实时事件的 60 fps 输入,但编码实时事件输出仍然不会高于 30 fps。 对于 低延迟 HLS,建议使用固定帧速率,最大帧持续时间不应超过 0.5 秒,以获得最佳体验。

Azure 媒体服务实时事件的配置

下面是可以帮助降低管道延迟的一些配置:

  1. 对直播活动使用低延迟流选项。 对于标准编码 (高达 720p) 和高级编码 (高达 1080p) 流选项,除非需要超过 6 小时的 DVR 窗口或平滑的流输出,请使用低延迟流延迟设置。

  2. 建议为 HLS 和 DASH 播放选择 CMAF 输出。 这允许为两种格式共享相同的片段。 使用 CDN 时,会提高缓存命中率。 例如:

    类型 格式 URL 示例
    HLS CMAF format=m3u8-cmaf https://amsv3account-usw22.streaming.media.azure.net/21b17732-0112-4d76-b526-763dcd843449/ignite.ism/manifest(format=m3u8-cmaf)
    MPEG-DASH CMAF format=mpd-time-cmaf https://amsv3account-usw22.streaming.media.azure.net/21b17732-0112-4d76-b526-763dcd843449/ignite.ism/manifest(format=mpd-time-cmaf)
  3. 如果必须选择 TS 输出,请使用 HLS 打包率 1。 这允许我们只将一个片段打包到一个 HLS 段中。 在本机 Apple 播放器中无法获得 LL-HLS 的全部优势。

播放器优化

在选择和配置视频播放器时,请确保使用针对低延迟进行优化的设置。

媒体服务支持不同的流式处理协议输出 – DASH、带 TS 输出的 HLS,以及带 CMAF 片段的 HLS。 使用 LowLatencyV2 流选项时,请确保找到支持低延迟 HLS (LL-HLS) 的播放器。 根据播放器的实现,缓冲决策会影响观众观察到的延迟。 不良的网络状况或有利于播放质量和稳定性的默认算法可能导致播放器决定预先缓冲更多内容,以防止播放过程中发生中断。 在播放会话之前和期间进行的这种缓冲会增加端到端延迟。

使用 Azure Media Player 时,低延迟启发配置文件会优化播放器,以便在播放器端实现尽可能低的延迟。 此播放器仅支持 DASH,除非它在 Apple 设备上的 Safari 上使用。

CDN 选择和优化

流式处理终结点是向 CDN 或直接向客户传送实时流和 VOD 流内容的源服务器。 最好使用具有受防护源的内容分发网络 (CDN) ,以确保有效地传送媒体内容的流量。

建议使用 Verizon 提供的 Azure CDN(标准或高级版)。 我们优化了集成体验,以便客户可以在 Azure 门户中通过单项选择来配置此 CDN。 每当启动流式处理终结点时,请务必为 CDN 终结点启用 源防护 和流式处理优化。

我们的客户还可以通过良好的体验使用自己的 CDN。 确保在 CDN 上采取措施来保护源,避免过多的流量对其造成影响。

还可以通过配置 CDN 配置文件的规则来提高性能。 请参阅 如何启用 CDN 优化

流式处理终结点缩放

注意

标准流式处理终结点/源是一种共享资源,使流量较低的客户能够以较低的成本流式传输内容。 如果你预期流量较大或打算使用 CDN,请不要使用标准流式处理终结点来缩放流单元。

高级流式处理终结点/源通过添加或删除专用流单元来为客户提供更大的缩放灵活性和隔离性。 流单元是分配给流式处理终结点的计算资源。 每个流单元可以流式传输大约 200 Mbps 的流量。

虽然可以使用同一个流式处理终结点同时流式传输多个实时事件,但一个流式处理终结点所需的最大默认流单元数为 10 个。 可以开具支持票证来请求超过默认 10 个的流单元。

确定所需的高级流单元

可执行以下两个步骤来确定所需的流式处理终结点和流单元数量:

  1. 确定所需的出口总数。

  2. 将出口总数除以 200(每个流单元可以流式传输的最大 Mbps)。

确定所需的出口总数

使用以下公式确定所需的出口总数。

所需的出口总数 = 平均带宽 x 并发观众数量 x 流式处理终结点处理的流量百分比。

让我们依次看看每个乘数:

平均带宽。 你打算流式传输的平均比特率是多少? 换言之,如果你有多个可用的比特率,你打算使用的所有比特率的平均值是多少? 可使用以下方法之一估算此值:

对于包括编码的实时事件:

  • 如果你不知道平均带宽是多少,可以使用我们的最高比特率作为估算值。 对于 1080p 编码的实时事件,我们的最高比特率是 5.5Mbps,因此,平均比特率大约为 3.5Mbps。

  • 查看用于对实时事件进行编码的编码预设,例如 AdaptiveStreaming(H.264) 预设。 请参阅此输出示例

对于仅使用直通而不使用编码的实时事件:

  • 检查本地编码器使用的编码比特率梯度。

并发观众的数量。 预期有多少并发观众? 这可能很难估算,但请根据客户数据尽力而为。 是否正在向全球受众流式传输会议内容? 是否打算通过实时传送流向客户销售一系列产品?

流式处理终结点处理的流量百分比。这也可以表示为“未由 CDN 处理的流量百分比”,因为这是实际在公式中使用的数字。 那么,考虑到这一点,预期的 CDN 卸载大小是多少? 如果预期 CDN 将处理 90% 的实时流量,则预期只会在流式处理终结点上处理 10% 的流量。 公式中使用的数字是 0.10,这是预期在流式处理终结点上处理的流量百分比。

确定所需的高级流单元数量

所需的高级流单元数量 = 平均带宽 x 观众数量 x 未由 CDN 处理的流量百分比 / 200 Mbps

示例

你最近发布了一款新产品,并希望向老客户演示该产品。 你希望延迟很低,避免本已非常忙碌的受众感到沮丧,于是你打算使用高级流式处理终结点和 CDN。

你有大约 100,000 名客户,但他们也许不会全都观看你的现场活动。 你猜想,在最好的情况下,只有 1% 的客户会出席,也就是说,预期的并发观众有 1,000 人。

并发用户数 = 1,000

你已决定使用媒体服务对实时传送流进行编码,并且不使用直通。 你不知道平均带宽是多少,但知道将以 1080p(5.5 Mbps 的最高比特率)传输,因此在计算公式中,估算的平均带宽为 3.5 Mbps。

平均带宽 = 3.5

由于受众分散在世界各地,预期 CDN 将处理大部分 (90%) 的实时流量。 因此,高级流式处理终结点只会处理 10% 的流量。

流式处理终结点处理的流量百分比 = 10% = 0.1

使用上面提供的公式:

所需的出口总数 = 平均带宽 x 并发观众数量 x 流式处理终结点处理的流量百分比。

所需的出口总数 = 3.5 x 1,000 x 0.1

所需的出口总数 = 350 Mbps

将出口总数除以 200,可以得出需要 1.75 个高级流单元。

所需的高级流单元数 = 所需的出口总数/200Mpbs

所需的高级流单元数 = 1.75

将此数字四舍五入为 2,即需要 2 个单元。

使用门户估算需求

Azure 门户可以帮助简化计算。 在“流式处理”页上,可以使用提供的计算器查看在更改平均带宽、CDN 命中率和流单元数时估算的受众范围。

  1. 在媒体服务帐户页上,从菜单中选择“流式处理终结点”。

  2. 选择“添加流式处理终结点”添加新的流式处理终结点。

  3. 为流式处理终结点命名。

  4. 选择“高级流式处理终结点”作为流式处理终结点类型。

  5. 由于此时只是获取估算值,因此在创建后请不要启动流式处理终结点。 请选择“否”。

  6. 选择“标准 Verizon”或“高级 Verizon”作为 CDN 定价层。 配置文件名称将相应地更改。 对于本练习,请保留原有的名称。

  7. 对于 CDN 配置文件,选择“新建”。

  8. 选择“创建”。 部署终结点后,将显示流式处理终结点屏幕。

  9. 选择刚刚创建的流式处理终结点。 显示的流式处理终结点屏幕中包含了受众范围估算值。

  10. 具有 1 个流单元的流式处理终结点的默认设置会显示内容估计将使用 90% 的 CDN 和 10% 的流式处理终结点,以 3.5 Mbps 的带宽流式传输给 571 个并发观众。

  11. 将出口源的百分比从 CDN 缓存的 90% 更改为 0%。 计算器估计你能够在不使用 CDN 的情况下,以 3.5 Mbps 和 200 Mbps 的带宽向 57 个并发观众流式传输内容。

  12. 现在,将出口源改回 90%。

  13. 然后将流单元数更改为 2。 计算器估计你能够以 3.5 Mbps 和 4000Mpbs 的带宽向 1143 个并发观众流式传输内容,CDN 将处理 90% 的流量。

  14. 选择“保存”。

  15. 可以启动流式传输终结点并尝试向其发送流量。 屏幕底部的指标将跟踪实际流量。

定时

建议在达到预期峰值用量之前的 1 小时预配流单元,以确保流单元准备就绪。

获得帮助和支持

如果有任何疑问,可以联系媒体服务,或者使用以下方法之一关注我们的更新: