API phân phát nhóm cho phép bạ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ị theo cách chúng 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 mà người dùng nhìn thấy.
Hướng dẫn này tập trung vào việc triển khai 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 thao tác tệp kê khai phải cung cấp một điểm cuối API để theo dõi 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 ứng dụng. Mã luồng này dùng để xác định phiên truyền trực tuyến đến Ad Manager trong các yêu cầu 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ã nội dung.
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 của ứng dụng. | ||||
content_id |
Mã 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 cách sau:
|
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 để ghé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 đến điểm cuối của nhóm quảng cáo, chuyển các cấu hình mã hoá, thẻ quảng cáo và thông số nhắm mục tiêu đượ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 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 và vị trí bạn nên chèn các nhóm quảng cáo này vào nội dung của mình.
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. |
Nội dung JSON
Thông số nội dung | ||
---|---|---|
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
cho mỗi điểm chèn quảng cáo. Xem thông tin chi tiết bên dưới
Để phát liền mạch nhất có thể, bộ cấu hình này phải khớp với nhóm cấu hình mã hoá 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 có chèn quảng cáo trong video. Điểm dừng được tính bằng giây dấu phẩy động.
Chỉ bắt buộc đối với những phản hồi VMAP (Danh sách phát video nhiều quảng cáo) có chứa quảng cáo trong video có mức chênh 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 nội dung phản hồi VMAP (Danh sách phát video nhiều quảng cáo) có chứa quảng cáo trong video sử dụng độ lệch thời gian theo tỷ lệ phần trăm. Trường hợp này không phổ biến. |
manifest_type |
Optional |
Định dạng của các 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 của cách kết xuất 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à chuỗi bất kỳ mà 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 được mô tả bởi hồ sơ mã hoá này. Các loại nội dung là: media , iframe , subtitles .
|
container_type |
Required |
Định dạng vùng chứa được 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, bạn chỉ được phép sử dụng cách này nếu loại nội dung đa phương tiện chứa video. Xem thông tin 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ụ: |
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/giây. |
frames_per_second |
Required |
FPS với dấu phẩy động của video. |
resolution |
Required |
Giá trị được mã hoá JSON có chứa `chiều rộng` và `chiều cao` của video tính bằng pixel.
Ví dụ: |
Cài đặt âm thanh | ||
codec |
Required |
Chuỗi bộ mã hoá và giải mã RFC6381.
Ví dụ: |
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/giây.
Ví dụ: |
channels |
Required |
Một số nguyên thể hiện số lượng kênh âm thanh, bao gồm cả các kênh tần số thấp. |
sample_rate |
Required |
Một số nguyên thể hiện tốc độ lấy mẫu âm thanh tính bằng Hertz.
Ví dụ: |
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 để hiển thị DASH.
Ví dụ: |
Tùy chọn DAI (Chèn quảng cáo động) | ||
dash_profile |
Optional |
Hồ sơ MPEG-DASH để áp dụng cho tệp kê khai của nhóm quảng cáo. Chế độ cài đặt này chỉ dùng cho
các 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ị
Giá trị |
ad_pod_timeout |
Optional |
Thời gian tối đa dành cho việc 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 khi thời gian này trôi qua, Ad Manager sẽ trả về mọi quảng cáo đã 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 trình giám sát hoạt động phát trực tuyến. |
Phản hồi
Thông số phản hồi | |
---|---|
valid_for |
Thời lượng hợp lệ 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ờ ISO8601, ở định dạng yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm .
|
ad_pods |
Danh sách nhóm quảng cáo đã chọn cho luồng này. |
Nhóm quảng cáo | |
manifest_uris |
Chỉ dành cho luồng HLS. Bản đồ mã hồ sơ mã hoá với 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 sẽ 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. |
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 từ 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
}
]
}
Ghép các nhóm quảng cáo vào nội dung
Quy trình ghép nhóm quảng cáo vào luồng nội dung sẽ khác nhau tuỳ thuộc vào cách triển khai của bạn, định dạng luồng và những tính năng bạn chọn triển khai từ quy cách của định dạng. Các quy trình công việc sau đây là những đề xuất về cách xử lý quy trình này. Các 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à luồng nội dung của bạn.
Luồng dữ liệu HLS
Nếu bạn đang ghép 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 đa 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 đường liên kết 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. Có một cách để 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 kê khai đó đến Mạng phân phối nội dung (CDN) để 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 được lưu trữ trên CDN này.
Lặp lại nhiều lần mã hoá hồ sơ
Đố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 quan từ phản hồi của Ad Manager, cùng với thời gian bắt đầu liên quan. Đối với 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 sau 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 đa biến thể phù hợp với chế độ cài đặt âm thanh và video của từng hồ sơ mã hoá.
Ví dụ về mảng nhóm quảng cáo
"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 nhiều 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 đi qua các phân đoạn của tệp kê khai nội dung, nhằm duy trì tổng thời gian chạy nội dung đã trôi qua. Khi bạn đến vị trí bắt đầu của nhóm quảng cáo, hãy 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 các phân đoạn trong 2 thẻ #EXT-X-DISCONTINUITY
và chèn danh sách tại 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ả các nhóm quảng cáo và luồng biến thể đều được xử lý.
Tệp kê khai thu được phải tuân theo tiêu chuẩn HLS. Do đó, tuỳ thuộc vào tính năng 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 truyền cuối cùng qua tệp kê khai kết hợp để sửa số thứ tự nội dung đa phương tiện, thời lượng nội dung, số thứ tự gián đoạn và bất kỳ thẻ nào khác cần cập nhật để tính đến phân đoạn quảng cáo mới. Sau khi khắc phục xong 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 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ữ khoá mã hoá gần đây nhất xuất hiện trước khi nhóm quảng cáo hiện tại bắt đầu 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
đã 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 tính năng 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ể được 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à tệp kê khai biến thể ghép nối, được truyề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
{...}
Xây dựng 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 thông tin chi tiết về hồ sơ mã hoá phù hợp và tập hợp kết quả vào một tệp kê khai đa 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 trong 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 đ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. Điều này có thể giúp việc ghép các luồng DASH (Truyền phát thích ứng động qua HTTP) dễ dàng hơn so với HLS.
Tệp mô tả bản trình bày nội dung đa phương tiện (MPD) MPEG DASH được chuẩn bị đúng cách phải bao gồm nhiều khoảng thời gian, mỗi khoảng thời gian chứa nhiều lần biểu diễn. Mỗi bản trình bày 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 do Ad Manager trả về cũng là một tệp MPD chứa trình tự các dấu chấm với các bản trình bày phù hợp.
Để ghép các tệp MPD này lại 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 khoảng thời gian của nhóm quảng cáo trước video trước bất kỳ khoảng thời gian nội dung nào. Đối với quảng cáo cuối video, hãy chèn 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 qua 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 phù hợp tại ranh giới đó.
Tệp MPD ghép sau cùng phải hoàn toàn tuân thủ 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 bằng cách 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 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 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
}]
Ví dụ về MPD của nhóm quảng cáo
Đây là nội dung của mpd_uri
trong 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 ghép
Đóng vai trò này làm phản hồi của bạn 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
- Phân phát nhóm bằng SDK IMA:
- Nhóm phân phát nội dung phát bằng API DAI