

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

# 使用 ESAM XML 指定 SCTE-35 标记
<a name="specifying-scte-35-markers-using-esam-xml"></a>

如果您的输入视频不包含 SCTE-35 标记，但您需要在输出中指定广告插入点，则可以在 AWS Elemental MediaConvert 作业设置中提供事件信号和管理 (ESAM) XML 文档。执行此操作时， MediaConvert在文档中指定的插入点处使用 IDR（即时解码器刷新）帧来调整输出。在同样封装在 MPEG2-TS 和 HLS 容器中的输出中，在这些位置 MediaConvert 插入 SCTE-35 time\$1signal 消息。

对于 **Apple HLS** 输出组，您也可选择提供用于限制 XML 文档的 HLS 清单。随后，您可以设置任务以相应地限制 HLS 输出的清单。

**注意**  
要在 MPEG2-TS 输出中放置 SCTE-35 标记，除了提供 ESAM XML 文档外，还必须在每个输出上启用 **ESAM SCTE-35**。有关更多信息，请参阅该概述后面的控制台过程。

**关于 ESAM 文档中的时间码**  
在输入剪辑和拼接后，在 XML 文档中指定相对于最终输出时间的插入点。从 00:00:00:00 开始计时，无论您的时间码设置如何。使用以下 24 小时格式和帧号：HH: MM: SS: FF。

例如，一个任务具有以下三个输入：一个 5 分钟的预卷、一个 1 小时的影片和一个 5 分钟的续卷。您可以使用输入剪辑来剪辑调整 1 小时输入的最后 20 分钟。因此，您的带预卷和续卷的输出的时长为 30 分钟。如果您希望第一个插入点在主要内容中显示三分钟，则应在 8 分钟处指定它 5 分钟预卷后的 3 分钟处。

**将 ESAM XML 文档包含在任务设置中（控制台）**

1. 在 [https://console.aws.amazon.com/medi](https://console.aws.amazon.com/mediaconvert) a MediaConvert Convert 上打开控制台。

1. 选择 **Create new job** (创建新任务)。

1. 为视频和音频设置输入、输出组和输出，如[教程：配置作业设置](setting-up-a-job.md)和[创建输出](output-settings.md)中所述。

1. 在左侧的 **Job (任务)** 窗格中的 **Job settings (任务设置)** 部分中，选择 **Settings (设置)**。

1. 在 **Ad signaling (广告信号)** 部分中，启用 **Event signaling and messaging (ESAM) (事件信令和消息收发 (ESAM))**。

1. 对于 **Signal processing notification XML (信号处理通知 XML)**，请以文本形式输入 ESAM 信号 XML 文档。有关示例，请参阅[示例 ESAM XML 信号处理通知](example-esam-xml.md)。
**注意**  
默认情况下， MediaConvert 会向 ESAM 有效载荷添加四秒的预滚动。这可能会导致 SCTE-35 消息的 MediaConvert 放置时间比 HLS 清单中指定的提示标记早一段。要移除预卷，请将 `responseSignalPreroll` 设置为零。此设置是 [EsamSettings](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs-id.html#jobs-id-model-esamsettings) 的子设置。

1. 如果您想在 HLS 清单中包含有关 SCTE-35 标记的信息，对于**清单确认条件通知 XML，请以文本形式输入您的 ESAM 清单条件** XML 文档。 MediaConvert 不在你的 DASH 清单中包含有关你的 SCTE-35 标记的信息。

   要在传输流和清单中插入 SCTE-35 标记，请将 MCC 文档中的 `dataPassThrough` 属性设置为 `"true"`。如果您不想在传输流中使用标记，请移除这些 `dataPassThrough` 属性。

   有关示例，请参阅[示例 ESAM XML 清单确认条件通知](example-esam-xml-manifest-conditioning.md)。

1. 对于每个你想要 SCTE-35 标记的 MPEG2-TS 输出，启用标记：

   1. 在左侧的 **Job (任务)** 窗格中，在 **Output groups (输出组)**、**File group (文件组)** 下，选择输出。

   1. 确认它是 MPEG2-TS 输出。在 **Output settings (输出设置)** 部分中，请确保 **Container (容器)** 设置为 **MPEG-2 Transport Stream (MPEG-2 传输流)**。

   1. 选择 **Container settings (容器设置)**，然后向下滚动以查找 **PID controls (PID 控件)** 部分。

   1. 对于 **ESAM SCTE-35**，选择 **Enabled (已启用)**。

   1. 对于 **SCTE-35 source (SCTE-35 源)**，保留默认值 **None (无)**。

1. 仅对任务中的任何 **Apple HLS** 输出组执行此步骤。

   如果您要使用 ESAM 插入点限制 HLS 清单，请按照[在您的 HLS 清单中包含 SCTE-35 信息](including-scte-35-information-in-your-hls-manifest.md)中的过程操作。否则，请执行以下步骤来确认以下设置仍处于其默认状态：

   1. 请确保 **Manifest confirm condition notification XML (清单确认条件通知 XML)**（已在此过程的上一步中讨论）为空。

   1. 对于您的任务中的每个 **Apple HLS** 输出组，请确认您已将 **Ad Markers (广告标记)** 保持未选中状态。

      1. 在左侧的 **Job (任务)** 窗格中，在 **Output groups (输出组)** 下，选择 **Apple HLS**。

      1. 在 **Apple HLS group settings (Apple HLS 组设置)** 部分中，选择 **Advanced (高级)**。

      1. 在 **Ad markers (广告标记)** 部分中，清除 **Elemental** 和 **SCTE-35 enhanced (SCTE-35 增强)** 复选框。

   1. 对于 **Apple HLS** 输出组中的每个输出，请确认 **SCTE-35 source (SCTE-35 源)** 设置为 **None (无)**：

      1. 在左侧的 **Job (任务)** 窗格中，在 **Output groups (输出组)**、**Apple HLS** 下，选择输出。

      1. 在 **Output settings (输出设置)** 部分中，选择 **Transport stream settings (传输流设置)**。

      1. 对于 **SCTE-35 source (SCTE-35 源)**，选择 **None (无)**。

**在作业设置中包含 ESAM XML 文档（API、SDK 等 AWS CLI）**

1. 将任务设置的根处的 [`esam` 属性](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-jobsettings-esam)及其子属性包含在 JSON 任务规范中。以下示例显示了这些属性。

   1.  以字符串形式将 ESAM 信号处理 XML 规范包含在设置 `sccXml` 中。

   1. （可选）以字符串形式将清单确认条件 XML 通知文档包含在设置 `mccXml` 中：

   ```
     "esam": {
       "responseSignalPreroll": 4000,
       "signalProcessingNotification": {
         "sccXml": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<SignalProcessingNotification ..."
       },
       "manifestConfirmConditionNotification": {
         "mccXml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<ns2:ManifestConfirmConditionNotification ... " 
       }
   ```

1. 对于任务中的每个 M2TS（MPEG2 传输流）输出，请设置您的 JSON 作业规范，如以下示例所示。包含属性 [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m2tssettings-scte35esam](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m2tssettings-scte35esam)。将 [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m2tssettings-scte35source](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m2tssettings-scte35source) 设置为 `NONE`。

   ```
     "outputs": [
           {
             "extension": "m2ts",
             "containerSettings": {
               "container": "M2TS",
               "m2tsSettings": {
                 ...
   
                 "scte35Esam": {
                   "scte35EsamPid": 508
                 },
                 ...
                 "scte35Source": "NONE"
               }
   ```

1. 如果您要使用 SCTE-35 信息限制 HLS 清单，则对于任务中的每个 Apple HLS 输出组，包含以下内容。这些设置显示在此步骤结尾的示例中：
   +  将 [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m3u8settings-scte35source](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-m3u8settings-scte35source) 设置为 `PASSTHROUGH`。
   + 在一个数组中包含 [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-hlsgroupsettings-admarkers](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-hlsgroupsettings-admarkers) 并列出 `ELEMENTAL_SCTE35` 和/或 `ELEMENTAL`。

     有关使用选定的每个设置创建的示例清单，请参阅[示例清单：Elemental 广告标记](sample-manifest-elemental-ad-markers.md)和[示例清单：SCTE-35 增强广告标记](sample-manifest-scte-35-enhanced-ad-markers.md)。

   如果您不想使用 SCTE-35 信息限制 HLS 清单，请保留 `scte35Source` 的默认设置 `NONE`，并且不要包含 `adMarkers`：

   ```
     "outputGroups": [
       {
         "customName": "apple_hls",
         "outputGroupSettings": {
           "type": "HLS_GROUP_SETTINGS",
           "hlsGroupSettings": {
             "adMarkers": [
               "ELEMENTAL_SCTE35"
             ],
             ...
   
           }
         },
         "outputs": [
           {
             "extension": "m3u8",
             "nameModifier": "high",
             "outputSettings": {
               "hlsSettings": {
                 ...
               }
             },
             "containerSettings": {
               "container": "M3U8",
               "m3u8Settings": {
                 ...
                 "scte35Source": "PASSTHROUGH"
               }
   ```

1. 像往常一样提交任务。

   有关以编程方式提交 AWS Elemental MediaConvert 作业的信息，请参阅[AWS Elemental MediaConvert 使用 AWS SDKs 或入](https://docs.aws.amazon.com/mediaconvert/latest/apireference/custom-endpoints.html)[门 AWS CLI和 API AWS Elemental MediaConvert 使用入门](https://docs.aws.amazon.com/mediaconvert/latest/apireference/getting-started.html)。

# 示例 ESAM XML 信号处理通知
<a name="example-esam-xml"></a>

此 ESAM XML 块生成两个 30 秒的广告中断，一个在第 10 秒，一个在第 75 秒。

```
<?xml version="1.0" encoding="UTF-8"?>
<SignalProcessingNotification xmlns="urn:cablelabs:iptvservices:esam:xsd:signal:1" xmlns:sig="urn:cablelabs:md:xsd:signaling:3.0" xmlns:common="urn:cablelabs:iptvservices:esam:xsd:common:1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" acquisitionPointIdentity="ExampleESAM">

    <common:BatchInfo batchId="1">
      <common:Source xsi:type="content:MovieType" />
    </common:BatchInfo>

    <ResponseSignal acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="1" signalPointID="10.00" action="create">
      <sig:NPTPoint nptPoint="10.00"/>
      <sig:SCTE35PointDescriptor spliceCommandType="06">
        <sig:SegmentationDescriptorInfo segmentEventId="1" segmentTypeId="52" upidType="9" upid="1" duration="PT30S" segmentNumber="1" segmentsExpected="1"/>
      </sig:SCTE35PointDescriptor>
    </ResponseSignal>
    <ConditioningInfo acquisitionSignalIDRef="1" startOffset="PT10S" duration="PT30S"/>

    <ResponseSignal acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="2" signalPointID="40.00" action="create">
      <sig:NPTPoint nptPoint="40.00" />
      <sig:SCTE35PointDescriptor spliceCommandType="06">
        <sig:SegmentationDescriptorInfo segmentEventId="1" segmentTypeId="53" upidType="9" upid="2"/>
      </sig:SCTE35PointDescriptor>
    </ResponseSignal>

    <ResponseSignal acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="3" signalPointID="75.00" action="create">
      <sig:NPTPoint nptPoint="75.00"/>
      <sig:SCTE35PointDescriptor spliceCommandType="06">
        <sig:SegmentationDescriptorInfo segmentEventId="2" segmentTypeId="52" upidType="9" upid="3" duration="PT30S" segmentNumber="2" segmentsExpected="1"/>
      </sig:SCTE35PointDescriptor>
    </ResponseSignal>
    <ConditioningInfo acquisitionSignalIDRef="3" startOffset="PT75S" duration="PT30S"/>
    
    <ResponseSignal acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="4" signalPointID="105.00" action="create">
      <sig:NPTPoint nptPoint="105.00" />
      <sig:SCTE35PointDescriptor spliceCommandType="06">
        <sig:SegmentationDescriptorInfo segmentEventId="2" segmentTypeId="53" upidType="9" upid="4"/>
      </sig:SCTE35PointDescriptor>
    </ResponseSignal>

</SignalProcessingNotification>
```

# 示例 ESAM XML 清单确认条件通知
<a name="example-esam-xml-manifest-conditioning"></a>

此 ESAM 清单确认条件 (MCC) XML 文档可生成两个 30 秒广告时段的 HLS 清单提示标签。第一个从 10 秒后开始；第二个从 75 秒后开始。这些提示清单标签还包含下游客户可用于替换和插入广告的数据。使用此 MCC 文档生成的输出在第一个广告时段包含嵌入到传输流文件中的 SCTE-35 消息，但在第二个广告时段不包含嵌入到传输流文件中。

请注意第一个广告插播时间点的 `dataPassThrough` 属性。当此属性存在且设置为时`"true"`，除了清单之外，还会在传输流中 MediaConvert 插入 SCTE-35 标记。对于您只想在清单中标记的任何广告时段，请省略 `dataPassThrough` 属性。

MediaConvert 仅在 HLS 包中支持使用 ESAM 进行清单调节。

```
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns2:ManifestConfirmConditionNotification xmlns:ns2="http://www.cablelabs.com/namespaces/metadata/xsd/confirmation/2" xmlns="http://www.cablelabs.com/namespaces/metadata/xsd/core/2" xmlns:ns3="http://www.cablelabs.com/namespaces/metadata/xsd/signaling/2">
  <ns2:ManifestResponse acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="1" duration="PT30S" dataPassThrough="true"> 
  <ns2:SegmentModify>
      <ns2:FirstSegment>
        <ns2:Tag value="#EXT-X-CUE-OUT:4,SpliceType=VOD_DAI,Action=REPLACE, PAID=amazon.com/TEST2014020500000346,Acds=BA" />
      </ns2:FirstSegment>
      <ns2:SpanSegment>
        <ns2:Tag value="#EXT-X-CUE-OUT-CONT:${secondsFromSignal}/4, SpliceType=VOD_DAI,Action=REPLACE,PAID=amazon.com/TEST2014020500000346,Acds=BA" adapt="true" />
      </ns2:SpanSegment>
      <ns2:LastSegment>
        <ns2:Tag value="#EXT-X-CUE-IN:4,SpliceType=VOD_DAI" locality="after" adapt="true" />
      </ns2:LastSegment>
    </ns2:SegmentModify>
	</ns2:ManifestResponse>
  <ns2:ManifestResponse acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="2"></ns2:ManifestResponse>
  <ns2:ManifestResponse acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="3" duration="PT30S">  
  <ns2:SegmentModify>
      <ns2:FirstSegment>
        <ns2:Tag value="#EXT-X-OUT:4,SpliceType=VOD_DAI,Action=REPLACE, PAID=amazon.com/TEST2014020500000347,Acds=BA" />
      </ns2:FirstSegment>
      <ns2:SpanSegment>
        <ns2:Tag value="#EXT-X-OUT-CONT:${secondsFromSignal}/4, SpliceType=VOD_DAI,Action=REPLACE,PAID=amazon.com/TEST2014020500000346,Acds=BA" adapt="true" />
      </ns2:SpanSegment>
      <ns2:LastSegment>
        <ns2:Tag value="#EXT-X-CUE-IN:4,SpliceType=VOD_DAI" locality="after" adapt="true" />
      </ns2:LastSegment>
    </ns2:SegmentModify>
	</ns2:ManifestResponse>
	<ns2:ManifestResponse acquisitionPointIdentity="ExampleESAM" acquisitionSignalID="4"></ns2:ManifestResponse>
</ns2:ManifestConfirmConditionNotification>
```