เครื่องมือจัดการไฟล์ Manifest สำหรับสตรีม VOD

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 พารามิเตอร์สมมติที่สอดคล้องกับรูปแบบสตรีม อย่างใดอย่างหนึ่งต่อไปนี้
mpd สำหรับสตรีม MPEG-DASH
m3u8 สำหรับสตรีม HLS

ดึงข้อมูลสตรีมเนื้อหา

ใช้รหัสเนื้อหาที่รวบรวมจากคำขอไฟล์ 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

เช่น avc1.4d000c

bitrate Required จำนวนเต็มแสดงอัตราบิตสูงสุดของวิดีโอของโปรไฟล์นี้ในหน่วยไบต์ต่อ อย่างที่สอง
frames_per_second Required FPS แบบจุดทศนิยมของวิดีโอ
resolution Required ค่าที่เข้ารหัส JSON ซึ่งมี "ความกว้าง" และ "ความสูง" ของวิดีโอเป็นพิกเซล

เช่น {"width": 640, "height": 320}

การตั้งค่าเสียง
codec Required สตริงตัวแปลงรหัส RFC6381

เช่น mp4a.40.5

bitrate Required จำนวนเต็มแสดงอัตราบิตของเสียงสูงสุดของโปรไฟล์นี้ในหน่วยไบต์ต่อ อย่างที่สอง

เช่น 300000

channels Required จำนวนเต็มที่แทนจำนวนช่องสัญญาณเสียง ซึ่งรวมถึงความถี่ต่ำ แชแนล
sample_rate Required จำนวนเต็มที่แทนอัตราการสุ่มตัวอย่างเสียงในหน่วยเฮิรตซ์

เช่น 4800

การตั้งค่าคำบรรยาย
format Required รูปแบบไฟล์ที่คำบรรยายในวงใช้ ค่าที่รองรับมีดังนี้ webvtt หรือ ttml
language Optional ภาษาของคำบรรยายที่เป็นสตริงภาษา RFC5646 หากมี ค่านี้ จะใช้สำหรับการแสดงผล DASH เท่านั้น

เช่น en-us

ตัวเลือก DAI
dash_profile Optional โปรไฟล์ MPEG-DASH ที่จะใช้กับไฟล์ Manifest ของพ็อดโฆษณา การตั้งค่านี้ใช้สำหรับ ไฟล์ Manifest สำหรับ DASH เท่านั้น ค่าที่อนุญาตคือ live หรือ on-demand ค่าเริ่มต้นคือ on-demand

ค่า live สอดคล้องกับโปรไฟล์ MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011"

ค่า on-demand สอดคล้องกับโปรไฟล์ MPEG-DASH urn:mpeg:dash:profile:isoff-on-demand:2011

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>

แหล่งข้อมูลเพิ่มเติม