插入廣告,並提供廣告插播時間中繼資料

本指南說明如何使用廣告連播時間中繼資料 (ATM) 方法插入廣告插播,以擷取廣告插播的精確時間和長度,包括片頭廣告。

如要插入片頭廣告,並在片中廣告插播後管理內容的返回作業,建議呼叫下列 API:

如果直播活動的並行數很高,建議您呼叫 Early Ad Break Notification (EABN) API,在廣告插播開始前排定廣告決策。

必要條件

如要開始使用,您需要為廣告連播放送重新導向動態廣告插播 (DAI) 類型設定直播活動。選擇下列其中一種方法:

擷取內容串流

使用者選取直播活動時,用戶端應用程式會向 Google Ad Manager 發出串流請求。在串流回應中,應用程式會擷取 Google DAI 工作階段 ID 和中繼資料,並納入串流資訊清單要求。

以下範例會將 Google DAI 會期 ID 傳遞至資訊清單操控器:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

處理影片內容播放要求時,請儲存要求中的 Google DAI 工作階段 ID 和 CUSTOM_ASSET_KEY,以便準備縫合廣告。

擷取廣告連播時間中繼資料

如要擷取廣告連播時間碼,請按照下列步驟操作:

  1. 產生 HMAC 權杖
  2. 使用 HMAC 權杖呼叫 ATM API。

片頭廣告的要求時間中繼資料

使用下列選項,驗證直播活動的片頭廣告設定:

如要擷取片頭廣告決策結果,請向 ATM API 提出要求。

以下範例會對片頭廣告提出 ATM 要求:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"

要求片中廣告的時間中繼資料

如要擷取中途廣告連播的廣告連播中繼資料,請按照下列步驟操作:

  1. 剖析直播資訊清單,找出含有各片中廣告插播時間點時間和長度的廣告標記。
  2. 呼叫 ATM API 端點,要求精確的廣告連播和字卡時間長度。API 會傳回 JSON 物件,其中包含廣告插播的決策結果。

以下範例會對片中廣告提出 ATM 要求:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"

如果成功,您會看到類似下列 JSON 物件的輸出內容:

{
  "status": "final",
  "ads": [
    {
      "duration_ms": 5046,
      "variants": {
        "devrel1428000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        },
        "devrel1928000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        }
      }
    }
  ],
  "slate": {
    "duration_ms": 0,
    "variants": {
      "devrel1428000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      },
      "devrel1928000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      }
    }
  }
}

將廣告縫合到內容資訊清單中

以下各節會逐步引導您瞭解如何修改直播資訊清單,以及新增廣告片段。

找出廣告插播片段並插入不連續點

處理每個變體資訊清單時,請找出串流中的 EXT-X-CUE-INEXT-X-CUE-OUT 標記,指出廣告插播的開始和結束時間。

EXT-X-CUE-INEXT-X-CUE-OUT 標記替換為 EXT-X-DISCONTINUITY 元素,讓用戶端影片播放器在內容和廣告之間切換。

下列資訊清單範例會取代 EXT-X-CUE-INEXT-X-CUE-OUT 標記:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

以下範例顯示已取代的資訊清單:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Google DAI 廣告片段不會加密。如果內容經過加密,請在每個廣告插播的第一個廣告片段前插入 EXT-X-KEY:METHOD=NONE 元素,移除加密。在廣告插播結束時,插入適當的 EXT-X-KEY,重新加入加密。

追蹤即將放送的廣告插播的開始時間、時間長度和索引。

建立廣告區隔網址

EXT-X-DISCONTINUITY 標記之間的內容區隔,替換為各個廣告區隔的網址。如要判斷要插入多少廣告片段,請使用 ATM API 的 JSON 回應中提供的 ads.segment_durations.values

如要在偵測到 EXT-X-CUE-IN 代碼時提早結束廣告連播,請將 d= 參數加到最終廣告片段的網址。這個參數會縮短片段,避免影響用戶端影片播放器的時間軸。

以下範例會將片頭廣告片段網址組裝至資訊清單。請注意,廣告片段使用以零為基礎的索引:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

以下範例會將片中廣告片段網址組裝至資訊清單:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

以下範例會在資訊清單中插入廣告片段:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4

建立插入畫面片段

如要填補廣告和內容之間的空白,請插入字卡片段。 使用 ATM API 的 JSON 回應中的 slates.segment_durations.values 陣列,判斷每個字卡片段的持續時間。視需要循環播放片段時間長度序列,填滿整個廣告插播時間。

以下範例會組裝字卡區隔:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

範例中的 slate/0 代表字卡疊代編號。請參閱用戶端影片播放器的相容性和快取功能,判斷是否要從 0 開始,並在每個字卡迴圈中遞增這個數字,或是將所有疊代都設為 0

管理返回內容的動作

插入廣告連播中的所有片段後,請選擇下列其中一種方法,返回內容串流:

方法 說明 對用戶端影片播放器的影響
填入字卡片段 插入字卡片段並循環播放字卡。填入時間長度,並在每次字卡疊代之間插入 EXT-X-DISCONTINUITY 元素。 無效果。
影片播放器會返回內容,時間軸不會改變。
使用單一字卡區隔重新對齊 插入單一字卡片段。使用 d= 參數填入內容開始前的時間長度。 無效果。
影片播放器會返回內容,時間軸不會改變。
立即退貨 插入內容片段。 影片播放器的時間軸已變更。
用戶端影片播放器必須處理變更後的時間軸。

選用:排定廣告插播時間

如要提高供應率,請傳送 Early Ad Break Notification (EABN),並提供廣告連播時間長度、自訂指定目標參數和 SCTE-35 信號資料。詳情請參閱「提早傳送廣告插播通知」。