对跳过广告进行故障排除 MediaTailor - AWS Elemental MediaTailor

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

对跳过广告进行故障排除 MediaTailor

广告跳过是 MediaTailor 客户报告的最常见问题之一。本节详细分析了为何在播放期间可能会跳过广告,并提供了确保正确插入广告的解决方案。

症状和影响

当出现跳过广告时,您可能会发现以下症状:

  • 广告未在预期的广告时间段内显示

  • 广告时段充斥着内容而不是广告

  • 在不同的观看会话中,广告播放不一致

  • CloudWatch 显示具有各种跳过原因AdSkipped的事件的日志

跳过广告会直接影响创收,如果不及时解决,可能会导致观众体验不佳。

常见原因

MediaTailor 在日志组FILLED_AVAIL的事件日志消息中记录跳过广告的MediaTailor/AdDecisionServerInteractions具体原因。了解这些跳过原因对于有效的故障排除至关重要。

常见的广告跳过原因
跳过理由 描述
NEW_CREATIVE 该广告尚未进行转码。当 MediaTailor 遇到需要在插入之前进行转码的新广告素材时,就会发生这种情况。
PROFILE_NOT_FOUND 与会话配置关联的 MediaConvert 转码配置文件不存在,因此无法准备广告。
TRANSCODE_ERROR 广告转码流程遇到错误,无法完成。
TRANSCODE_IN_PROGRESS 广告转码仍在进行中,尚未准备好插入。
INTERNAL_ERROR 处理广告时出现内部 MediaTailor 错误,导致广告无法插入。
AVAIL_DURATION_EXCEEDED 广告无法在广告插播的剩余时间内播放。
LEFTOVER_AVAIL_EXCEEDED_THRESHOLD 所有可能已插入的广告的累积持续时间未达到为该会话配置的个性化阈值。
VAST_PARSING_ERROR 来自广告决策服务器的 VAST 响应包含错误或格式错误。
ADS_TIMEOUT 广告决策服务器未在配置的超时时间内做出响应。
MEDIA_FILE_UNAVAILABLE 无法访问 VAST 响应中指定的广告媒体文件。
SESSION_INITIALIZATION_FAILED 会 MediaTailor 话无法正确初始化,这通常是由于会话变量不正确所致。
EARLY_CUE_IN 由于提示信号较早,广告插播时间比预期的要早,导致广告无法完全插入。
NO_VARIANT_MATCH 广告素材没有与内容流的编码参数(比特率、分辨率、编解码器)相匹配的变体。
NO_MODEL_CREATIVE_MATCH 广告素材不符合当前播放配置的预期型号或格式要求。
REJECTED_REPLICA_VAST 由于副本或重复内容检测策略,VAST 响应被拒绝。
INVALID_VAST_WRAPPER_AD VAST 包装器广告包含无效或格式错误的包装元素,这些元素会阻碍广告成功插入。
IMPORT_ERROR 在广告导入过程中出现错误,导致无法处理广告进行插入。
IMPORT_IN_PROGRESS 广告导入流程目前正在进行中,尚未完成。

除了这些具体的跳过原因外,其他常见原因还包括:

  • 会话变量配置不正确

  • 广告决策服务器 (ADS) 连接问题

  • 相同广告内容 IDs 的广告素材不一致

  • 清单格式的玩家兼容性问题

  • 影响广告区段投放的 CDN 配置问题

故障排除步骤

请按照以下步骤诊断和解决跳过广告的问题:

  1. 确定具体的跳过原因

    使用 CloudWatch Logs Insights 在MediaTailor/AdDecisionServerInteractions日志组中查询跳过的广告:

    fields @timestamp, avail.availId, skippedAds.0.skippedReason, skippedAds.0.creativeUniqueId | filter eventType = "FILLED_AVAIL" and ispresent(skippedAds.0.skippedReason) | sort @timestamp desc

    此查询会返回最新的广告跳过事件及其具体原因,从而帮助您识别模式。

  2. 检查会话变量配置

    会话变量不正确是跳过广告的常见原因。验证:

    • 在您的 ADS 网址模板中正确配置了所有必需的会话变量

    • 动态变量的格式正确(有关正确的语法MediaTailor 动态广告变量,请参阅)

    • 玩家参数已正确传递给 MediaTailor

    使用会话变量正确配置的 ADS 网址示例:

    https://my-ads-server.com/ads? sessionId=[session.id]& playerParams=[player_params.param1]& deviceType=[player_params.device]& correlator=[session.avail_duration_ms]
  3. 解决 NEW_CREATIVE

    如果跳过广告NEW_CREATIVE的原因是:

    MediaTailor 根据三个关键因素对广告进行转码:广告素材 ID、AWS 账户 ID 和转码变体集(底层内容流的播放格式副本)。如果广告素材 ID 或转码变体集的任何部分不同,则会将广告 MediaTailor识别为需要转码的新变体。这包括四舍五入到最接近的 8,000 位时的比特率变化,当底层内容流更改主清单时,可能会发生这种变化。

    有关 NEW_CREATIVE 场景(包括比特率更改和素材 ID 冲突)的详细信息,请参阅此过程之后的详细的全新创意分析部分。

    1. 验证您的广告决策服务器是否 IDs 为相同的广告内容返回一致的广告素材

    2. 检查您的内容流是否保持一致的比特率和变体集

    3. 考虑实施广告预取,确保广告在播放前进行转码(请参阅)预取广告

    4. 对于持续存在的问题,请联系 AWS Suppor t 以获取更多故障排除帮助

  4. 解决 ADS 连接问题

    如果由于ADS_TIMEOUT或相关原因被跳过广告:

    • 确认您的广告决策服务器可通过以下网址访问 MediaTailor

    • 检查您的 ADS 是否在配置的超时时间内做出响应

    • 确保您的 ADS 能够在高峰时段处理请求量

    • 当你的主广告不可用时,可以考虑实施备用广告策略

  5. 解决 VAST 响应问题

    如果使用VAST_PARSING_ERRORMEDIA_FILE_UNAVAILABLE跳过广告:

    • 根据 VAST 规范验证您的 VAST 响应格式

    • 确保 VAST 响应 URLs 中的所有媒体文件均可公开访问

    • 检查 VAST XML 中特殊字符的编码是否正确

    • 确认您的 VAST 响应中包含与以下格式兼容的媒体文件 MediaTailor

  6. 解决持续时间不匹配问题

    如果使用AVAIL_DURATION_EXCEEDEDLEFTOVER_AVAIL_EXCEEDED_THRESHOLD跳过广告:

    • 确保您的广告返回的广告符合可用的广告时长

    • 检查内容中的广告插播标记是否正确地表明了预期的持续时间

    • 如果适合您的用例,请考虑调整个性化阈值

  7. 监控 CloudWatch 指标

    为关键 MediaTailor 指标设置 CloudWatch 警报,以主动检测跳过广告的问题:

    • AdDecisionServer.Ads.Skipped-跳过的广告数量

    • AdDecisionServer.Timeouts-ADS 超时次数

    • Avail.FilledDuration-已填充广告时段的持续时间

    • Avail.SlateOnly-仅使用标题填充的广告插播次数

    有关可用指标的更多信息,请参阅 AWS Elemental MediaTailor 使用 Amazon CloudWatch 指标进行监控

  8. 解决变体匹配和格式问题

    如果因与NO_VARIANT_MATCHNO_MODEL_CREATIVE_MATCHEARLY_CUE_IN、或格式相关的原因而被跳过广告:

    • NO_VARIANT_MATCH确保您的广告素材采用与内容流的编码参数(比特率、分辨率、编解码器)相匹配的变体。将您的广告服务器配置为以兼容格式提供广告。

    • NO_MODEL_CREATIVE_MATCH查看您的播放配置对广告素材模型的要求,并确保您的广告服务器提供的广告符合预期的格式和规格。

    • EARLY_CUE_IN: 请确认您的内容流的提示信号定时正确,并且广告插播时间是否足以进行广告插播。检查是否有过早的 EXT-X-CUE-IN标签或 SCTE-35 splice_insert 消息。

  9. 解决 VAST 包装器和导入问题

    如果使用REJECTED_REPLICA_VASTINVALID_VAST_WRAPPER_ADIMPORT_ERROR、或IMPORT_IN_PROGRESS:跳过广告

    • REJECTED_REPLICA_VAST检查您的广告服务器配置是否存在重复内容检测策略。确保 VAST 回复中包含独特的创意内容,并避免在同一个会话中投放相同的广告。

    • INVALID_VAST_WRAPPER_AD:根据 VAST 规范验证您的 VAST 包装器响应。确保所有包装器元素的格式正确且包含有效的 VASTAd tagUri。

    • IMPORT_ERRORIMPORT_IN_PROGRESS这表明广告导入流程存在问题。查看广告素材源文件,了解无障碍功能和格式兼容性。监控导入进度并重试失败的导入。

详细的全新创意分析

本节提供有关 NEW_CREATIVE 广告跳过场景的全面信息,包括根本原因和高级故障排除技术。

比特率变化场景

如果比特率在四舍五入到最接近的 8,000 位后不匹配,则比特率更改可能会导致 NEW_CREATIVE 跳过。这通常发生在以下情况下:

  • 底层内容流会更改主清单

  • 创建新会话时使用的变体与现有会话不同

  • 各个播放会话的内容流比特率不一致

创意 ID 冲突

当 MediaTailor 遇到已转码的媒体文件的不同广告素材 ID 时,会出现以下顺序:

  1. 该广告被跳过的原因是 NEW_CREATIVE

  2. 这会导致不必要的转码尝试

  3. 广告素材被标记为 DUPLICATE_TRANSCODE 或 COPY_DEDUP

注意

MediaTailor 不会过期,也不会删除转码后的广告。它们无限期地存储在 MediaTailor拥有的 S3 存储桶中。

ETAG 处理

ETAG 是与广告播放列表或清单的特定版本关联的唯一标识符。 MediaTailor 使用广告素材 ID 来识别广告素材,但如果广告素材 ID 随每次请求而发生变化,则广告可能会被标记为新广告素材,从而阻止插入。

警告

不保证广告素材ID是唯一的,这可能会导致展示不正确的广告。

时长格式问题

服务器端广告插入 (SSAI) 要求在清单文件中使用特定的时长参数格式。时长格式不正确可能会导致广告插入失败。

EXT-X-CUE-OUT 持续时间参数

EXT-X-CUE-OUT标签持续时间参数的格式必须为整数值,而不是 ISO 8601 持续时间格式。

时长格式要求
格式 示例 状态
整数(正确) 32 支持-代表 32 秒
十进制(正确) 30.000 支持-代表 30 秒
ISO 8601(不正确) PT32S 不支持-导致插入失败

正确的清单格式示例:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:10 #EXTINF:10.0, segment1.ts #EXT-X-CUE-OUT:30 #EXTINF:10.0, segment2.ts #EXT-X-CUE-IN #EXTINF:10.0, segment3.ts
重要

确保所有 EXT-X-CUE-OUT持续时间参数均使用整数格式,以防止出现广告插入问题。

验证广告标记格式

要验证您的广告标记格式并确定时长解析问题,请执行以下操作:

  1. AD_MARKER_FOUND事件下的 CloudWatch 日志中查看广告标记格式

  2. FILLED_AVAIL活动中寻找FORMAT_ERROR跳过的原因

  3. 验证内容清单中的时长值是否使用支持的格式

  4. 使用不同的持续时间格式进行测试以确定兼容性问题

VOD 直播优化

视频点播 (VOD) 流可以生成多个 ADS 请求,这可能会影响性能。 MediaTailor 提供了解决此行为的优化功能。

多个 ADS 请求问题

默认情况下,VOD 直播可能会在日志中生成多个 MAKING_ADS_REQUEST 事件。 MediaTailor 之所以出现这种情况,是因为 VOD 内容中的每个广告插播都会触发向广告决策服务器的单独的 ADS 请求。

要确定您的 VOD 直播是否生成了过多 ADS 请求,请使用以下 CloudWatch 日志见解查询:

fields @timestamp, sessionId, eventType, adBreakIndex | filter eventType = "MAKING_ADS_REQUEST" | stats count() by sessionId | sort count desc | limit 20

VOD 并行化功能

MediaTailor 提供并行化功能,用于优化 VOD 内容的 ADS 请求处理。可以使用播放配置中的maxConcurrentAdsRequests参数来配置此功能。

示例配置:

{ "Name": "OptimizedVODConfig", "VideoContentSourceUrl": "https://example.com/content/", "AdDecisionServerUrl": "https://example.com/ads", "maxConcurrentAdsRequests": 3 }

此配置限制了并发 ADS 请求的数量,从而减少了服务器负载并缩短了响应时间。

封装的 VAST 响应处理

并行化功能还优化了对封装的 VAST 响应的处理,这在程序化广告场景中很常见。封装的 VAST 响应包含多层 VAST 标签,需要解开这些标签才能到达实际的媒体文件。

会话变量故障排除

会话变量在广告定位和选择中起着至关重要的作用。会话变量配置不正确是导致广告跳过问题的常见原因。

常见的会话变量问题

会话变量的以下问题可能会导致广告被跳过:

  • 缺少必填变量:您的广告决策服务器可能需要未提供的特定变量

  • 变量语法不正确:变量必须使用正确的语法(例如,[session.id]而不是${session.id}

  • URL 编码问题:变量值中的特殊字符可能需要正确的 URL 编码

  • 玩家参数不一致:玩家参数必须始终如一地跨会话传递

  • 动态变量解析失败:无法解析的变量将被替换为空字符串

  • SCTE-35 UPID 解析问题:分段 UPID 处理问题可能会导致会话变量解析失败。

验证会话变量分辨率

要验证您的会话变量是否已正确解析,请执行以下操作:

  1. 为您的 MediaTailor 配置启用调试日志记录

  2. 检查MediaTailor/AdDecisionServerInteractions日志组中是否有实际的 ADS 请求 URLs

  3. 验证模板 URL 中的所有变量是否已替换为适当的值

  4. 查找任何被空字符串替换的变量,这可能表示解析失败

显示已解决的 ADS 请求网址的日志条目示例:

{ "eventType": "MAKING_ADS_REQUEST", "sessionId": "abcd1234-5678-efgh-9012-ijklmnopqrst", "requestUrl": "https://my-ads-server.com/ads?sessionId=abcd1234-5678-efgh-9012-ijklmnopqrst&playerParams=mobile&deviceType=android&correlator=30000", "timestamp": "2025-06-20T19:00:00Z" }

SCTE-35 UPID 解析和会话变量

SCTE-35 分段 UPID 处理问题可能会导致会话变量问题:

  • 格式要求:UPID 必须为 12 并包含segmentation_upid_type在内,format_identifier以便正确处理。

  • 解@@ 析规则:解码后的 UPID 可以包含多个值的冒号分隔符。模板变量和解码后的 UPID 标记的数量必须相等。

  • 无效格式:避免使用没有值的双冒号(例如:::46175218::4053),因为它们会导致解析失败。

  • 格式标识符处理: MediaTailor 假设前四个字节是 format_identifier。如果缺失,private_data 会截断前四个字节,这可能会导致 ADS 收到的值与预期的不同。

高级 CloudWatch 日志见解查询

使用以下专门的 CloudWatch Logs Insights 查询,详细解决广告插入问题:

寻找创意 IDs

要 IDs 从 ads_interaction_log 中的 FILLED_AVAIL 事件中识别创意,请执行以下操作:

fields @timestamp, sessionId, eventType | filter sessionId like /sessionId/ and eventType!='BEACON_FIRED' | sort @timestamp desc
注意

sessionId替换为您正在调查的实际会话 ID。

全面的会话分析

要详细分析特定会话的广告插入行为,请执行以下操作:

fields @timestamp, sessionId, eventType, creativeId, skipReason, adBreakIndex | filter sessionId = "your-session-id-here" | filter eventType in ["FILLED_AVAIL", "SKIPPED_AVAIL", "MAKING_ADS_REQUEST"] | sort @timestamp asc | limit 100

新增创意跳过分析

要分析 NEW_CREATIVE 广告跳过中的模式,请执行以下操作:

fields @timestamp, sessionId, creativeId, skipReason, MediaFileSourceUrl | filter skipReason = "NEW_CREATIVE" | stats count() by creativeId, MediaFileSourceUrl | sort count desc | limit 50

防止跳过广告的最佳做法

实施以下最佳实践,最大限度地减少广告跳过的问题:

  • 实现广告预取:使用 MediaTailor预取功能可确保在播放之前对广告进行转码。有关实现预取广告的详细信息,请参阅。

  • 保持一致的广告创意 IDs:确保您的广告决策服务器在不同会话中 IDs 对相同的广告内容使用一致的广告素材。

  • 确保持续时间格式正确:使用整数值作为 EXT-X-CUE-OUT持续时间参数,而不是 ISO 8601 格式。

  • 配置 VOD 优化:为带有多个广告时段的 VOD 直播设置 maxConcurrentAds请求,以减少服务器负载。

  • 监控转码模式:监控 CloudWatch日志以提高转码效率,如果您发现存在转码问题的模式,请联系 AWS Support。

  • 验证 ETAG 一致性:确保媒体文件 URIs 对相同内容保持一致,以防止不必要的重新转码。

  • 实施系统的故障排除:遵循结构化方法:确定跳过原因、分析根本原因、实施解决方案并验证修复程序。

  • 优化 ADS 效果:将您的广告决策服务器配置为快速响应并处理峰值流量。

  • 实施正确的错误处理:配置 slate 内容以在无法插入广告时填充广告插播时间。

  • 监控广告插入指标:设置 CloudWatch警报,尽早发现跳过广告的问题。

  • 全面测试:在不同的设备和网络条件下验证您的广告插入工作流程。

  • 实施后备策略:配置备用广告来源或默认广告,以备主广告来源失败时使用。

有关解决跳过广告问题的更多信息,请参阅以下相关主题: