Pod Serving API ให้สิทธิ์เข้าถึงพ็อดโฆษณาวิดีโอที่มีอัตราบิตแบบปรับได้ซึ่งเตรียมไว้เพื่อให้ผสานรวมกับเพลย์ลิสต์สื่อ HLS หรือ MPEG-DASH ที่แสดงต่อผู้ใช้ได้โดยตรง
คู่มือนี้มุ่งเน้นที่การใช้เซิร์ฟเวอร์พื้นฐานสำหรับการจัดการไฟล์ Manifest ที่แสดงในพ็อดสำหรับสตรีม VOD
รับคำขอไฟล์ Manifest ของสตรีม
ตัวจัดการไฟล์ Manifest ของคุณต้องระบุปลายทาง API เพื่อรอรับคําขอไฟล์ Manifest จากแอปไคลเอ็นต์โปรแกรมเล่นวิดีโอ โดยอย่างน้อยที่สุด ปลายทางนี้ต้องรวบรวมรหัสสตรีมจากแอปโปรแกรมเล่นไคลเอ็นต์ รหัสสตรีมนี้ใช้เพื่อระบุเซสชันสตรีมมิงไปยัง Ad Manager ในคําขอพ็อดโฆษณา
นอกจากนี้ คุณยังต้องรวบรวมข้อมูลอื่นๆ เพื่อระบุสตรีมเนื้อหาที่เหมาะสม เช่น Content ID
ตัวอย่างปลายทางคำขอไฟล์ 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 ไปยังปลายทาง Ad Pod โดยส่งโปรไฟล์การเข้ารหัสและแท็กโฆษณาที่ขอ คำขอนี้ยังรวมรหัสสตรีมที่รวบรวมไว้ในขั้นตอนที่ 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 ของ MPD ของ DASH |
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 ที่รวมแล้วครั้งสุดท้ายเพื่อแก้ไขหมายเลขลำดับสื่อ ระยะเวลาของเนื้อหา หมายเลขลำดับการหยุดกลางคัน และแtags อื่นๆ ที่ต้องอัปเดตเพื่อพิจารณากลุ่มโฆษณาใหม่ ทั้งนี้ขึ้นอยู่กับฟีเจอร์ของข้อกําหนดที่ไฟล์ 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 ของเนื้อหา
นี่คือเนื้อหาของไฟล์ https://{...}/1080p.m3u8
Manifest ที่แสดงในข้อมูลผลิตภัณฑ์ย่อยที่รวบรวม
#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 ของพ็อดโฆษณา
นี่คือเนื้อหาของ
https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
ไฟล์ Manifest
ที่แสดงในข้อมูลผลิตภัณฑ์ย่อยที่รวบรวม
#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