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

API phân phát nhóm cho phép truy cập vào các nhóm quảng cáo dạng video có tốc độ bit thích ứng đã chuẩn bị sao cho chúng có thể được ghép trực tiếp thành HLS (Phát trực tuyến dựa trên HTTP) hoặc Danh sách phát nội dung nghe nhìn MPEG-DASH.

Hướng dẫn này tập trung vào việc triển khai một thao tác cơ bản đối với tệp kê khai Phân phát nhóm cho 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 để theo dõi tệp kê khai từ ứng dụng trình phát video. Ở mức 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. Mã luồng này được dùng để xác định phiên truyền trực tuyến đến Ad Manager trong yêu cầu nhóm quảng cáo của bạn.

Bạn cũng cần thu thập một số thông tin khác để xác định chính sách luồng nội dung, ví dụ: Content ID.

Ví dụ về điểm cuối của 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 ứng dụng.
content_id Một 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 lựa chọn sau:
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 Content ID thu thập được từ yêu cầu tệp kê khai để chọn nội dung để kết hợp 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 gửi yêu cầu POST cho quảng cáo điểm cuối của nhóm, truyền hồ sơ mã hoá, thẻ quảng cáo và tiêu chí nhắm mục tiêu được yêu cầu tham số. 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 một 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 cũng như thông tin về thời điểm và mà chúng nên được chèn 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.

Nội dung JSON

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

Để việc phát lại liền mạch nhất có thể, bộ cài đặt này phải phù hợp với hồ sơ mã hoá dùng trong luồng nội dung của bạn.

ad_tag Required Một 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 các điểm chèn quảng cáo trong video sẽ được chèn vào. Điểm dừng được tính 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 vị trí. Trường hợp này không phổ biến.

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 trong video sử dụng phần trăm thời gian. Trường hợp này không phổ biến.

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 trong 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 trong cùng một luồng.
type Required Loại mã hoá của luồng được mô tả bằng hồ sơ mã hoá này. 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 phương tiện chứa video. Xem hãy xem chi tiết ở bên dưới
audio_settings Optional Bắt buộc nếu hồ sơ mã hoá có chứa âm thanh. Chỉ được phép nếu loại này là nội dung đa phương tiệ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á có 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 cấu hình này tính bằng byte trên mỗi giây.
frames_per_second Required FPS có dấu phẩy động của video.
resolution Required Một 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 cấu hình này tính bằng byte trên mỗi giây.

Ví dụ: 300000

channels Required Số nguyên thể hiện số kênh âm thanh, có tần số thấp các kênh.
sample_rate Required Số nguyên thể hiện 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. Sau đây là các giá trị được hỗ trợ: 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, thì đây là giá trị chỉ được dùng để kết xuất DASH.

Ví dụ: en-us

Tùy chọn DAI
dash_profile Optional Cấu hình MPEG-DASH để áp dụng cho tệp kê khai nhóm quảng cáo. Chế độ cài đặt này dùng cho Chỉ tệp kê khai DASH. Các 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 cấu hình MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011".

Giá trị on-demand tương ứng với cấu hình 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 ở định dạng quảng cáo nổi vài giây. Sau khi thời gian này trôi qua, Ad Manager sẽ trả về bất kỳ giá trị nào quảng cáo đã được chọn trong phản hồi ad_pods và ngừng đang 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 hoạt động phát trực tuyến giám sát.

Phản hồi

Thông số phản hồi
valid_for Thời lượng của các danh sách phát nhóm quảng cáo này hợp lệ trong dhms Định dạng (ngày, giờ, phút, giây).
valid_until Ngày và giờ cho đến khi các danh sách phát nhóm quảng cáo này hợp lệ theo định dạng ISO8601 chuỗi ngày giờ, trong yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm .
ad_pods Danh sách 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. Sơ đồ liên kết mã hồ sơ mã hoá với các URI tệp kê khai HLS.
mpd_uri Chỉ dành cho luồng DASH. URI của DASH MPD.
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à nhóm quảng cáo này cần được chèn vào, trong dấu phẩy động giây.
duration Thời lượng của nhóm quảng cáo này tính bằng giây có 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 hiện tại trong video. 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

Ví dụ về nội dung yêu cầ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
    }
  ]
}

Ghép các nhóm quảng cáo vào nội dung

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

Luồng HLS

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

Lặp lại 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 có liên quan. Đối với quảng cáo trước video nhóm, hãy đặt thời gian bắt đầu thành 0. Đối với cuối video, hãy sử dụng thời lượng của nội dung như thời gian bắt đầu của nhóm quảng cáo. Xác định luồng biến thể trong đa biến thể danh sách phát 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 mỗi 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, duy trì một tổng thời gian nội dung đã chạy. Khi bạn đến vị trí bắt đầu của nhóm quảng cáo, trích xuất danh sách các 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 2 thẻ #EXT-X-DISCONTINUITY và chèn danh sách này vào vị trí hiện tại trong tệp kê khai nội dung. Tiếp tục quá trình này cho đến khi tất cả quảng cáo các nhóm và luồng biến thể đã được xử lý.

Tệp kê khai kết quả phải phù hợp với tiêu chuẩn HLS. Do đó, tuỳ thuộc vào dựa trên các tính năng của quy cách mà tệp kê khai nội dung của bạn kết hợp, bạn có thể cần phải truyền lần cuối cùng tệp kê khai kết hợp để sửa nội dung nghe nhìn số thứ tự, thời lượng nội dung, số thứ tự gián đoạn và bất kỳ các thẻ khác mà bạn cần cập nhật để xem xét các phân đoạn quảng cáo mới. Sau khi khắc phục mọi sự khác biệt so với tiêu chuẩn, hãy gửi từng tệp kê khai biến thể dành riêng cho người dùng vào CDN của bạn để 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ữ lớp mã hoá mới 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 để loại bỏ lớp 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 bản sao của Thẻ #EXT-X-KEY 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 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
{...}
Ví dụ về tệp kê khai nhóm quảng cáo

Đâ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ể ghép

Đây sẽ là kết quả tệp kê khai biến thể được ghép, đượ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 mỗi tệp kê khai biến thể hoàn chỉnh, cùng với chi tiết hồ sơ mã hoá phù hợp và tập hợp kết quả thành một tệp kê khai đa biến thể. 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 vào 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ể cuối cùng
#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 bạn đang ghép một luồng ở định dạng MPEG DASH, bạn chỉ cần tạo một tệp duy nhất. Việc này có thể giúp việc ghép các luồng DASH dễ dàng hơn so với HLS.

Tệp mô tả bản trình bày nội dung nghe nhìn (MPD) MPEG DASH được chuẩn bị đúng cách phải gồm nhiều dấu chấm, mỗi dấu chấm chứa nhiều cách biểu diễn. Một 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 chuỗi các dấu chấm với đại diện trùng khớp.

Để ghép 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 cho 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 vào trước bất kỳ nội dung nào 6 tháng. Đối với quảng cáo cuối video, hãy chèn các khoảng thời gian của nhóm quảng cáo sau video vào sau tất cả nội dung . Lặp lại các giai đoạn trong MPD của 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 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 trùng khớp tại ranh giới đó.

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

MPD của 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 trong 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 ghép

Dùng tính năng này làm 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