แทรกโฆษณาด้วยข้อมูลเมตาเกี่ยวกับเวลาของพ็อดโฆษณา

คู่มือนี้อธิบายวิธีแทรกช่วงพักโฆษณาโดยใช้วิธีข้อมูลเมตาการกำหนดเวลาพ็อดโฆษณา (ATM) เพื่อดึงข้อมูลเวลาและระยะเวลาที่แน่นอนสำหรับช่วงพักโฆษณา รวมถึงโฆษณาก่อนวิดีโอ

หากต้องการแทรกโฆษณาตอนต้นและจัดการการกลับไปที่เนื้อหาหลังจากช่วงพักโฆษณาตอนกลาง เราขอแนะนำให้เรียกใช้ API ต่อไปนี้

ไม่บังคับ สำหรับกิจกรรมไลฟ์สดที่มีการเข้าชมพร้อมกันสูง เราขอแนะนำให้เรียกใช้ Early Ad Break Notification (EABN) API เพื่อกำหนดเวลาการตัดสินใจเกี่ยวกับโฆษณาก่อนที่ช่วงพักโฆษณาจะเริ่ม

ข้อกำหนดเบื้องต้น

หากต้องการเริ่มต้นใช้งาน คุณต้องตั้งค่าเหตุการณ์ไลฟ์สดสำหรับประเภทการแทรกโฆษณาแบบไดนามิก (DAI) ของการแสดงพ็อด การเปลี่ยนเส้นทาง เลือกจากวิธีใดต่อไปนี้

เรียกข้อมูลสตรีมเนื้อหา

เมื่อผู้ใช้เลือกกิจกรรมไลฟ์สด แอปไคลเอ็นต์จะส่งคำขอสตรีม ไปยัง Google Ad Manager ในการตอบกลับสตรีม แอปจะดึง รหัสเซสชัน DAI ของ Google และข้อมูลเมตาเพื่อรวมไว้ในคำขอไฟล์ Manifest ของสตรีม

ตัวอย่างต่อไปนี้จะส่งรหัสเซสชัน DAI ของ Google ไปยังเครื่องมือจัดการไฟล์ Manifest

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

เมื่อประมวลผลคำขอเล่นเนื้อหาวิดีโอ ให้จัดเก็บรหัสเซสชัน Google DAI และ CUSTOM_ASSET_KEY จากคำขอเพื่อเตรียมพร้อมสำหรับ การต่อโฆษณา

ดึงข้อมูลเมตาเวลาของพ็อดโฆษณา

หากต้องการดึงข้อมูลเวลาของพ็อดโฆษณา ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างโทเค็น HMAC
  2. เรียกใช้ ATM API ด้วยโทเค็น HMAC

ขอข้อมูลเมตาเกี่ยวกับเวลาของโฆษณาตอนต้น

ยืนยันการตั้งค่าโฆษณาตอนต้นสำหรับกิจกรรมไลฟ์สดโดยใช้ตัวเลือกต่อไปนี้

หากต้องการดึงผลการตัดสินโฆษณาตอนต้น ให้ส่งคำขอไปยัง 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. แยกวิเคราะห์ไฟล์ Manifest ของไลฟ์สดเพื่อค้นหาเครื่องหมายโฆษณาที่มีเวลา และระยะเวลาของช่วงพักโฆษณาตอนกลางแต่ละช่วง
  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
          ]
        }
      }
    }
  }
}

แทรกโฆษณาลงในไฟล์ Manifest ของเนื้อหา

ส่วนต่อไปนี้จะอธิบายวิธีแก้ไขไฟล์ Manifest ของไลฟ์สด และเพิ่มกลุ่มโฆษณา

ระบุช่วงพักโฆษณาและแทรกความไม่ต่อเนื่อง

ขณะประมวลผลไฟล์ Manifest ของแต่ละเวอร์ชัน ให้ระบุแท็ก EXT-X-CUE-IN และ EXT-X-CUE-OUT ในสตรีม ซึ่งระบุจุดเริ่มต้นและจุดสิ้นสุดของช่วงพักโฆษณา

แทนที่แท็ก EXT-X-CUE-IN และ EXT-X-CUE-OUT ด้วยองค์ประกอบ EXT-X-DISCONTINUITY เพื่อให้วิดีโอเพลเยอร์ของไคลเอ็นต์สลับระหว่างเนื้อหากับโฆษณาได้

ไฟล์ Manifest ตัวอย่างต่อไปนี้จะแทนที่แท็ก EXT-X-CUE-IN และ EXT-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:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

ตัวอย่างต่อไปนี้แสดงไฟล์ Manifest ที่แทนที่

#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/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

กลุ่มโฆษณา DAI ของ Google ไม่ได้เข้ารหัส หากเนื้อหาของคุณได้รับการเข้ารหัส ให้นำการเข้ารหัสออกโดยแทรกองค์ประกอบ EXT-X-KEY:METHOD=NONE ก่อนช่วงโฆษณาแรกของช่วงพักโฆษณาแต่ละช่วง เมื่อช่วงพักโฆษณาสิ้นสุดลง ให้เพิ่มการเข้ารหัสอีกครั้งโดย แทรก EXT-X-KEY ที่เหมาะสม

ติดตามเวลาเริ่มต้น ระยะเวลา และดัชนีของช่วงพักโฆษณาที่กำลังจะมาถึง

สร้าง URL ของกลุ่มโฆษณา

แทนที่กลุ่มเนื้อหาระหว่างแท็ก EXT-X-DISCONTINUITY ด้วย URL สำหรับกลุ่มโฆษณาแต่ละกลุ่ม หากต้องการกำหนดจำนวนกลุ่มโฆษณาที่จะแทรก ให้ใช้ ads.segment_durations.valuesที่ระบุในการตอบกลับ JSON จาก ATM API

หากต้องการกลับไปที่เนื้อหาก่อนที่พ็อดโฆษณาจะสิ้นสุด เช่น เมื่อตรวจพบแท็ก EXT-X-CUE-IN ตัวจัดการไฟล์ Manifest ต้องเพิ่มพารามิเตอร์ d= ลงใน URL ของกลุ่มโฆษณาสุดท้าย พารามิเตอร์นี้จะย่อส่วนเพื่อไม่ให้ส่งผลต่อไทม์ไลน์ของวิดีโอเพลเยอร์ฝั่งไคลเอ็นต์

ตัวอย่างต่อไปนี้จะประกอบ URL ของกลุ่มโฆษณาตอนต้นลงในไฟล์ Manifest โปรดทราบ ว่ากลุ่มโฆษณาใช้ดัชนีที่อิงตาม 0

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

ตัวอย่างต่อไปนี้จะประกอบ URL ของกลุ่มโฆษณาตอนกลางลงในไฟล์ Manifest

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

ตัวอย่างต่อไปนี้จะแทรกกลุ่มโฆษณาลงในไฟล์ Manifest

#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXTINF:2.450,
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/3.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

สร้างกลุ่มสเลท

หากต้องการเติมช่องว่างระหว่างโฆษณาและเนื้อหา ให้แทรกกลุ่มแถบสเลท ใช้อาร์เรย์ slates.segment_durations.values จากการตอบกลับ JSON ของ ATM API เพื่อกำหนดระยะเวลาของแต่ละกลุ่มสเลต วนซ้ำลำดับระยะเวลาของกลุ่ม ตามที่ต้องการเพื่อเติมเต็มช่วงพักโฆษณาทั้งหมด

หากต้องการกลับไปยังเนื้อหาก่อนที่พ็อดโฆษณาจะสิ้นสุด เช่น เมื่อตรวจพบแท็ก EXT-X-CUE-IN ให้เพิ่มพารามิเตอร์ d= ลงใน URL ของสเลตสุดท้าย พารามิเตอร์นี้จะย่อส่วนเพื่อไม่ให้ส่งผลต่อไทม์ไลน์ของวิดีโอเพลเยอร์ฝั่งไคลเอ็นต์ ค่าสำหรับพารามิเตอร์ d= ต้องเป็นจำนวนเต็ม ซึ่งแสดงถึงระยะเวลาเป็นมิลลิวินาทีในการตัดต่อส่วน

ตัวอย่างต่อไปนี้จะประกอบกลุ่มสเลต

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 สำหรับการวนซ้ำทั้งหมด

จัดการการกลับไปที่เนื้อหา

หลังจากที่ตัวจัดการไฟล์ Manifest แทรกกลุ่มทั้งหมดจากพ็อดโฆษณาแล้ว ตัวจัดการไฟล์ Manifest จะต้องเปลี่ยนกลับไปที่สตรีมเนื้อหา หากต้องการกลับไปที่สตรีมเนื้อหา ให้เลือกวิธีใดวิธีหนึ่งต่อไปนี้ แต่ละวิธี ต้องมีกลุ่มการปรับแนวสุดท้ายเพื่อให้ไทม์ไลน์ของสตรีมถูกต้อง

เติมและจัดแนวใหม่: ใส่ส่วนสเลทและวนสเลท กรอกระยะเวลาและแทรกองค์ประกอบ EXT-X-DISCONTINUITY ระหว่างการทำซ้ำแต่ละสเลต สำหรับกลุ่มสุดท้าย ให้ผนวกพารามิเตอร์ d= เป็นมิลลิวินาที เพื่อให้ตรงกับจุดเริ่มต้นของเนื้อหา

การกลับมาทันที: แทรกส่วนสเลทการปรับแนวใหม่รายการเดียวโดยใช้พารามิเตอร์ d= แล้วตามด้วยเนื้อหา

โปรแกรมเล่นวิดีโอจะเปลี่ยนกลับไปเป็นเนื้อหาโดยไม่มีไทม์ไลน์ที่เปลี่ยนแปลง

ตัวอย่างต่อไปนี้สร้างทรานซิชันโดยการใส่ส่วนที่เหลือของระยะเวลาของช่วงพักโฆษณาด้วยกลุ่มแถบสเลท

#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
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/1.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

ในวิธีนี้ ตัวจัดการไฟล์ Manifest จะวนซ้ำสเลตตามที่จำเป็นและต่อท้ายd=พารามิเตอร์ URL เท่านั้น ไปยังกลุ่มสเลตสุดท้าย กระบวนการนี้สอดคล้องกับการเริ่มต้นเนื้อหาพื้นฐานตามกำหนดเวลาอย่างแม่นยำ

ตัวอย่างต่อไปนี้แสดงวิธีใช้กลุ่มสเลตเดียวกับพารามิเตอร์ d= เพื่อช่วยให้ไทม์ไลน์ของเพลเยอร์ถูกต้องเมื่อคุณไม่ได้ ใส่สเลตแบบวนซ้ำในช่วงพักที่เหลือทั้งหมด

#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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:2.450,
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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

ไม่บังคับ: กำหนดเวลาช่วงพักโฆษณา

หากต้องการเพิ่มอัตราการส่งโฆษณา ให้ส่งการแจ้งเตือนช่วงพักโฆษณาล่วงหน้า (EABN) พร้อมระยะเวลาพ็อดโฆษณา พารามิเตอร์การกำหนดเป้าหมายเอง และข้อมูลสัญญาณ SCTE-35 ดูรายละเอียดเพิ่มเติมได้ที่ส่งการแจ้งเตือน ช่วงพักโฆษณาเร็วขึ้น