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