คู่มือนี้อธิบายวิธีแทรกช่วงพักโฆษณาโดยใช้วิธีข้อมูลเมตาการกำหนดเวลาของพ็อดโฆษณา (ATM) เพื่อดึงข้อมูลเวลาและระยะเวลาที่แน่นอนสำหรับช่วงพักโฆษณา รวมถึงโฆษณาตอนต้น
หากต้องการแทรกโฆษณาตอนต้นและจัดการการกลับไปแสดงเนื้อหาหลังจากช่วงพักโฆษณาตอนกลาง เราขอแนะนำให้เรียก API ต่อไปนี้
- API ข้อมูลเมตาการกำหนดเวลาของพ็อดโฆษณา (ATM): ค้นหาผลลัพธ์การตัดสินใจของพ็อดโฆษณา รวมถึงระยะเวลาของโฆษณาและแถบสเลท
- ปลายทางกลุ่มโฆษณา: ขอกลุ่มโฆษณาหรือแถบสเลทโดยมีตัวเลือกให้สิ้นสุดพ็อดโฆษณาปัจจุบัน
หรือสำหรับเหตุการณ์ไลฟ์สดที่มีการเข้าชมพร้อมกันจำนวนมาก เราขอแนะนำให้เรียก Early Ad Break Notification (EABN) API เพื่อกำหนดเวลาการตัดสินใจโฆษณาก่อนที่ช่วงพักโฆษณาจะเริ่มขึ้น
ข้อกำหนดเบื้องต้น
หากต้องการเริ่มต้นใช้งาน คุณต้องตั้งค่าเหตุการณ์ไลฟ์สดสำหรับประเภทการแทรกโฆษณาแบบไดนามิก (DAI) การเปลี่ยนเส้นทางเพื่อแสดงกลุ่มโฆษณา โดยเลือกใช้วิธีใดวิธีหนึ่งต่อไปนี้
- UI ของ Ad Manager: ตั้งค่าไลฟ์สดสำหรับ DAI
- Ad Manager API: ใช้ไลบรารีของไคลเอ็นต์ (ตัวเลือกที่มี) เพื่อเรียกใช้
LiveStreamEventService.createLiveStreamEventsเมธอด ตั้งค่าพารามิเตอร์LiveStreamEvent.dynamicAdInsertionTypeเป็นPOD_SERVING_REDIRECT
ดึงข้อมูลสตรีมเนื้อหา
เมื่อผู้ใช้เลือกเหตุการณ์ไลฟ์สด แอปไคลเอ็นต์จะส่งคำขอสตรีมไปยัง Google Ad Manager ในการตอบกลับสตรีม แอปจะแยก Google DAI Session ID และข้อมูลเมตาเพื่อรวมไว้ในคำขอไฟล์ Manifest ของสตรีม
ตัวอย่างต่อไปนี้ส่ง Google DAI Session ID ไปยังเครื่องมือจัดการไฟล์ 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 session ID และ CUSTOM_ASSET_KEY จากคำขอเพื่อเตรียมพร้อมสำหรับการเย็บโฆษณา
ดึงข้อมูลเมตาการกำหนดเวลาของพ็อดโฆษณา
หากต้องการดึงข้อมูลช่วงเวลาของพ็อดโฆษณา ให้ทำตามขั้นตอนต่อไปนี้
- สร้างโทเค็น HMAC
- เรียก API ATM ด้วยโทเค็น HMAC
ขอข้อมูลเมตาการกำหนดเวลาสำหรับโฆษณาตอนต้น
ตรวจสอบการตั้งค่าโฆษณาตอนต้นสำหรับเหตุการณ์ไลฟ์สดโดยใช้ตัวเลือกต่อไปนี้
หากต้องการดึงข้อมูลผลลัพธ์การตัดสินใจโฆษณาตอนต้น ให้ส่งคำขอไปยัง API ATM
ตัวอย่างต่อไปนี้ส่งคำขอ 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"
ขอข้อมูลเมตาการกำหนดเวลาสำหรับโฆษณาตอนกลาง
หากต้องการดึงข้อมูลเมตาของพ็อดโฆษณาสำหรับโฆษณาตอนกลาง ให้ทำตามขั้นตอนต่อไปนี้
- แยกวิเคราะห์ไฟล์ Manifest ของไลฟ์สดเพื่อค้นหาเครื่องหมายโฆษณาที่มีข้อมูลการกำหนดเวลาและระยะเวลาสำหรับช่วงพักโฆษณาตอนกลางแต่ละรายการ
- เรียกใช้ปลายทาง API ATM เพื่อขอระยะเวลาที่แน่นอนของพ็อดโฆษณาและแถบสเลท 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: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
ตัวอย่างต่อไปนี้แสดงไฟล์ 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/6.mp4
#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 จาก API ATM
หากต้องการสิ้นสุดพ็อดโฆษณาก่อนกำหนดเมื่อตรวจพบแท็ก EXT-X-CUE-IN ให้เพิ่มพารามิเตอร์ 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.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
สร้างกลุ่มสเลท
หากต้องการเติมช่องว่างระหว่างโฆษณากับเนื้อหา ให้แทรกกลุ่มแถบสเลท
ใช้อาร์เรย์ slates.segment_durations.values จากการตอบกลับ JSON ของ API ATM เพื่อกำหนดระยะเวลาของกลุ่มสเลทแต่ละรายการ วนลำดับระยะเวลาของกลุ่มโฆษณาตามที่จำเป็นเพื่อเติมช่วงพักโฆษณาทั้งหมด
ตัวอย่างต่อไปนี้ประกอบกลุ่มสเลท
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= เพื่อเติมระยะเวลาจนกว่าเนื้อหาจะเริ่ม |
ไม่มีผลกระทบ โปรแกรมเล่นวิดีโอจะเปลี่ยนกลับไปแสดงเนื้อหาโดยไม่มีการเปลี่ยนแปลงไทม์ไลน์ |
| กลับไปแสดงเนื้อหาทันที | แทรกกลุ่มเนื้อหา | ไทม์ไลน์ของโปรแกรมเล่นวิดีโอมีการเปลี่ยนแปลง โปรแกรมเล่นวิดีโอของไคลเอ็นต์ต้องจัดการไทม์ไลน์ที่เปลี่ยนแปลง |
ไม่บังคับ: กำหนดเวลาช่วงพักโฆษณา
หากต้องการเพิ่มอัตราการส่งโฆษณา ให้ส่งการแจ้งเตือนช่วงพักโฆษณาตอนต้น (EABN) พร้อมระยะเวลาของพ็อดโฆษณา การกำหนดเป้าหมายเอง และข้อมูลสัญญาณ SCTE-35 ดูรายละเอียดเพิ่มเติมได้ที่ ส่งการแจ้งเตือนช่วงพักโฆษณาตอนต้น