Pod Serve 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 ไปยังโฆษณา ปลายทางของพ็อด การส่งโปรไฟล์การเข้ารหัส แท็กโฆษณา และการกำหนดเป้าหมายที่ขอ พารามิเตอร์ คําขอนี้รวมถึงรหัสสตรีมที่คุณรวบรวมไว้ในขั้นตอนด้วย 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 ที่มีโฆษณาตอนกลางที่ใช้ การชดเชยเวลา percentage กรณีนี้ไม่ปกติ |
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 ของสตรีมแยกกัน แต่ละรายการสำหรับโปรไฟล์การเข้ารหัสแต่ละโปรไฟล์ โฆษณาของคุณ ต้องแทรกพ็อดลงในไฟล์ Manifest ของตัวแปรเหล่านี้แต่ละรายการ วิธีเดียวในการ คือการเตรียมไฟล์ Manifest ของตัวแปรทั้งหมดและส่งให้กับเนื้อหา เครือข่ายนำส่ง (CDN) สำหรับ โฮสติ้ง เพลย์ลิสต์เวอร์ชันสุดท้ายที่มีหลายรูปแบบคือชุดของลิงก์ไปยังซึ่งโฮสต์กับ CDN เหล่านี้ ไฟล์ Manifest
ทำซ้ำโดยใช้โปรไฟล์การเข้ารหัส
สำหรับโปรไฟล์การเข้ารหัสแต่ละรายการ ให้รวบรวมไฟล์ 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
สองแท็ก และแทรกรายการที่ส่วน
ตำแหน่งปัจจุบันในไฟล์ 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 เหล่านี้เข้าด้วยกัน ให้เริ่มต้นด้วยการจดบันทึกเวลาเริ่มต้นสำหรับ แต่ละพ็อดโฆษณา สำหรับโฆษณาตอนต้น ให้แทรกระยะเวลาของพ็อดโฆษณาตอนต้นก่อนเนื้อหาใดๆ 6 เดือน สำหรับโฆษณาตอนท้าย ให้แทรกระยะเวลาของพ็อดโฆษณาตอนท้ายไว้หลังเนื้อหาทั้งหมด 6 เดือน ทำซ้ำตามระยะเวลาใน MPD ของเนื้อหา ติดตามประสิทธิภาพ เวลาเล่นที่ผ่านไปสำหรับช่วงเวลาเนื้อหาที่ประมวลผลทั้งหมด เมื่อไปถึงขอบเขต ระหว่างระยะเวลาที่สอดคล้องกับเวลาเริ่มต้นของพ็อดโฆษณา ให้แทรกจุด จากไฟล์ MPD ของพ็อดโฆษณาตอนกลางที่ตรงกัน ณ ขอบเขตนั้น
ไฟล์ MPD ที่เย็บเข้าด้วยกันขั้นสุดท้ายต้องสอดคล้องกับข้อกำหนด MPEG_DASH อย่างครบถ้วน ดังนั้นคุณอาจต้องทำซ้ำไฟล์สุดท้ายอีก 1 ครั้งเพื่อแก้ไข เวลาเริ่มต้น แก้ไขระยะเวลาการนำเสนอสื่อเพื่อพิจารณา ระยะเวลาโฆษณาที่แทรกใหม่ และแก้ปัญหาความขัดแย้งอื่นๆ ที่อาจเกิดขึ้น ที่เกิดจากกระบวนการเย็บต่อภาพ
ตัวอย่าง 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