Trình thao tác tệp kê khai cho luồng VOD

API Phân phát nhóm cung cấp quyền truy cập vào các nhóm quảng cáo dạng video có tốc độ bit thích ứng được chuẩn bị sao cho có thể được ghép trực tiếp vào danh sách phát nội dung nghe nhìn HLS hoặc MPEG-DASH dành cho người dùng.

Hướng dẫn này tập trung vào việc triển khai một máy chủ thao tác tệp kê khai Phân phát nhóm cơ bản cho các luồng VOD.

Nhận yêu cầu tệp kê khai luồng

Trình điều khiển tệp kê khai phải cung cấp một điểm cuối API để nghe các yêu cầu tệp kê khai từ ứng dụng trình phát video. Tối thiểu, điểm cuối này phải thu thập mã luồng từ ứng dụng trình phát khách. Mã luồng này được dùng để xác định phiên phát trực tuyến cho Ad Manager trong các yêu cầu về nhóm quảng cáo.

Bạn cũng cần thu thập một số thông tin khác để xác định luồng nội dung phù hợp, chẳng hạn như mã nhận dạng nội dung.

Ví dụ về điểm cuối yêu cầu tệp kê khai

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
Tham số đường dẫn
stream_id Mã luồng Ad Manager từ ứng dụng trình phát video của ứng dụng khách.
content_id Mã nhận dạng giả định tương ứng với video nội dung trong hệ thống của bạn.
format Một tham số giả định tương ứng với định dạng luồng. Một trong hai:
mpd Đối với luồng MPEG-DASH
m3u8 Đối với luồng HLS

Truy xuất luồng nội dung

Sử dụng mã nội dung được thu thập từ yêu cầu tệp kê khai để chọn luồng nội dung cần ghép nối với quảng cáo.

Yêu cầu tệp kê khai nhóm quảng cáo

Để yêu cầu quảng cáo từ Ad Manager, máy chủ của bạn phải tạo một yêu cầu POST đến điểm cuối của nhóm quảng cáo, chuyển thẻ quảng cáo và hồ sơ mã hoá được yêu cầu. Yêu cầu này cũng bao gồm mã luồng mà bạn đã thu thập ở Bước 1.

Đổi lại, bạn sẽ nhận được danh sách các đối tượng nhóm quảng cáo chứa tệp kê khai cho các nhóm quảng cáo do thẻ quảng cáo của nhà xuất bản yêu cầu và thông tin về thời điểm cũng như vị trí chèn các nhóm quảng cáo đó vào nội dung của bạn.

POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
Tham số đường dẫn
network_code Mã mạng Ad Manager 360 của nhà xuất bản.
stream_id Mã luồng từ ứng dụng trình phát video của ứng dụng khách.

Nội dung JSON

Tham số cơ thể
encoding_profiles Required Danh sách các bản trình bày JSON của hồ sơ mã hoá mà bạn muốn nhận được cho mỗi điểm chèn quảng cáo. Xem thông tin chi tiết bên dưới

Để quá trình phát diễn ra liền mạch nhất có thể, hồ sơ này phải khớp với tập hợp hồ sơ mã hoá được dùng trong luồng nội dung của bạn.

ad_tag Required Thẻ quảng cáo để yêu cầu quảng cáo VMAP.
cuepoints Optional Danh sách các điểm dừng trong luồng nội dung nơi chèn các điểm chèn quảng cáo trong video. Điểm tín hiệu được đo bằng giây dấu phẩy động.

Chỉ bắt buộc đối với các phản hồi VMAP chứa quảng cáo trong video sử dụng độ lệch thời gian theo vị trí. Đây là trường hợp hiếm gặp.

content_duration_seconds Optional Thời lượng nội dung tính bằng giây.

Chỉ bắt buộc đối với các phản hồi VMAP chứa quảng cáo giữa video sử dụng độ lệch thời gian theo tỷ lệ phần trăm. Đây là trường hợp hiếm gặp.

manifest_type Optional Định dạng của luồng quảng cáo đang được yêu cầu, hls hoặc dash. Giá trị mặc định là hls.
dai_options Optional Các tuỳ chọn bổ sung kiểm soát các khía cạnh về cách hiển thị tệp kê khai. Xem thông tin chi tiết bên dưới
Hồ sơ mã hoá
profile_name Required Giá trị nhận dạng cho Hồ sơ mã hoá này. Giá trị này có thể là bất kỳ chuỗi nào bạn chọn, nhưng bạn không thể có nhiều hồ sơ mã hoá có cùng tên trên cùng một luồng.
type Required Loại mã hoá của luồng do hồ sơ mã hoá này mô tả. Các loại nội dung là: media, iframe, subtitles.
container_type Required Định dạng vùng chứa mà hồ sơ mã hoá này sử dụng. Các định dạng vùng chứa là: mpeg2ts, fmp4cmaf, hls_packed_audio
video_settings Optional Bắt buộc nếu loại hồ sơ mã hoá là iframe. Nếu không, chỉ được phép nếu loại nội dung nghe nhìn chứa video. Xem chi tiết bên dưới
audio_settings Optional Bắt buộc nếu hồ sơ mã hoá chứa âm thanh. Chỉ được phép nếu loại là nội dung nghe nhìn. Xem thông tin chi tiết bên dưới
subtitle_settings Optional Bắt buộc nếu hồ sơ mã hoá chứa phụ đề. Xem thông tin chi tiết bên dưới
Cài đặt video
codec Required Chuỗi bộ mã hoá và giải mã RFC6381.

Ví dụ: avc1.4d000c

bitrate Required Một số nguyên biểu thị tốc độ bit video tối đa của hồ sơ này tính bằng byte mỗi giây.
frames_per_second Required Tốc độ khung hình dấu phẩy động của video.
resolution Required Giá trị được mã hoá JSON chứa "chiều rộng" và "chiều cao" của video tính bằng pixel.

Ví dụ: {"width": 640, "height": 320}

Cài đặt âm thanh
codec Required Chuỗi bộ mã hoá và giải mã RFC6381.

Ví dụ: mp4a.40.5

bitrate Required Một số nguyên biểu thị tốc độ bit âm thanh tối đa của hồ sơ này tính bằng byte mỗi giây.

Ví dụ: 300000

channels Required Số nguyên đại diện cho số lượng kênh âm thanh, bao gồm cả kênh tần số thấp.
sample_rate Required Một số nguyên đại diện cho tốc độ lấy mẫu âm thanh tính bằng hertz.

Ví dụ: 4800

Cài đặt phụ đề
format Required Định dạng tệp mà phụ đề trong băng tần sử dụng. Giá trị được hỗ trợ là webvtt hoặc ttml.
language Optional Ngôn ngữ phụ đề dưới dạng chuỗi ngôn ngữ RFC5646. Nếu được cung cấp, giá trị này chỉ được dùng để kết xuất DASH.

Ví dụ: en-us

Tuỳ chọn DAI
dash_profile Optional Hồ sơ MPEG-DASH để áp dụng cho tệp kê khai nhóm quảng cáo. Chế độ cài đặt này chỉ dùng cho tệp kê khai DASH. Giá trị được phép là live hoặc on-demand. Giá trị mặc định là on-demand.

Giá trị live tương ứng với hồ sơ MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011".

Giá trị on-demand tương ứng với hồ sơ MPEG-DASH urn:mpeg:dash:profile:isoff-on-demand:2011.

ad_pod_timeout Optional Thời gian tối đa để chọn quảng cáo và tạo nhóm quảng cáo, tính bằng giây dấu phẩy động. Sau khoảng thời gian này, Ad Manager sẽ trả về mọi quảng cáo đã được chọn trong phản hồi ad_pods và ngừng xử lý.
sam_id Optional Chỉ định một khoá gỡ lỗi thay thế có thể dùng để tra cứu các phiên trong công cụ giám sát hoạt động truyền.

Phản hồi

Tham số phản hồi
valid_for Thời lượng có hiệu lực của các danh sách phát nhóm quảng cáo này ở định dạng dhms (ngày, giờ, phút, giây).
valid_until Ngày và giờ mà các danh sách phát nhóm quảng cáo này có hiệu lực dưới dạng chuỗi ngày giờ theo chuẩn ISO8601, ở định dạng yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm.
ad_pods Danh sách các nhóm quảng cáo được chọn cho luồng này.
Nhóm quảng cáo
manifest_uris Chỉ dành cho luồng HLS. Bản đồ ánh xạ mã nhận dạng hồ sơ mã hoá đến URI tệp kê khai HLS.
mpd_uri Chỉ dành cho luồng DASH. URI của MPD DASH.
type Loại nhóm quảng cáo. Các loại nhóm quảng cáo là: pre, mid hoặc post.
start Chỉ dành cho nhóm quảng cáo trong video. Vị trí trong luồng mà bạn nên chèn nhóm quảng cáo này, tính bằng giây dấu phẩy động.
duration Thời lượng của nhóm quảng cáo này tính bằng giây dấu phẩy động.
midroll_index Chỉ dành cho nhóm quảng cáo trong video. Chỉ mục của nhóm quảng cáo trong video hiện tại. Quá trình lập chỉ mục bắt đầu bằng 1.

Yêu cầu mẫu (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

Nội dung yêu cầu mẫu

Đây là nội dung của request-body.json được tham chiếu trong lệnh gọi cURL ở trên.

{
  "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"
}

Ví dụ về phản hồi

{
  "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
    }
  ]
}

Kết hợp các nhóm quảng cáo vào nội dung

Quá trình ghép nối các nhóm quảng cáo vào luồng nội dung của bạn sẽ khác nhau tuỳ thuộc vào cách triển khai, định dạng luồng và các tính năng mà bạn chọn triển khai từ thông số kỹ thuật của định dạng. Các quy trình làm việc sau đây là đề xuất về cách xử lý quy trình này. Thông tin chi tiết chính xác về cách triển khai có thể khác nhau, tuỳ thuộc vào nhu cầu kinh doanh và luồng nội dung của bạn.

Luồng HLS

Nếu bạn đang nối một luồng ở định dạng HLS, thì luồng nội dung của bạn sẽ là một danh sách phát nhiều biến thể gồm các đường liên kết đến các tệp kê khai luồng riêng biệt, mỗi tệp cho một hồ sơ mã hoá. Bạn cần chèn các nhóm quảng cáo vào từng tệp kê khai biến thể này. Một cách để thực hiện việc này là chuẩn bị tất cả tệp kê khai biến thể và chuyển các tệp đó đến một Mạng phân phối nội dung (CDN) để lưu trữ. Danh sách phát nhiều biến thể cuối cùng là một tập hợp các đường liên kết đến các tệp kê khai được lưu trữ trên CDN này.

Lặp lại các hồ sơ mã hoá

Đối với mỗi hồ sơ mã hoá, hãy thu thập tất cả tệp kê khai nhóm quảng cáo được liên kết từ phản hồi của Ad Manager, cùng với thời gian bắt đầu liên kết. Đối với các nhóm quảng cáo trước video, hãy đặt thời gian bắt đầu thành 0. Đối với quảng cáo cuối video, hãy sử dụng thời lượng của nội dung làm thời gian bắt đầu của nhóm quảng cáo. Xác định luồng biến thể trong danh sách phát nhiều biến thể khớp với chế độ cài đặt âm thanh và video của từng hồ sơ mã hoá.

Mảng nhóm quảng cáo mẫu
"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
    }
  ]
Ví dụ về danh sách phát nội dung đa biến thể
#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
Ví dụ về dữ liệu biến thể được thu thập
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

Chèn quảng cáo vào từng tệp kê khai biến thể

Đối với mỗi luồng biến thể, hãy xem qua các phân đoạn của tệp kê khai nội dung, đồng thời ghi lại tổng thời gian nội dung đã trôi qua. Khi bạn đến vị trí bắt đầu của một nhóm quảng cáo, hãy trích xuất danh sách phân đoạn từ tệp kê khai của nhóm quảng cáo, gói danh sách phân đoạn trong hai thẻ #EXT-X-DISCONTINUITY và chèn danh sách đó vào vị trí hiện tại trong tệp kê khai nội dung. Tiếp tục quy trình này cho đến khi tất cả các nhóm quảng cáo và luồng biến thể được xử lý.

Tệp kê khai thu được phải tuân thủ tiêu chuẩn HLS. Do đó, tuỳ thuộc vào các tính năng của thông số kỹ thuật mà tệp kê khai nội dung của bạn kết hợp, bạn có thể cần phải thực hiện một lần truyền cuối cùng qua tệp kê khai kết hợp để sửa số thứ tự nội dung nghe nhìn, thời lượng nội dung, số thứ tự không liên tục và mọi thẻ khác cần được cập nhật để tính đến các phân đoạn quảng cáo mới. Sau khi khắc phục mọi điểm khác biệt với tiêu chuẩn, hãy đẩy từng tệp kê khai biến thể dành riêng cho người dùng đến CDN để lưu trữ.

Nếu tệp kê khai nội dung của bạn được mã hoá, bạn cần lưu trữ khoá mã hoá gần đây nhất được tìm thấy trước khi bắt đầu nhóm quảng cáo hiện tại trong thẻ #EXT-X-KEY. Sau đó, bạn cần thêm thẻ #EXT-X-KEY:METHOD=NONE để xoá phương thức mã hoá trước phân đoạn đầu tiên của mỗi nhóm quảng cáo. Cuối cùng, bạn phải thêm một bản sao của thẻ #EXT-X-KEY đã lưu trữ trước phân đoạn nội dung đầu tiên sau mỗi nhóm quảng cáo để khôi phục quá trình mã hoá nội dung.

Ví dụ về dữ liệu biến thể được thu thập
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
Tệp kê khai nội dung mẫu

Đây là nội dung của tệp kê khai https://{...}/1080p.m3u8 được liệt kê trong dữ liệu biến thể đã thu thập.

#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
{...}
Tệp kê khai nhóm quảng cáo mẫu

Đây là nội dung của tệp kê khai https://dai.google.com/{...}/pod/1/profile/1080p.m3u8 được liệt kê trong dữ liệu biến thể đã thu thập.

#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
Ví dụ về tệp kê khai biến thể được ghép nối

Đây sẽ là tệp kê khai biến thể được ghép nối, được chuyển đến CDN và được lưu trữ tại 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
{...}

Tạo danh sách phát đa biến thể

Thu thập địa chỉ CDN cho từng tệp kê khai biến thể đã hoàn tất, cùng với thông tin chi tiết về hồ sơ mã hoá phù hợp, sau đó tập hợp kết quả vào một tệp kê khai nhiều biến thể mới. Tệp kê khai dành riêng cho người dùng này được trả về dưới dạng phản hồi cho yêu cầu tệp kê khai mà bạn nhận được ở Bước 1.

Ví dụ về danh sách phát đa biến thể hoàn chỉnh
#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

Luồng MPEG DASH

Nếu đang nối một luồng ở định dạng MPEG DASH, bạn chỉ cần tạo một tệp. Điều này có thể giúp các luồng DASH dễ dàng được ghép nối hơn so với HLS.

Tệp mô tả nội dung đa phương tiện MPEG DASH (MPD) được chuẩn bị đúng cách phải bao gồm một số giai đoạn, mỗi giai đoạn chứa nhiều nội dung trình bày. Mỗi nội dung đại diện phải khớp với một trong các hồ sơ mã hoá của bạn. Mỗi nhóm quảng cáo được trả về từ Ad Manager cũng là một tệp MPD chứa một chuỗi các khoảng thời gian có nội dung đại diện phù hợp.

Để nối các tệp MPD này với nhau, hãy bắt đầu bằng cách ghi lại thời gian bắt đầu của từng nhóm quảng cáo. Đối với quảng cáo trước video, hãy chèn các khoảng thời gian của nhóm quảng cáo trước video trước mọi khoảng thời gian nội dung. Đối với quảng cáo sau video, hãy chèn các khoảng thời gian của nhóm quảng cáo sau video sau tất cả các khoảng thời gian nội dung. Lặp lại các khoảng thời gian trong MPD nội dung, theo dõi thời gian phát đã trôi qua cho tất cả các khoảng thời gian nội dung đã xử lý. Khi bạn đạt đến ranh giới giữa các khoảng thời gian tương ứng với thời gian bắt đầu của một nhóm quảng cáo, hãy chèn các khoảng thời gian từ tệp MPD của nhóm quảng cáo trong video tương ứng tại ranh giới đó.

Tệp MPD đã nối cuối cùng phải tuân thủ đầy đủ các thông số kỹ thuật MPEG_DASH, vì vậy, bạn có thể cần lặp lại tệp cuối cùng một lần nữa để sửa mọi thời gian bắt đầu khoảng thời gian, sửa thời lượng trình bày nội dung nghe nhìn để tính đến khoảng thời gian quảng cáo mới chèn và giải quyết mọi xung đột khác có thể phát sinh từ quá trình nối.

MPD nội dung mẫu

<?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>

Ví dụ về tệp JSON của nhóm quảng cáo

[{
  "mpd_uri": "https://{...}pod/1.mpd",
  "type": "mid",
  "start": 15.0,
  "duration": 15.0,
  "midroll_index": 1
}]

MPD của nhóm quảng cáo mẫu

Đây là nội dung của mpd_uri từ tệp JSON của nhóm quảng cáo ở trên.

<?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>

Ví dụ về MPD được nối

Hãy phân phát tệp này dưới dạng phản hồi cho yêu cầu tệp kê khai luồng ban đầu.

<?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>

Tài nguyên khác