Pod serving 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 |
พารามิเตอร์สมมติที่เกี่ยวข้องกับรูปแบบสตรีม ข้อใดข้อหนึ่งต่อไปนี้
|
ดึงข้อมูลสตรีมเนื้อหา
ใช้ Content ID ที่รวบรวมจากคำขอไฟล์ 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