

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 准备就绪：设置 SCTE 35 源 – 分段或清单
<a name="scte35-getting-ready-source"></a>

如果 MediaLive 频道中有 HLS 输入，则必须配置输入以识别 SCTE 35 消息的来源。有两种可能的源：
+ 传输流（TS）中的分段。这种类型的源适用于所有可能包含 SCTE 35 消息的输入。除非选择特定的 SCTE 35 数据包标识符（PID），否则将使用 TS 中存在的第一个 PID。
+ HLS 输入清单中的标签。这种类型的源仅适用于 HLS 输入。

**在非 HLS 输入中设置源**

1. 在**创建/编辑通道**页面的导航窗格中，选择**输入附件**。

1. 在**常规输入设置**中，完成以下字段：
   + **SCTE 35 PID**：输入 PID 值。如果该值留空，则将选择输入中存在的第一个 SCTE 35 PID。

1. 如果合适，请对其他**输入附件**重复此操作。

**在 HLS 输入中设置源**

1. 在**创建/编辑通道**页面的导航窗格中，选择**输入附件**。

1. 对于每个 HLS 输入，在**网络输入设置**的 **HLS 输入设置**中，选择 **HLS 输入**。此时将显示更多字段。

1. 将 SCTE 35 源设置为 **SEGMENTS**（默认）或 **MANIFEST**。

**Topics**
+ [支持的清单格式](#scte35-get-ready-source-support)
+ [如何 MediaLive 创建 SCTE 35 消息](#scte35-get-ready-source-create-message)
+ [如何 MediaLive 插入消息：preroll](#scte35-get-ready-source-preroll)

## 支持的清单格式
<a name="scte35-get-ready-source-support"></a>

如果您设置为使用 HLS 输入清单作为 SCTE 35 源，请阅读以下章节。

MediaLive 可以从 EXT-X-CUE-OUT 中生成 SCTE35 拼接插入消息，也可以从源 HLS 清单中生成可选的 E **XT-X-CU** **E-IN 标签**。以下是这些标签支持的格式示例。
+ `#EXT-X-CUE-OUT:DURATION=60.000`
+ `#EXT-X-CUE-OUT:DURATION="60.000"`
+ `#EXT-X-CUE-OUT:60.000`
+ `#EXT-X-CUE-OUT:"60.000"`
+ `#EXT-X-CUE-IN`

## 如何 MediaLive 创建 SCTE 35 消息
<a name="scte35-get-ready-source-create-message"></a>

对于每个`EXT-X-CUE-OUT`， MediaLive 使用以下数据创建一个 splice insert 类型的 SCTE 35 消息：
+ `splice_event_id`: 一个递增的数字，从 1 开始，表示根据当前输入 MediaLive 创建的第一条 CUE-OUT 消息。
+ `out_of_network_indicator`：true (1)
+ `program_splice_flag`：true (1)
+ `duration_flag`：true (1)
+ `break_duration`:
  + `auto_return`：1
  + `reserved`：0
  + `duration`：清单中的持续时间，转换为 90kHz 的刻度。例如，15 秒是 1350000 个刻度。
+ `splice_immediate_flag`：0 (false)
+ `splice_time`: 使用输入清单中紧随其后的视频片段第一帧 EXT-X-CUE-OUT的视频 PTS
+ `unique_program_id`：0
+ `avail_num`: 一个递增的数字，从 1 开始，表示根据当前输入 MediaLive 创建的第一条 CUE-OUT 消息。
+ `avails expected`：0

对于每个`EXT-X-CUE-IN`， MediaLive 使用以下数据创建一个 splice insert 类型的 SCTE 35 消息：
+ `splice_event_id`：清单 EXT-X-CUE-OUT中最新的 ID。
+ `out_of_network_indicator`：false (0)
+ `program_splice_flag`：true (1)
+ `duration_flag`：false (0)
+ `splice_immediate_flag`：0 (false)
+ `splice_time`: 使用输入清单中紧随其后的视频片段第一帧 EXT-X-CUE-IN的视频 PTS
+ `unique_program_id`：0
+ `avail_num`: 最近的值 EXT-X-CUE-OUT
+ `avails expected`：0

## 如何 MediaLive 插入消息：preroll
<a name="scte35-get-ready-source-preroll"></a>

MediaLive 当它插入与 CUE-OUT 对应的 SCTE 35 消息时，它会包含预览。此预卷比 SCTE 35 消息中的 splice\_time 提前 5 秒。

MediaLive 如果频道没有足够的缓冲空间来允许预先播放，则会减少前置片段。缓冲区时长（以秒为单位）为以下各项的乘积：
+ 输入段持续时间（在输入清单中指定）；
+ 缓冲区中需包含的段数。附加 HLS 输入时，可以在**缓冲区段**字段中设置此值。

例如，如果分段持续时间为 6 秒，分段数为 3，则缓冲区为 18 秒。

**确保有足够预卷**

如果计算出的输入缓冲区短于 5 秒，则 MediaLive 会减少预滚动。 MediaLive 可能会将前置卷减少到 0，这意味着 SCTE35 消息的 PTS 值等于拼接时间的 PTS。

为避免预卷不足，我们建议您确保缓冲区*至少*等于预卷加一个分段。按照以下步骤进行操作：
+ 步骤 1：计算输入的最小缓冲区（以秒为单位）：预卷（以秒为单位） \+ 一个分段的长度（以秒为单位）
+ 步骤 2：计算该最小缓冲区中的分段数：用最小缓冲区除以分段长度
+ 步骤 3：将所得值四舍五入为整数。如果所得值小于 3，则四舍五入为 3。
+ 步骤 4：在“输入附件”的**缓冲区段**中输入此数字（如果需要，可以输入更大的数字）。

例如，假设分段长度为 2 秒。
+ 步骤 1：5 \+ 2 = 7
+ 步骤 2：7 秒除以 2 = 3.5
+ 步骤 3：四舍五入为 4。
+ 步骤 4：在“输入附件”的**缓冲区段**中输入此数字（或更大的数字）。