View a markdown version of this page

伺服器端廣告插入 (SSAI) - Amazon IVS

伺服器端廣告插入 (SSAI)

Amazon IVS 伺服器端廣告插入 (SSAI) 讓您能透過影片廣告使串流獲利。IVS SSAI 與 AWS Elemental MediaTailor 整合,可讓您存取各種功能,例如廣告決策、受眾鎖定和個人化等。IVS 提供一項 API 操作,可在即時串流中插入廣告休息時間,讓創作者或電信業者能夠控制何時播放廣告。IVS 將廣告直接拼接到影片串流。這可提供順暢的觀賞體驗,並避免複雜的用戶端邏輯。如需 SSAI 相關成本的資訊,請參閱 IVS 成本

IVS 入門

本教學課程可協助您開始使用 Amazon IVS 伺服器端廣告插入 (SSAI)。在本教學課程結束時,您將有一個針對伺服器端廣告插入而設定的 IVS 頻道,而且您將了解如何在即時串流中插入廣告休息時間。IVS SSAI 與 AWS Elemental MediaTailor 整合,用於處理廣告決策。

步驟 1:建立一個 IVS 頻道。

建立一個 IVS 頻道。您需要頻道的播放 URL,才能在下一個步驟中設定 MediaTailor。建立頻道後,請儲存下列值:

  • 頻道 ARN — 您需要此項目,稍後才能更新頻道。

  • 播放 URL 前綴 — 從播放 URL 擷取 URL 前綴 (/api/ 之前的部分)。例如,假設您的播放 URL 是:

    • https://c17b3fb37fc9.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.ABcdef12ghIJ.m3u8

    前綴指的是:

    • https://c17b3fb37fc9.us-west-2.playback.live-video.net/

  • 容器格式 — 必須設定為 MPEG 傳輸串流 (TS)。

步驟 2:建立 MediaTailor 播放組態

建立 AWS Elemental MediaTailor 播放組態。此組態會將您的廣告決策伺服器連線至 IVS,並為您的串流啟用廣告插入。

播放組態使用播放 URL 前綴,此前綴在您的帳戶和區域中的所有 IVS 頻道都是通用的。這表示您可以使用單一 MediaTailor 播放組態搭配多個 IVS 頻道。

如需說明,請參閱 AWS Elemental MediaTailor 使用者指南 中的建立 MediaTailor 播放組態。建立組態時,IVS SSAI 需要下列設定:

設定 Location Value
廣告決策伺服器 URL 必要的設定 廣告決策伺服器的 URL
內容來源 必要的設定 IVS 播放 URL 的 URL 前綴;例如 https://c17b3fb37fc9.us-west-2.playback.live-video.net/
插入模式 個人化詳細資料 PLAYER_SELECT
重要

僅使用頻道播放 URL 的前綴 (以 live-video.net/ 結尾) 指定內容來源,而非完整 URL。如果格式不正確,則在下一個步驟中建立廣告組態會失敗並出現驗證錯誤。

步驟 3:建立 IVS 廣告組態

廣告組態會將您的 IVS 資源連結至 MediaTailor 播放組態。您可以使用在任何 IVS 主區域中建立的 MediaTailor 播放組態,搭配其他任何 IVS 主區域中的廣告組態。IVS 主區域包括 us-west-2us-east-1eu-west-1eu-central-1ap-northeast-1ap-northeast-2ap-south-1

您可以跨多個頻道重複使用單一廣告組態。

若要建立廣告組態 (AWS CLI):

aws ivs create-ad-configuration --name "my-ad-config" --media-tailor-playback-configurations playbackConfigurationArn="arn:aws:mediatailor:us-west-2:123456789012:playbackConfiguration/my-mediatailor-config"

儲存來自回應的 ARN 值。下一個步驟需要此值。

步驟 4:使用廣告組態更新頻道

更新您的 IVS 頻道,使其與您建立的廣告組態建立關聯。若要更新頻道 (AWS CLI):

aws ivs update-channel --arn "arn:aws:ivs:us-west-2:123456789012:channel/ABcdef12ghIJ" --ad-configuration-arn "arn:aws:ivs:us-west-2:123456789012:ad-configuration/ABcdef12ghIJ"

步驟 5:開始串流

使用您頻道的擷取端點和串流金鑰,開始串流。

步驟 6:插入廣告休息時間

當您進行即時串流時,請呼叫 InsertAdBreak 操作來插入廣告休息時間。指定頻道 ARN 和廣告休息時間的持續時間 (以秒為單位)。

若要插入廣告休息時間 (AWS CLI):

aws ivs insert-ad-break --channel-arn "arn:aws:ivs:us-west-2:123456789012:channel/ABcdef12ghIJ" --duration-seconds 30

成功傳回 InsertAdBreak 後,您可以收到 EventBridge 事件 (IVS 廣告休息時間狀態變更),其中包含時間戳記,指出將在觀眾播放清單插入廣告休息時間的預期時間。這是廣播者可合理預期廣告開始取代內容的時間。如果無法填充廣告 (例如,假設您的廣告決策伺服器未傳回廣告或廣告需要由 MediaTailor 轉碼),則會改為顯示來源內容。

重要

現有的廣告休息時間仍在進行中時,您無法插入額外的廣告休息時間。後續呼叫 InsertAdBreak 會傳回 409 ConflictException 直到目前的廣告休息時間結束為止。

EventBridge 整合

使用 SSAI 時會新增 IVS 廣告休息時間狀態變更事件 (稱為已插入廣告休息時間),其中包含下列欄位:

欄位 說明
event_name 發出的事件名稱。
channel_name InsertAdBreak API 請求所觸發的頻道名稱。
stream_id InsertAdBreak API 請求所觸發頻道的即時串流 ID。
ad_break_id 與廣告休息時間建立關聯的唯一 ID,對應初始 InsertAdBreak 請求回應中的廣告休息時間 ID。
duration_seconds InsertAdBreak 請求中包含的客戶指定值,以秒為單位。
target_start_time 廣告休息時間插入播放清單時,即時串流的預估時間戳記。

步驟 7:播放器 SDK 事件

在各個平台上,播放器 SDK 會在播放廣告休息時間時顯示事件,並在廣告開始、進行和停止時發出通知。以下是可用事件和時間的高階摘要:

事件 承載 觸發條件
廣告休息時間已開始 AdBreak 廣告休息時間的第一個區段
廣告創意已開始 AdCreative 每個創意的第一個區段
廣告時間更新 AdTimeUpdate 廣告播放期間每秒
廣告創意已結束 AdCreative 每個創意的最後一個區段
廣告休息時間已結束 AdBreak 休息時間後的第一個內容區段

如需每個平台的特定事件和承載名稱,請參閱播放器 SDK 文件:

下方範例是在廣告休息時間內,使用 Web SDK 中的廣告事件,建立簡單廣告倒數 UI 元件:

// State let podLength = 0; let podIndex = 0; let remainingSeconds = 0; // Fired every second during the ad break player.addEventListener(PlayerEventType.AD_TIME_UPDATE, (payload) => { podLength = payload.podLength; podIndex = payload.podIndex; remainingSeconds = Math.round(payload.creativeDuration - payload.creativeElapsed); const text = `Ad ${podIndex} of ${podLength} · ${remainingSeconds}s remaining` // Ad 1 of 2 · 20s remaining console.log('Ad countdown text', text); UpdateAdOverlay(text); }); // Fired when the ad break ends player.addEventListener(PlayerEventType.AD_BREAK_ENDED, (payload) => { hideAdOverlay(); });

錄製內容中的廣告標記

當即時串流使用自動錄製方式記錄到 Amazon S3 時,IVS 會在即時串流期間觸發廣告的位置產生 VOD 播放清單並將其寫入 S3,該清單會包含 SCTE-35 廣告標記。如需詳細資訊,請參閱 SSAI 播放清單參考

觀眾體驗

根據預設,MediaTailor 會在您插入廣告休息時間時填入廣告並提供給所有觀眾。如果您為串流使用播放授權字符,您可以將 "aws:ads-opt-out": true 宣告新增至您的播放授權 JWT 字符並藉此選擇讓觀眾不接收廣告。

當觀眾在廣告休息時間中途開始觀看串流時,IVS 會將廣告休息時間長度向上取到最接近的四分位數。例如,在 60 秒廣告休息時間還剩 35 秒時加入的觀眾,將會經歷 45 秒的廣告休息時間。

更新 MediaTailor 播放組態或新增廣告時,觀眾可能不會在您第一次請求廣告休息時間看到廣告,因為 MediaTailor 必須先將廣告轉碼。幾分鐘後,對 InsertAdBreak 的後續呼叫會讓瀏覽者看到廣告。MediaTailor 的轉碼日誌會記錄這些轉碼。

觀眾追蹤參數

在 Elemental MediaTailor PlaybackConfiguration 中設定廣告決策伺服器 (ADS) 時,您可以使用範本將參數傳遞至 ADS (請參閱 MediaTailor 將參數傳遞至 ADS)。透過 IVS SSAI,您可以使用該名使用者的播放授權字符來傳遞每位觀眾的參數,方法是使用下列格式新增宣告:

"aws:ads-player-params": { "key1": "value1", "key2": "value2" }

這些參數會傳遞至 Elemental MediaTailor 並作為 [player_params.key1][player_params.key2] 範本變數填入。您在此清單中放置的索引鍵一律會當作 player_params 範本參數加入命名空間。

所有索引鍵和值合併的總承載大小限制為 1000 個位元組。

報告模式

當觀眾觀看廣告時,用戶端或伺服器可以傳送信標,指出每個廣告創意的播放進度。根據預設,MediaTailor 會在伺服器端處理信標。您可以將下列宣告新增至播放授權字符,藉此控制報告模式:

"aws:ads-reporting-mode": "CLIENT" | "SERVER"

預設值為 SERVER。設定為 SERVER 時,MediaTailor 會在伺服器端傳送信標。設為 CLIENT 時,伺服器端信標會停用,並在 IVS 播放器 SDK adBreakStarted 事件的 metadata.trackingData 欄位中提供追蹤資料。IVS 播放器 SDK 不會呼叫信標 URL。

已知問題

  • 如果 IVS 頻道 containerFormat 設定為 FRAGMENTED_MP4,則 IVS 廣告無法運作。如果搭配使用 FMP4 容器格式與廣告組態,呼叫 UpdateChannel 和 CreateChannel 會傳回驗證錯誤。

  • 廣告播放期間,在適應性位元速率模式和手動品質選取之間切換,可能會導致播放器發生凍結和緩衝問題。

  • 對於長度超過 12 小時的串流,程式日期時間可能會偏離,導致觀眾無法收到廣告。解決方法是讓廣播者重新啟動串流。

SSAI 播放清單參考

使用 SSAI 的即時變體播放清單

當廣告拼接至串流時,IVS 會在廣告區段之前插入下方記錄的標籤。

1. 已拼接的廣告宣告

#EXT-X-DATERANGE:ID="stitched-ad-1765566299-20000000000",CLASS="live-video-net-stitched-ad",START-DATE="2025-12-12T19:04:59.079Z",DURATION=20.000,X-NET-LIVE-VIDEO-AD-AD-BREAK-ID="test"
屬性 說明
ID

格式:stitched-ad-{timestamp}-{duration}

{timestamp}:廣告開始的 Unix 時間戳記

{duration}: 廣告持續時間的整數,以奈秒為單位

類型:字串陣列

CLASS 對於 SSAI 廣告一律為 live-video-net-stitched-ad
START-DATE 廣告開始時的 ISO 8601 程式日期/時間。
DURATION 廣告長度,以秒為單位。
X-NET-LIVE-VIDEO-AD-AD-BREAK-ID IVS 在呼叫 InsertAdBreak 操作時傳回的廣告休息時間 ID。

2. 串流來源變更

#EXT-X-DATERANGE:ID="source-1765566299",CLASS="live-video-net-stream-source",START-DATE="2025-12-12T19:04:59.079Z",END-ON-NEXT=YES,X-NET-LIVE-VIDEO-STREAM-SOURCE="0f262e65-a709-4ef1-8741-e82d936c"
屬性 說明
CLASS 一律為 live-video-net-stream-source
START-DATE / END-ON-NEXT 此來源範圍的時間中繼資料。
X-NET-LIVE-VIDEO-STREAM-SOURCE 影片來源正在變更的播放器提示。值為主要內容的即時值,或廣告內容的唯一 ID。

3. 不連續性標記

#EXT-X-DISCONTINUITY

標準 HLS 標籤表示編碼參數可能會在即時串流和廣告內容之間變更。

廣告區段

#EXT-X-PROGRAM-DATE-TIME:2025-12-12T19:04:59.079Z #EXTINF:2.000,0f262e65-a709-4ef1-8741-e82d936c https://4ce388b1cf28.j.cloudfront.hls.live-video.net/v1/segment/CvsCse8Qbs5DU_aRmrVLd72_nK9lo9xS1KjD115LsIXcsD27JfLfkSuamLUivqOTrfHUeGf6Zmx_c9rhq0btTOu7E4F1DaU8knNoebLq6FlKp6q8ysaQdEA10gKCNP92oAQ_0DGLInY462O9HUxgtk5KHj23ZjPhVCxIh3DjWqwaevDci1_q7dYL55rgSKd11SfpsGSS9Yup4g5dfzyGhfz6Y2Skaj34JtoVyd8Nxlppc4jDlZl-6j7YM1i2qdUcM3VNWrZrxCisBXgOPtI3vFdeNcNjPzVdOGjMz5cXcQIp8YOCwnkdkomhn_3xxmB1Zngl3QPao6-oPsjH3qVcMOCuKfKZSmRJGFLvkrO1PefV5ya3eUvihXCMvDE-81EmGp5q9ErEgFpz06rMDbYFWb3z9H8X0t8KzvGDOaqKTYHZ0lgEV-fULeDQ76pDy_OVPwhO2vJMxBpfdQ_IeB1QUK2wJmXJ96Mvv0C2dcb0F7zE3lr_iBGemUjwmb7JmBoM3HdJbpV0TGp8C6vhIAEqCXVzLXdlc3QtMjD3DQ.ts?dna=CmanuVzG9F6kGS2X7ThbGZyZPHWgX2TiBlBMYsvGWLcWaLWyntTaWRp5D9qjZsrGKkzdwoLNY4pri6ZgpxnzqLqWvhcP6zoGu8vifP5NxPgiNKMmYdUmQrqTAf7jbauvE3c6B9ebptAaDEkrbrnG1qF8Cv3kbiABKgl1cy13ZXN0LTIw9w0
屬性 說明
EXT-X-PROGRAM-DATE-TIME 此區段的時間戳記。
EXTINF

格式:{duration},{tag}

{duration}:以秒為單位的區段長度。

{tag}:來源識別符。對於即時內容一律為 live。對於廣告內容,這是 MediaTailor 提供的 UUID,用於唯一識別廣告資產轉碼

區段 URL IVS 託管端點包含有關區段及其在 IVS 快取中位置的加密資訊。

使用 SSAI 的 VOD 變體播放清單

錄製即時串流時,IVS 會在即時串流期間觸發廣告的位置產生 VOD 播放清單並將其寫入 S3,該清單會包含 SCTE-35 廣告標記。若要在 VOD 播放期間提供廣告,您可以透過 MediaTailor 提供此 IVS 播放清單,其負責將廣告區段拼接到播放清單中。MediaTailor 會將廣告休息時間期間的原始 VOD 區段取代為廣告區段。

1. 廣告休息時間開始標記 (SCTE35-OUT)

#EXT-X-DATERANGE:ID="12345678",START-DATE="2025-12-06T00:45:45.723Z",PLANNED-DURATION=20.0,SCTE35-OUT=0xFC302000000000000000FFF00F05F8E7AEFC7FFFFE001B7740000000000000340CFD88
屬性 說明
ID 此廣告休息時間的唯一識別符。用於關聯開始和結束標記。
START-DATE 廣告休息時間開始時的 ISO 8601 程式日期/時間。
PLANNED-DURATION 廣告休息時間的預期持續時間,以秒為單位。
SCTE35-OUT 發出廣告休息時間開始訊號的 SCTE-35 標記。

2. 廣告區段 (MediaTailor 拼接)

#EXTINF:2.0, ../../../../segment/b2857627df9428679e888ee8daa979d0b7559801/gk-test-ivs-vod/bd0c7d90-a47c-4a91-b5ec-7d0f9897049b/0/3
屬性 說明
EXTINF 每個片段的持續時間 (以秒為單位)。
Segment URL MediaTailor 託管廣告區段的相對路徑。

3. 廣告休息時間結束標記 (SCTE35-IN)

#EXT-X-DATERANGE:ID="12345678",START-DATE="2025-12-06T00:45:45.723Z",END-DATE="2025-12-06T00:46:07.889Z",DURATION=20.0,SCTE35-IN=0xFC302000000000000000FFF00F05F8E7AEFC7F7FFE001B7740000000000000C23E5851
屬性 說明
ID 與開始標記相同的 ID。將兩者連結在一起。
START-DATE 廣告休息時間的原始開始時間 (與開始標記相同)。
END-DATE 廣告休息時間結束時的 ISO 8601 時間戳記。
DURATION 廣告休息時間的實際持續時間,以秒為單位。
SCTE35-IN 發出廣告休息時間結束訊號的 SCTE-35 標記。