Pod Serve API ให้สิทธิ์เข้าถึงพ็อดโฆษณาวิดีโอแบบปรับอัตราบิต ซึ่งจัดเตรียมในลักษณะที่สามารถต่อเข้ากับเพลย์ลิสต์สื่อ HLS หรือ MPEG-DASH ที่แสดงต่อผู้ใช้ได้โดยตรง
คู่มือนี้เน้นการใช้เซิร์ฟเวอร์การจัดการไฟล์ Manifest ของพ็อดที่ให้บริการขั้นพื้นฐานสำหรับสตรีม VOD
รับคำขอไฟล์ Manifest ของสตรีม
เครื่องมือจัดการไฟล์ Manifest ต้องระบุปลายทาง API เพื่อฟังคำขอไฟล์ Manifest จากแอปไคลเอ็นต์ของโปรแกรมเล่นวิดีโอ อย่างน้อยปลายทางนี้จะต้องรวบรวมรหัสสตรีมจากแอปโปรแกรมเล่นของไคลเอ็นต์ รหัสสตรีมนี้ใช้เพื่อระบุเซสชันสตรีมมิงแก่ Ad Manager ในคำขอพ็อดโฆษณา
นอกจากนี้ คุณยังจำเป็นต้องรวบรวมข้อมูลอื่นๆ เพื่อระบุสตรีมเนื้อหาที่เหมาะสม เช่น รหัสเนื้อหา
ตัวอย่างปลายทางของคำขอไฟล์ Manifest
GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
พารามิเตอร์เส้นทาง | |||||
---|---|---|---|---|---|
stream_id |
รหัสสตรีม Ad Manager จากแอปโปรแกรมเล่นวิดีโอของไคลเอ็นต์ | ||||
content_id |
รหัสสมมติที่เกี่ยวข้องกับวิดีโอเนื้อหาในระบบของคุณ | ||||
format |
พารามิเตอร์สมมติที่เกี่ยวข้องกับรูปแบบสตรีม ประเภทใดประเภทหนึ่งต่อไปนี้
|
เรียกสตรีมเนื้อหา
ใช้รหัสเนื้อหาที่รวบรวมจากคำขอไฟล์ Manifest เพื่อเลือกสตรีมเนื้อหาที่จะต่อเข้ากับโฆษณา
ขอไฟล์ Manifest ของพ็อดโฆษณา
หากต้องการขอโฆษณาจาก Ad Manager เซิร์ฟเวอร์ของคุณต้องส่งคำขอ POST ไปยังปลายทางของพ็อดโฆษณาโดยการส่งโปรไฟล์การเข้ารหัส แท็กโฆษณา และพารามิเตอร์การกำหนดเป้าหมายที่ขอ คำขอนี้จะมีรหัสสตรีมที่รวบรวมไว้ในขั้นตอนที่ 1 ด้วย
คุณจะได้รับรายการออบเจ็กต์พ็อดโฆษณาที่มีไฟล์ Manifest สำหรับพ็อดโฆษณาที่แท็กโฆษณาของผู้เผยแพร่โฆษณาขอ รวมถึงข้อมูลเกี่ยวกับเวลาและตำแหน่งที่ควรจะแทรกลงในเนื้อหา
POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
พารามิเตอร์เส้นทาง | |
---|---|
network_code |
รหัสเครือข่าย Ad Manager 360 ของผู้เผยแพร่โฆษณา |
stream_id |
รหัสสตรีมจากแอปโปรแกรมเล่นวิดีโอของไคลเอ็นต์ |
เนื้อหา JSON
พารามิเตอร์เนื้อหา | ||
---|---|---|
encoding_profiles |
Required |
รายการของการแสดงไฟล์ JSON ของโปรไฟล์การเข้ารหัสที่คุณต้องการรับสำหรับช่วงพักโฆษณาแต่ละครั้ง โปรดดูรายละเอียดด้านล่าง
เพื่อให้การเล่นเป็นไปอย่างราบรื่นที่สุด ข้อมูลนี้ควรตรงกับชุดโปรไฟล์การเข้ารหัสที่ใช้ในสตรีมเนื้อหา |
ad_tag |
Required |
แท็กโฆษณาที่จะขอโฆษณา VMAP |
cuepoints |
Optional |
รายการจุดเริ่มโฆษณาภายในสตรีมเนื้อหาที่จะแทรกช่วงพักโฆษณาตอนกลาง จุดเริ่มโฆษณาจะวัดเป็นวินาทีของจุดทศนิยม
จำเป็นสำหรับการตอบสนองของ VMAP ที่มีโฆษณาตอนกลางที่ใช้ออฟเซ็ตเวลาตำแหน่งเท่านั้น กรณีนี้พบได้ไม่บ่อยนัก |
content_duration_seconds |
Optional |
ระยะเวลาของเนื้อหาเป็นวินาที
จำเป็นเฉพาะสำหรับการตอบกลับ VMAP ที่มีโฆษณาตอนกลางที่ใช้การชดเชยเวลา เปอร์เซ็นต์ กรณีนี้พบได้ไม่บ่อยนัก |
manifest_type |
Optional |
รูปแบบของสตรีมโฆษณาที่ขอ โดยอาจเป็น hls หรือ dash ค่าเริ่มต้นคือ hls
|
dai_options |
Optional |
ตัวเลือกเพิ่มเติมที่ควบคุมลักษณะการแสดงผลไฟล์ Manifest โปรดดูรายละเอียดด้านล่าง |
โปรไฟล์การเข้ารหัส | ||
profile_name |
Required |
ตัวระบุสำหรับโปรไฟล์การเข้ารหัสนี้ ค่านี้สามารถเป็นสตริงใดก็ได้ที่คุณเลือก แต่คุณไม่สามารถมีโปรไฟล์การเข้ารหัสหลายโปรไฟล์ที่มีชื่อเดียวกันในสตรีมเดียวกัน |
type |
Required |
ประเภทการเข้ารหัสของสตรีมที่อธิบายโดยโปรไฟล์การเข้ารหัสนี้ ประเภทเนื้อหา ได้แก่ media , iframe , subtitles
|
container_type |
Required |
รูปแบบคอนเทนเนอร์ที่โปรไฟล์การเข้ารหัสนี้ใช้ รูปแบบคอนเทนเนอร์ ได้แก่
mpeg2ts , fmp4cmaf , hls_packed_audio
|
video_settings |
Optional |
ต้องระบุหากประเภทโปรไฟล์การเข้ารหัสคือ iframe มิเช่นนั้น ระบบจะอนุญาตเฉพาะกรณีที่ประเภทสื่อมีวิดีโอ ดูรายละเอียดด้านล่าง |
audio_settings |
Optional |
ต้องระบุหากโปรไฟล์การเข้ารหัสมีเสียง อนุญาตเฉพาะกรณีที่ประเภทเป็นสื่อ โปรดดูรายละเอียดด้านล่าง |
subtitle_settings |
Optional |
ต้องระบุหากโปรไฟล์การเข้ารหัสมีคำบรรยาย โปรดดูรายละเอียดด้านล่าง |
การตั้งค่าวิดีโอ | ||
codec |
Required |
สตริงตัวแปลงรหัส RFC6381
เช่น |
bitrate |
Required |
จำนวนเต็มที่แสดงอัตราบิตของวิดีโอสูงสุดของโปรไฟล์นี้ในหน่วยไบต์ต่อวินาที |
frames_per_second |
Required |
FPS ที่เป็นจุดทศนิยมของวิดีโอ |
resolution |
Required |
ค่าที่เข้ารหัสด้วย JSON ที่มี "ความกว้าง" และ "ความสูง" ของวิดีโอเป็นพิกเซล
เช่น |
การตั้งค่าเสียง | ||
codec |
Required |
สตริงตัวแปลงรหัส RFC6381
เช่น |
bitrate |
Required |
จำนวนเต็มที่แสดงอัตราบิตของเสียงสูงสุดของโปรไฟล์นี้ในหน่วยไบต์ต่อวินาที
เช่น |
channels |
Required |
จำนวนเต็มที่แสดงจำนวนช่องสัญญาณเสียง รวมถึงช่องสัญญาณเสียงที่มีความถี่ต่ำ |
sample_rate |
Required |
จำนวนเต็มที่แสดงอัตราสุ่มเสียงเป็นเฮิรตซ์
เช่น |
การตั้งค่าคำบรรยาย | ||
format |
Required |
รูปแบบไฟล์ที่คำบรรยายในย่านใช้ ค่าที่รองรับคือ webvtt หรือ ttml
|
language |
Optional |
ภาษาคำบรรยายเป็นสตริงภาษา RFC5646 หากระบุ ระบบจะใช้ค่านี้สำหรับการแสดงผล DASH เท่านั้น
เช่น |
ตัวเลือก DAI | ||
dash_profile |
Optional |
โปรไฟล์ MPEG-DASH สำหรับใช้กับไฟล์ Manifest ของพ็อดโฆษณา การตั้งค่านี้ใช้สำหรับไฟล์ Manifest สำหรับ DASH เท่านั้น ค่าที่อนุญาตคือ live หรือ on-demand ค่าเริ่มต้นคือ on-demand
ค่า
ค่า |
ad_pod_timeout |
Optional |
เวลาสูงสุดที่จะใช้ในการเลือกโฆษณาและสร้างพ็อดโฆษณาโดยมีหน่วยเป็นวินาที เมื่อพ้นเวลานี้ Ad Manager จะแสดงโฆษณาที่เลือกไว้ในการตอบกลับ ad_pods และหยุดประมวลผล
|
sam_id |
Optional |
ระบุคีย์การแก้ไขข้อบกพร่องสำรองที่ใช้ค้นหาเซสชันในเครื่องมือตรวจสอบกิจกรรมการสตรีมได้ |
คำตอบ
พารามิเตอร์การตอบสนอง | |
---|---|
valid_for |
ระยะเวลาที่เพลย์ลิสต์พ็อดโฆษณาเหล่านี้ใช้ได้ในรูปแบบ dhms (วัน ชั่วโมง นาที วินาที)
|
valid_until |
วันที่และเวลาที่เพลย์ลิสต์พ็อดโฆษณาจะใช้เป็นสตริงวันที่และเวลา ISO8601 ในรูปแบบ yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm ได้
|
ad_pods |
รายการพ็อดโฆษณาที่เลือกสำหรับสตรีมนี้ |
พ็อดโฆษณา | |
manifest_uris |
สำหรับสตรีม HLS เท่านั้น แมปของรหัสโปรไฟล์การเข้ารหัสกับ URI ไฟล์ Manifest ของ HLS |
mpd_uri |
สำหรับสตรีม DASH เท่านั้น URI ของ DASH MPD |
type |
ประเภทของพ็อดโฆษณา ประเภทพ็อดโฆษณาคือ pre , mid หรือ
post
|
start |
สำหรับพ็อดโฆษณาตอนกลางเท่านั้น ตำแหน่งในสตรีมที่ควรแทรกพ็อดโฆษณานี้เป็นวินาทีจุดลอยตัว |
duration |
ระยะเวลาของพ็อดโฆษณานี้ในหน่วยวินาทีที่เป็นจุดทศนิยม |
midroll_index |
สำหรับพ็อดโฆษณาตอนกลางเท่านั้น ดัชนีของพ็อดโฆษณาตอนกลางปัจจุบัน การจัดทำดัชนีเริ่มต้นด้วย 1
|
ตัวอย่างคำขอ (cURL)
curl -X POST \
-d '@request-body.json' \
-H 'Content-Type: application/json' \
https://dai.google.com/ondemand/pods/api/v1/network/21775744923/streams/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/adpods
ตัวอย่างเนื้อหาของคำขอ
นี่คือเนื้อหาของ request_body.json
ที่อ้างอิงในการเรียก cURL ข้างต้น
{
"encoding_profiles": [
{
"profile_name": "1080p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000c",
"bitrate": 5000000,
"frames_per_second": 30.0,
"resolution": {
"width": 1920,
"height": 1080
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 300000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "360p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000d",
"bitrate": 1000000,
"frames_per_second": 30.0,
"resolution": {
"width": 640,
"height": 360
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 64000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "subtitles-webvtt",
"type": "subtitles",
"subtitle_settings": {
"format": "webvtt"
}
}
],
"ad_tag": "https://pubads.g.doubleclick.net/gampad/ads?...",
"manifest_type": "hls"
}
ตัวอย่างการตอบกลับ
{
"valid_for": "8h0m0s",
"valid_until": "2023-03-24T08:30:26.839717986-07:00",
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/1/profile/subtitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
]"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt""
},
"type": "post",
"duration": 10.0
}
]
}
ต่อพ็อดโฆษณาลงในเนื้อหา
ขั้นตอนการต่อพ็อดโฆษณาลงในสตรีมเนื้อหาจะแตกต่างกันไปโดยขึ้นอยู่กับการใช้งาน รูปแบบสตรีม และฟีเจอร์ที่คุณเลือกใช้งานจากข้อกำหนดของรูปแบบ ขั้นตอนการทำงานต่อไปนี้เป็นคำแนะนำสำหรับวิธีจัดการกระบวนการนี้ รายละเอียดที่แน่นอนของการใช้งานอาจแตกต่างกันไปตามความต้องการทางธุรกิจและสตรีมเนื้อหาของคุณ
สตรีม HLS
หากคุณต่อสตรีมในรูปแบบ HLS สตรีมเนื้อหาของคุณจะเป็นเพลย์ลิสต์หลายรูปแบบที่มีลิงก์ไปยังไฟล์ Manifest ของสตรีมแยกต่างหาก 1 รายการสำหรับแต่ละโปรไฟล์การเข้ารหัส ต้องแทรกพ็อดโฆษณาลงในไฟล์ Manifest แต่ละรูปแบบเหล่านี้ วิธีหนึ่งที่ทำได้คือการเตรียมไฟล์ Manifest ของตัวแปรทั้งหมดและส่งไปยังเครือข่ายนำส่งข้อมูล (CDN) เพื่อโฮสต์ เพลย์ลิสต์เวอร์ชันแปรผันหลายตัวแปรสุดท้ายคือชุดของลิงก์ไปยังไฟล์ Manifest ที่โฮสต์กับ CDN เหล่านี้
ทำซ้ำในโปรไฟล์การเข้ารหัส
สำหรับโปรไฟล์การเข้ารหัสแต่ละโปรไฟล์ ให้รวบรวมไฟล์ Manifest ของพ็อดโฆษณาที่เกี่ยวข้องทั้งหมดจากการตอบสนองของ Ad Manager พร้อมเวลาเริ่มต้นที่เกี่ยวข้อง สำหรับพ็อดโฆษณาตอนต้น
ให้ตั้งเวลาเริ่มต้นเป็น 0
สำหรับโฆษณาตอนต้น ให้ใช้ระยะเวลาของเนื้อหาเป็นเวลาเริ่มต้นของพ็อดโฆษณา ระบุสตรีมรูปแบบในเพลย์ลิสต์หลายตัวแปร
ที่ตรงกับการตั้งค่าเสียงและวิดีโอของโปรไฟล์การเข้ารหัสแต่ละรายการ
ตัวอย่างอาร์เรย์พ็อดโฆษณา
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/0/profile/subitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/1/profile/subitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/2/profile/subitles-en.vtt"
},
"type": "post",
"duration": 10.0
}
]
ตัวอย่างเพลย์ลิสต์เนื้อหาหลายรูปแบบ
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://{...}/subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{...}/360p.m3u8
ตัวอย่างข้อมูลของรูปแบบที่รวบรวมไว้
Encoding profile: "1080p"
Profile settings: {...}
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://{...}/pod/0/profile/1080p.m3u8
15 -> https://{...}/pod/1/profile/1080p.m3u8
600 -> https://{...}/pod/2/profile/1080p.m3u8
แทรกโฆษณาลงในไฟล์ Manifest แต่ละรูปแบบ
สำหรับสตรีมรูปแบบแต่ละรายการ ให้ไปที่กลุ่มของไฟล์ Manifest ของเนื้อหา โดยรักษาเวลารวมของเนื้อหาที่ผ่านไป เมื่อมาที่ตำแหน่งเริ่มต้นของพ็อดโฆษณา ให้แยกรายการกลุ่มจากไฟล์ Manifest ของพ็อดโฆษณา รวมรายการกลุ่มในแท็ก #EXT-X-DISCONTINUITY
2 รายการ แล้วแทรกรายการที่ตำแหน่งปัจจุบันในไฟล์ Manifest ของเนื้อหา ทำขั้นตอนนี้ต่อไปจนกว่าพ็อดโฆษณาและสตรีมตัวแปรทั้งหมดจะได้รับการประมวลผล
ไฟล์ Manifest ที่ได้ต้องเป็นไปตามมาตรฐาน HLS ดังนั้น คุณอาจต้องทำการส่งผ่านไฟล์ Manifest แบบรวมเป็นลำดับสุดท้ายเพื่อแก้ไขหมายเลขลำดับของสื่อ ระยะเวลาของเนื้อหา หมายเลขลำดับความไม่ต่อเนื่อง และแท็กอื่นๆ ที่ต้องอัปเดตเพื่อให้ครอบคลุมกลุ่มโฆษณาใหม่ ทั้งนี้ขึ้นอยู่กับฟีเจอร์ของข้อกำหนดจำเพาะในไฟล์ Manifest ที่รวมไว้ เมื่อมีการแก้ไขความคลาดเคลื่อนกับมาตรฐานแล้ว ให้พุชไฟล์ Manifest ของตัวแปรที่เจาะจงผู้ใช้แต่ละรายไปยัง CDN เพื่อโฮสต์
หากไฟล์ Manifest ของเนื้อหามีการเข้ารหัส คุณจะต้องจัดเก็บคีย์การเข้ารหัสล่าสุดที่พบก่อนเริ่มต้นพ็อดโฆษณาปัจจุบันในแท็ก #EXT-X-KEY
จากนั้นคุณต้องเพิ่มแท็ก #EXT-X-KEY:METHOD=NONE
เพื่อนำการเข้ารหัสออกก่อนส่วนแรกของพ็อดโฆษณาแต่ละรายการ สุดท้าย คุณต้องเพิ่มสําเนาแท็ก #EXT-X-KEY
ที่จัดเก็บไว้ก่อนส่วนแรกของเนื้อหาหลังพ็อดโฆษณาแต่ละพ็อด เพื่อกู้คืนการเข้ารหัสเนื้อหา
ตัวอย่างข้อมูลของรูปแบบที่รวบรวมไว้
Encoding profile: "1080p"
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://dai.google.com/{...}pod/0/profile/1080p.m3u8
15 -> https://dai.google.com/{...}pod/1/profile/1080p.m3u8
600 -> https://dai.google.com/{...}pod/2/profile/1080p.m3u8
ตัวอย่างไฟล์ Manifest ของเนื้อหา
นี่คือเนื้อหาของไฟล์ Manifest https://{...}/1080p.m3u8
ที่ระบุไว้ในข้อมูลรูปแบบที่รวบรวม
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
ตัวอย่างไฟล์ Manifest ของพ็อดโฆษณา
นี่คือเนื้อหาของไฟล์ Manifest https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
ที่แสดงในข้อมูลรูปแบบที่รวบรวมไว้
#EXTM3U
{...}
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
ตัวอย่างไฟล์ Manifest ของรูปแบบที่ต่อกัน
นี่จะเป็นไฟล์ Manifest ของรูปแบบที่ต่อเข้าด้วยกันที่ได้ ซึ่งส่งไปยัง CDN และโฮสต์ที่ https://cdn.{...}/{userid}/1080p.m3u8
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
สร้างเพลย์ลิสต์เวอร์ชันแปรผันหลายตัวแปร
รวบรวมที่อยู่ CDN สำหรับไฟล์ Manifest ของรูปแบบที่เสร็จสมบูรณ์แต่ละรายการ พร้อมกับรายละเอียดโปรไฟล์การเข้ารหัสการจับคู่ที่ตรงกัน และรวมผลลัพธ์เป็นไฟล์ Manifest หลายตัวแปรใหม่ ไฟล์ Manifest สำหรับผู้ใช้โดยเฉพาะนี้จะส่งกลับมาเป็นการตอบกลับคำขอไฟล์ Manifest ที่คุณได้รับในขั้นตอนที่ 1
ตัวอย่างเพลย์ลิสต์เวอร์ชันแปรผันหลายตัวแปรสุดท้าย
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://cdn.{...}-subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/{userid}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/{userid}/360p.m3u8
สตรีม MPEG DASH
หากคุณกำลังต่อสตรีมในรูปแบบ MPEG DASH คุณเพียงต้องสร้างไฟล์เดียว จึงทําให้เชื่อมต่อสตรีม DASH ได้ง่ายกว่า HLS
ไฟล์คำอธิบายงานนำเสนอสื่อ MPEG DASH (MPD) ที่จัดเตรียมอย่างเหมาะสมต้องประกอบด้วยหลายจุด โดยแต่ละไฟล์มีหลายตัวแทน ตัวแทนแต่ละรายการควรตรงกับโปรไฟล์การเข้ารหัสโปรไฟล์ใดโปรไฟล์หนึ่ง พ็อดโฆษณาแต่ละพ็อดที่ส่งกลับมาจาก Ad Manager ยังเป็นไฟล์ MPD ที่มีชุดช่วงเวลาซึ่งมีการแสดงการจับคู่ที่ตรงกันด้วย
หากต้องการต่อไฟล์ MPD เหล่านี้เข้าด้วยกัน ให้เริ่มด้วยการบันทึกเวลาเริ่มต้นสำหรับพ็อดโฆษณาแต่ละพ็อด สำหรับโฆษณาตอนต้น ให้แทรกระยะเวลาของพ็อดโฆษณาตอนต้นก่อนระยะเวลาของเนื้อหา สำหรับโฆษณาวิดีโอตอนท้าย ให้แทรกระยะเวลาของพ็อดโฆษณาตอนท้ายหลังระยะเวลาเนื้อหาทั้งหมด ทำซ้ำตามระยะเวลาใน MPD ของเนื้อหา ด้วยการติดตามเวลาเล่นที่ผ่านไปสำหรับระยะเวลาของเนื้อหาที่ประมวลผลแล้วทั้งหมด เมื่อถึงขีดจำกัดระหว่างเวลาเริ่มต้นของพ็อดโฆษณา ให้แทรกจุดจากไฟล์ MPD ของพ็อดโฆษณาตอนกลางที่ตรงกันที่ขอบเขตนั้น
ไฟล์ MPD ที่ต่อเข้าด้วยกันในขั้นตอนสุดท้ายต้องเป็นไปตามข้อกำหนด MPEG_DASH ทั้งหมด ดังนั้นคุณอาจต้องทำซ้ำไฟล์สุดท้ายอีกครั้งเพื่อแก้ไขเวลาเริ่มต้น แก้ไขระยะเวลาการนำเสนอสื่อเพื่อพิจารณาระยะเวลาโฆษณาที่แทรกใหม่ และแก้ไขข้อขัดแย้งอื่นๆ ที่อาจเกิดขึ้นจากขั้นตอนการต่อภาพ
ตัวอย่าง MPD ของเนื้อหา
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M00.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
ตัวอย่าง JSON ของพ็อดโฆษณา
[{
"mpd_uri": "https://{...}pod/1.mpd",
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
}]
ตัวอย่าง MPD ของพ็อดโฆษณา
นี่คือเนื้อหาของ mpd_uri
จาก JSON ของพ็อดโฆษณาด้านบน
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H0M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Ad Pod 1</Title>
</ProgramInformation>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
...
</MPD>
ตัวอย่าง MPD ที่ต่อกัน
ใช้เป็นการตอบกลับคำขอไฟล์ Manifest ของสตรีมเริ่มต้น
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
แหล่งข้อมูลเพิ่มเติม
- การเล่นการแสดงพ็อดด้วย IMA SDK
- การเล่นการแสดงพ็อดด้วย DAI API