คู่มือนี้อธิบายวิธีแทรกช่วงพักโฆษณาโดยใช้วิธีข้อมูลเมตาการกำหนดเวลาพ็อดโฆษณา (ATM) เพื่อดึงข้อมูลเวลาและความยาวที่แน่นอนสำหรับช่วงพักโฆษณา รวมถึงโฆษณาก่อนวิดีโอ
หากต้องการแทรกโฆษณาตอนต้นและจัดการการกลับไปที่เนื้อหาหลังจากช่วงพักโฆษณาตอนกลาง เราขอแนะนำให้เรียกใช้ API ต่อไปนี้
- API ข้อมูลเมตาเกี่ยวกับเวลาของพ็อดโฆษณา (ATM): ค้นหาผลการตัดสินใจเกี่ยวกับพ็อดโฆษณา รวมถึงระยะเวลาของโฆษณาและสเลต
- ปลายทางของกลุ่มโฆษณา: ขอโฆษณาหรือกลุ่มสเลตโดยมีตัวเลือกในการสิ้นสุดพ็อดโฆษณาปัจจุบัน
ไม่บังคับ สำหรับเหตุการณ์ไลฟ์สดที่มีการเข้าชมพร้อมกันสูง เราขอแนะนำให้เรียกใช้ Early Ad Break Notification (EABN) API เพื่อกำหนดเวลาการตัดสินใจเกี่ยวกับโฆษณาก่อนที่ช่วงพักโฆษณาจะเริ่ม
ข้อกำหนดเบื้องต้น
หากต้องการเริ่มต้นใช้งาน คุณต้องตั้งค่าเหตุการณ์ไลฟ์สดสำหรับประเภทการแทรกโฆษณาแบบไดนามิก (DAI) ของการแสดงพ็อด การเปลี่ยนเส้นทาง เลือกจากวิธีใดต่อไปนี้
- UI ของ Ad Manager: ตั้งค่าไลฟ์สดสำหรับ DAI
- API ของ Ad Manager: ใช้ไลบรารีของไคลเอ็นต์ (ตัวเลือก
ที่ใช้ได้) เพื่อเรียกใช้เมธอด
LiveStreamEventService.createLiveStreamEvents
ตั้งค่าพารามิเตอร์LiveStreamEvent.dynamicAdInsertionType
เป็นPOD_SERVING_REDIRECT
เรียกข้อมูลสตรีมเนื้อหา
เมื่อผู้ใช้เลือกกิจกรรมไลฟ์สด แอปไคลเอ็นต์จะส่งคำขอสตรีม ไปยัง Google Ad Manager ในการตอบกลับสตรีม แอปจะดึง รหัสเซสชัน Google DAI และข้อมูลเมตาเพื่อรวมไว้ในคำขอไฟล์ 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 จากคำขอเพื่อเตรียมพร้อมสำหรับ การต่อโฆษณา
ดึงข้อมูลเมตาเวลาของพ็อดโฆษณา
หากต้องการดึงข้อมูลเวลาของพ็อดโฆษณา ให้ทำตามขั้นตอนต่อไปนี้
- สร้างโทเค็น HMAC
- เรียกใช้ ATM API ด้วยโทเค็น HMAC
สร้างโทเค็น HMAC ที่ลงนาม
หากต้องการตรวจสอบสิทธิ์คำขอ ให้ทำตามขั้นตอนต่อไปนี้
สร้างสตริงโทเค็นโดยเชื่อมพารามิเตอร์ต่อไปนี้ตามลำดับตัวอักษร โดยคั่นด้วยเครื่องหมายตัวหนอน
~
พารามิเตอร์ ต้องระบุหรือไม่บังคับ คำอธิบาย ad_break_id
ต้องระบุ สตริงที่คุณระบุเพื่อระบุช่วงพักโฆษณา เช่น ad-break-1
สำหรับโฆษณาตอนต้น ให้ใช้preroll
custom_asset_key
ต้องระบุ คีย์เนื้อหาที่กำหนดเองของกิจกรรมไลฟ์สด cust_params
ไม่บังคับ พารามิเตอร์การกำหนดเป้าหมายเอง ดูรายละเอียดเพิ่มเติมได้ที่จัดเตรียมพารามิเตอร์การกำหนดเป้าหมายไปยังสตรีมของคุณ exp
ต้องระบุ เวลาที่โทเค็นนี้หมดอายุ ซึ่งวัดเป็นจำนวนวินาทีทั้งหมดที่ผ่านไปนับตั้งแต่ Epoch ของ Unix network_code
ต้องระบุ รหัสเครือข่าย Google Ad Manager ดูรายละเอียดเพิ่มเติมได้ที่ค้นหาข้อมูลบัญชี Ad Manager pd
ต้องระบุ ระยะเวลาของช่วงพักโฆษณาเป็นมิลลิวินาที สำหรับโฆษณาตอนต้น Google DAI จะลบล้างพารามิเตอร์นี้ด้วยการตั้งค่ากิจกรรมไลฟ์สด scte35
ไม่บังคับ สัญญาณ SCTE-35 ที่เข้ารหัส Base64 ตรวจสอบว่าสัญญาณถูกต้อง หากไม่ถูกต้อง ระบบจะส่งข้อความไปยังส่วนหัว HTTP ในการตอบกลับ และยังคงเผยแพร่สัญญาณเพื่อสร้างช่วงพักโฆษณา X-Ad-Manager-Dai-Warning
ดูรายละเอียดเพิ่มเติมเกี่ยวกับเครื่องหมายช่วงพักโฆษณาที่รองรับได้ที่การผสานรวม HLSดาวน์โหลดคีย์การตรวจสอบสิทธิ์ DAI ของ Google ประเภท HMAC ดูรายละเอียดเพิ่มเติมได้ที่ตรวจสอบสิทธิ์คำขอสตรีมวิดีโอ DAI
ใช้คีย์ HMAC ที่ดาวน์โหลดมาเพื่อสร้างลายเซ็น SHA256 ของโทเค็น สตริง
ต่อสตริงโทเค็นและลายเซ็นที่สร้างขึ้น
ใช้การเข้ารหัส URL กับสตริงที่ต่อกัน สตริงที่เข้ารหัสคือโทเค็น HMAC ที่ลงชื่อแล้วสําหรับการตรวจสอบสิทธิ์คําขอ API ข้อมูลเมตาของเวลาพักโฆษณา (ATM)
ตัวอย่างต่อไปนี้สร้างโทเค็น HMAC ที่ลงชื่อแล้วสำหรับโฆษณาตอนต้น
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
ขอข้อมูลเมตาเกี่ยวกับเวลาในการแสดงโฆษณาตอนต้น
ยืนยันการตั้งค่าโฆษณาก่อนวิดีโอสำหรับกิจกรรมไลฟ์สดโดยใช้ตัวเลือกต่อไปนี้
หากต้องการดึงผลการตัดสินโฆษณาตอนต้น ให้ส่งคำขอไปยัง 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"
ขอข้อมูลเมตาของเวลาสำหรับโฆษณาตอนกลาง
หากต้องการดึงข้อมูลเมตาของพ็อดโฆษณาสำหรับโฆษณากลาง ให้ทำตามขั้นตอนต่อไปนี้
- แยกวิเคราะห์ไฟล์ Manifest ของไลฟ์สดเพื่อค้นหาเครื่องหมายโฆษณาที่มีเวลา และระยะเวลาสำหรับช่วงพักโฆษณาตอนกลางแต่ละช่วง
- เรียกใช้ปลายทาง 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: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 จาก ATM API
หากต้องการสิ้นสุดพ็อดโฆษณาก่อนเวลาเมื่อตรวจพบแท็ก 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 ของ ATM API
เพื่อกำหนดระยะเวลาของแต่ละกลุ่มสเลต วนซ้ำลำดับระยะเวลาของกลุ่ม
ตามที่ต้องการเพื่อเติมเต็มช่วงพักโฆษณาทั้งหมด
ตัวอย่างต่อไปนี้จะประกอบกลุ่มสเลต
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 ดูรายละเอียดเพิ่มเติมได้ที่ส่งการแจ้งเตือน ช่วงพักโฆษณาเร็วขึ้น