Tổng quan
Web receiver SDK có tính năng hỗ trợ gốc cho các điểm chèn quảng cáo và quảng cáo đồng hành trong một luồng nội dung nghe nhìn nhất định. Lớp này cung cấp các API để đặt vị trí quảng cáo, nguồn quảng cáo,
hành vi của điểm chèn quảng cáo và các đoạn ngắt quảng cáo liên quan. Trong hướng dẫn này,
Break
là khoảng thời gian phát, chứa một hoặc nhiều quảng cáo hoặc đoạn quảng cáo đệm, và
mỗi quảng cáo hoặc đoạn quảng cáo đệm được gọi là
BreakClip
.
Những điểm chèn này có liên quan đến nội dung nghe nhìn đang được tải hoặc phát.
Loại quảng cáo
SDK Web receiver hỗ trợ tính năng chèn quảng cáo phía máy khách (CSAI) và tính năng chèn quảng cáo bằng máy chủ (SSAI). Ứng dụng có thể đặt quảng cáo được ứng dụng ghép nối theo cách thủ công hoặc trích xuất từ các tệp mẫu VAST và VMAP. Bạn phải chỉ định quảng cáo do máy chủ ghép theo cách thủ công trước khi nội dung tải dưới dạng quảng cáo được nhúng hoặc quảng cáo động trong khi phát nội dung dưới dạng quảng cáo mở rộng được nhúng. Cách triển khai cho từng loại quảng cáo này được mô tả chi tiết bên dưới.
được ghép bởi máy khách theo cách thủ công
Điểm chèn quảng cáo được ghép theo cách thủ công với ứng dụng là một loại điểm chèn quảng cáo được ứng dụng ghép với nhau và được ứng dụng chỉ định theo cách thủ công bằng cách sử dụng các API SDK. Loại quảng cáo này không được nhúng trong luồng của nội dung chính. BreakClip
phải cung cấp
contentId
là URL trỏ đến nội dung quảng cáo,
contentType
mô tả định dạng của nội dung quảng cáo và
title
.
Break
phải có isEmbedded
và expanded
được đặt thành giá trị mặc định false
. Bạn có thể đặt position
thành điểm chèn quảng cáo trước video, trong video hoặc sau video (xem thêm trong mục vị trí điểm chèn quảng cáo). Khi chuẩn bị
quảng cáo để phát, SDK Trình thu nhận web sẽ tạo một thực thể trình phát khác để tải
và phát nội dung quảng cáo. Những điểm chèn này đòi hỏi phải có stitched timeline
và phải được thêm tĩnh (xem thêm trong phần chèn quảng cáo). Mẫu bên dưới cho thấy cách triển khai cơ bản của một quảng cáo chèn ứng dụng theo cách thủ công:
// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.m3u8';
clipClient.contentType = 'application/vnd.apple.mpegurl';
// Optional: Used when HLS ad container formats differ from the main content's.
clipClient.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;
// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
'break_postroll_client', ['bc_client'], -1);
breakPostrollClient.isEmbedded = false; // Optional: default is false.
breakPostrollClient.expanded = false; // Optional: default is false.
VAST
SDK bộ nhận quảng cáo trên web hỗ trợ việc thêm quảng cáo VAST (Mẫu phân phát quảng cáo dạng video) chuẩn IAB. Khi được cung cấp, mẫu XML sẽ được phân tích cú pháp để tạo một đoạn ngắt sau đó được ghép bởi máy khách khi vào điểm chèn quảng cáo.
Để tạo quảng cáo VAST, ứng dụng nhận phải tạo
VastAdsRequest
và chỉ định quảng cáo đó trong thuộc tính
BreakClip
vastAdsRequest
. Đối tượng VastAdsRequest
phải có thuộc tính adsResponse
(chuỗi đại diện của chính mẫu XML) hoặc adTagUrl
(URL nơi lưu trữ mẫu XML). Nếu URL được chỉ định, SDK sẽ xử lý việc tìm nạp mẫu. Break
đóng gói tuân theo các quy ước đối với quảng cáo do ứng dụng đính kèm. Bạn có thể thêm những quảng cáo này cùng với các quảng cáo được ứng dụng theo cách thủ công khác trong cùng một điểm chèn hoặc trong các điểm chèn riêng biệt cho cùng một đoạn nội dung. Mẫu bên dưới cho thấy cách triển khai cơ bản của quảng cáo VAST:
// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/ads.xml'
// Create the BreakClip.
let clipVast = new cast.framework.messages.BreakClip('bc_vast');
clipVast.vastAdsRequest = vastTemplate;
// Create the Break using the BreakClip id above.
let breakPostrollVast = new cast.framework.messages.Break(
'break_postroll_vast', ['bc_vast'], -1);
breakPostrollVast.isEmbedded = false; // Optional: default is false.
breakPostrollVast.expanded = false; // Optional: default is false.
Khi bạn nhập một Break
có chứa VAST BreakClip
, SDK Bộ nhận web sẽ tuỳ ý tìm nạp và sau đó phân tích cú pháp mẫu. Trong khi phân tích cú pháp, SDK sẽ tạo một BreakClip
mới và điền sẵn các giá trị đã trích xuất từ mẫu vào đó, chẳng hạn như contentId
, contentType
, title
, duration
, whenSkippable
và clickThroughUrl
. id
cho đoạn ngắt đã tạo được
đặt thành GENERATED:N
, trong đó N
là một số nguyên tăng thêm 1
cho mỗi đoạn ngắt điểm chèn
VAST mới được tạo bắt đầu từ 0
. Sau đó, quảng cáo đã tạo sẽ được thêm vào
mảng BreakClip
. Sau đó, mỗi id
của đoạn ngắt đoạn VAST trong Break
hiện tại sẽ được thay thế bằng id
của đoạn ngắt đoạn đã tạo tương ứng. Các đoạn mã dưới đây minh hoạ những thay đổi trong thông báo MEDIA_STATUS
liên quan đến quảng cáo trước và sau khi chuyển một điểm chèn quảng cáo đó.
Thông tin về Break
và BreakClip
trước khi bắt đầu chèn quảng cáo VAST.
"breaks": [
{
"id": "break_postroll_vast",
"breakClipIds": [
"bc_vast"
],
"position": 0,
"isWatched": false
}
],
"breakClips": [
{
"id": "bc_vast"
}
]
Thông tin về Break
và BreakClip
sau khi nhập quảng cáo xen giữa với quảng cáo VAST.
"breaks": [
{
"id": "break_postroll_vast",
"breakClipIds": [
"GENERATED:0"
],
"position": 0,
"isWatched": true
}
],
"breakClips": [
{
"id": "bc_vast"
},
{
"id": "GENERATED:0",
"contentId": "https://example.com/break-clip-1.mpd",
"contentType": "application/dash+xml",
"title": "Ad Title Extracted from Template",
"duration": 10,
"whenSkippable": 5,
"clickThroughUrl": "https://example.com/ad-target"
}
]
VMAP
SDK bộ thu trên web hỗ trợ tiêu chuẩn VMAP (Danh sách phát video nhiều quảng cáo) của IAB. Khi VMAP (Danh sách phát video nhiều quảng cáo) được cung cấp, SDK Trình thu nhận web sẽ phân tích cú pháp phản hồi VMAP (Danh sách phát video nhiều quảng cáo) và tạo đối tượng Break
được ghép bởi ứng dụng cho mọi mục nhập <AdBreak>
trong phản hồi. Phương thức này cũng sẽ tạo BreakClips
thích hợp với một đối tượng vastAdsRequest
cho mỗi mục nhập <AdSource>
được cung cấp trong VMAP. Để bật VMAP (Danh sách phát video nhiều quảng cáo) nhằm chèn quảng cáo vào nội dung của bạn, ứng dụng phải tạo một đối tượng VastAdsRequest
và gán đối tượng đó cho thuộc tính vmapAdsRequest
của MediaInformation
trong LoadRequestData
.
Bạn phải chèn những quảng cáo này tĩnh (xem thêm trong phần chèn quảng cáo). Dưới đây là một đoạn mã mô tả việc tạo yêu cầu VMAP.
// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/vmap.xml'
// Add it to the MediaInformation of the LoadRequest.
loadRequestData.media.vmapAdsRequest = vastTemplate;
đã nhúng
Điểm chèn quảng cáo được nhúng là một loại điểm chèn quảng cáo được ghép phía máy chủ vào luồng nội dung chính. Thời lượng của Break
sẽ bị trừ khỏi thời lượng của nội dung chính khi tính thời lượng của nội dung đa phương tiện.
BreakClip
phải cung cấp
duration
của nội dung quảng cáo và
title
.
Break
phải được đặt isEmbedded
thành true
và expanded
được đặt thành false
. Bạn có thể đặt position
thành điểm chèn quảng cáo trước video hoặc giữa video. Điểm chèn quảng cáo sau video được hỗ trợ với các giá trị position
chính xác là dương. Hãy xem thêm nội dung này trong phần định vị điểm chèn quảng cáo. Khi quảng cáo được kích hoạt để phát, SDK Bộ nhận web sẽ tiếp tục phát luồng khi các phân đoạn quảng cáo được nhúng trong luồng đó. Không có cơ chế tải bổ sung nào cho loại quảng cáo này.
Người dùng sẽ thấy siêu dữ liệu quảng cáo liên quan khi con trỏ vị trí nằm trong phạm vi thời gian quảng cáo. Những điểm chèn này đòi hỏi phải có embedded timeline
và phải được thêm vào
tĩnh (xem thêm trong phần chèn quảng cáo). Mẫu
bên dưới cho thấy cách triển khai cơ bản của một quảng cáo embedded
.
// Create the BreakClip.
let clipEmbedded = new cast.framework.messages.BreakClip('bc_embedded');
clipEmbedded.title = 'The Ad Title to be displayed during playback';
clipEmbedded.duration = 15;
// Create the Break using the BreakClip id above.
let breakPrerollEmbedded = new cast.framework.messages.Break(
'break_preroll_embedded', ['bc_embedded'], 0);
breakPrerollEmbedded.isEmbedded = true;
breakPrerollEmbedded.expanded = false; // Optional: default is false.
mở rộng được nhúng
Điểm chèn quảng cáo mở rộng được nhúng là một loại điểm chèn quảng cáo được ghép phía máy chủ vào luồng nội dung chính. Thời lượng của Break
được đưa vào thời lượng của nội dung chính khi tính thời gian của nội dung đa phương tiện.
BreakClip
phải cung cấp
duration
của nội dung quảng cáo và
title
.
Break
phải đặt isEmbedded
thành true
và expanded
được đặt thành true
. Bạn có thể đặt position
thành điểm chèn quảng cáo trước video hoặc giữa video. Các điểm chèn quảng cáo sau video được hỗ trợ bằng các giá trị position
dương. Hãy xem thêm nội dung này trong phần định vị điểm chèn quảng cáo. Khi quảng cáo được kích hoạt để phát, SDK Bộ nhận web sẽ tiếp tục phát luồng khi các phân đoạn quảng cáo được nhúng trong luồng đó. Không có cơ chế tải bổ sung nào cho loại quảng cáo này.
Người dùng sẽ thấy siêu dữ liệu quảng cáo liên quan khi con trỏ vị trí nằm trong phạm vi thời gian quảng cáo. Những điểm chèn này đòi hỏi phải có embedded timeline
và có thể thêm tĩnh hoặc động (xem thêm trong phần chèn quảng cáo). Mẫu bên dưới cho thấy cách triển khai
cơ bản của quảng cáo embedded expanded
:
// Create the BreakClip.
let clipEmbeddedExpanded =
new cast.framework.messages.BreakClip('bc_embedded_expanded');
clipEmbeddedExpanded.title = 'The Ad Title to be displayed during playback';
clipEmbeddedExpanded.duration = 15;
// Create the Break using the BreakClip id above.
let breakPrerollEmbeddedExpanded = new cast.framework.messages.Break(
'break_preroll_embedded_expanded', ['bc_embedded_expanded'], 0);
breakPrerollEmbeddedExpanded.isEmbedded = true;
breakPrerollEmbeddedExpanded.expanded = true;
Loại dòng thời gian của người chơi
Khi tạo phiên bản trình phát, SDK Trình thu nhận web sẽ chọn loại dòng thời gian để
hỗ trợ phát quảng cáo trong khi phát nội dung. Mỗi tiến trình cho phép thêm một số loại điểm chèn quảng cáo nhất định. Loại tiến trình được xác định bởi các loại quảng cáo có trong thời gian tải trong MediaInformation
của LoadRequestData
.
Nếu có điểm chèn quảng cáo được nhúng, tiến trình embedded
sẽ được chọn. Nếu có điểm chèn quảng cáo
do máy khách ghép nối, thì tiến trình stitched
sẽ được chọn.
Trong trường hợp không có quảng cáo nào, SDK sẽ mặc định sử dụng dòng thời gian embedded
. Sau khi chọn dòng thời gian, bạn sẽ không thể thay đổi tiến trình cho mục nội dung đa phương tiện hiện tại. Bảng dưới đây mô tả chi tiết về từng tiến trình.
Loại tiến trình | Nội dung mô tả |
---|---|
dòng thời gian được nhúng | Biểu thị thời gian phát nội dung nghe nhìn hỗ trợ quảng cáo nhúng vào nội dung chính (điểm chèn quảng cáo được nhúng và điểm chèn quảng cáo mở rộng được nhúng). Khi có một điểm chèn quảng cáo không mở rộng, thời lượng của điểm chèn này sẽ bị trừ khỏi tổng thời lượng của nội dung. Mặt khác, khi có điểm chèn quảng cáo mở rộng, thời gian của điểm chèn quảng cáo đó được coi là một phần của nội dung chính. |
dòng thời gian ghép | Hình ảnh thể hiện thời gian truyền thông hỗ trợ quảng cáo có nguồn từ các tệp nội dung nghe nhìn bên ngoài (điểm chèn quảng cáo bằng ứng dụng thủ công, VAST và VMAP). Khi được thêm vào, thời lượng của điểm chèn quảng cáo không nằm trong thời lượng của nội dung chính. |
Hình 1 đến 3 dưới đây minh hoạ một số nội dung có các loại quảng cáo khác nhau và giá trị dòng thời gian tương ứng. Nội dung được định cấu hình với một điểm chèn quảng cáo trước video chứa hai điểm chèn quảng cáo, cũng như các điểm chèn giữa video và cuối video chứa một đoạn chèn quảng cáo duy nhất. Thời gian theo đồng hồ thông báo tường kể từ khi bắt đầu phát nội dung, thời gian phát nội dung đa phương tiện của nội dung chính và thời gian của đoạn video tạm nghỉ hiện đang phát được căn chỉnh bên dưới mỗi con số.
Định vị điểm chèn quảng cáo
SDK trình thu nhận web cho phép nhà phát triển chỉ định vị trí đặt điểm chèn quảng cáo bằng cách đặt thuộc tính position
của Break
. Giá trị này tương ứng với thời gian phát nội dung đa phương tiện của nội dung chính và có thể dùng để tạo điểm chèn quảng cáo pre-roll
, mid-roll
và post-roll
.
Các thuộc tính này được xác định như sau:
Vị trí ngắt | Nội dung mô tả |
---|---|
trước video | Một điểm chèn quảng cáo được phát trước nội dung chính. Điều này được biểu thị bằng cách đặt breakPosition thành 0 |
trong video | Một điểm chèn quảng cáo được phát giữa nội dung. Điều này được biểu thị bằng cách đặt breakPosition thành thời điểm bắt đầu điểm chèn quảng cáo lớn hơn thời điểm bắt đầu nội dung chính và thời gian kết thúc của điểm chèn quảng cáo nhỏ hơn thời gian kết thúc của nội dung chính. |
sau video | Một điểm chèn quảng cáo được phát sau nội dung chính. Điều này được biểu thị bằng cách đặt breakPosition thành -1 cho tiến trình ghép. Đối với tiến trình được nhúng, breakPosition phải được đặt thành thời lượng của nội dung chính trừ đi thời lượng của điểm chèn quảng cáo. Không hỗ trợ cho nội dung phát trực tiếp. |
Ma trận tương tác
Để tham khảo nhanh, Bảng 1 cho thấy thông tin tổng quan về các loại quảng cáo và khả năng tương thích với các tính năng liên quan đến quảng cáo.
Hỗ trợ tính năng | quảng cáo được ghép bởi máy khách thủ công | VAST | VMAP | quảng cáo được nhúng | quảng cáo mở rộng được nhúng |
---|---|---|---|---|---|
tương thích với | VAST | được ghép bởi máy khách theo cách thủ công | Không áp dụng | mở rộng được nhúng | đã nhúng |
dòng thời gian | có mũi khâu | có mũi khâu | có mũi khâu | đã nhúng | đã nhúng |
chèn quảng cáo | tĩnh | tĩnh | tĩnh | tĩnh | tĩnh, động |
xoá quảng cáo | |||||
quảng cáo trước video | |||||
quảng cáo trong video | |||||
quảng cáo sau video | |||||
bỏ qua quảng cáo | |||||
công cụ chặn tìm kiếm | |||||
trình chặn tải đoạn cắt |
Sự kiện
Khi xảy ra các sự kiện ngắt phím, SDK truyền sẽ gửi các sự kiện thuộc loại BreaksEvent
.
Ứng dụng nhận có thể đăng ký các ứng dụng này bằng API PlayerManager
addEventListener
.
Những sự kiện này có thể được dùng để phân tích và theo dõi việc phát quảng cáo. Khi sử dụng quảng cáo VMAP (Danh sách phát nhiều quảng cáo dạng video) và VAST (Mẫu phân phát quảng cáo dạng video), mọi sự kiện theo dõi chuẩn được cung cấp trong phản hồi sẽ tự động được SDK gửi đi.
Các loại sự kiện được liệt kê trong Bảng 2 cùng với nội dung mô tả chi tiết về thời điểm các loại sự kiện đó được kích hoạt.
Sự kiện ngắt | Nội dung mô tả |
---|---|
BREAK_STARTED |
Được kích hoạt khi thời gian phát nội dung chính hiện tại bằng với
position của một điểm chèn quảng cáo chưa xem. |
BREAK_CLIP_LOADING |
Chỉ được kích hoạt khi đoạn ngắt dòng thời gian được ghép bắt đầu tải. |
BREAK_CLIP_STARTED |
Được kích hoạt khi đoạn ngắt bắt đầu phát. |
BREAK_CLIP_ENDED |
Được kích hoạt khi đoạn ngắt kết thúc. Hệ thống sẽ điền thông tin vào
endedReason
trong các trường hợp sau:
|
BREAK_ENDED |
Được kích hoạt khi đoạn của điểm chèn cuối cùng trong một điểm chèn kết thúc. |
Chèn quảng cáo
SDK truyền cho phép các ứng dụng chèn và xoá quảng cáo tại những thời điểm khác nhau của phiên truyền. Có 2 kiểu chèn quảng cáo là tĩnh và động.
Tính năng chèn quảng cáo tĩnh yêu cầu bạn phải chỉ định quảng cáo trong LoadRequestData
trước khi tạo trình phát. Tính năng chèn quảng cáo động sử dụng API BreakManager
addBreak
để chèn các điểm chèn vào nội dung đã tải. Mỗi loại phương thức chèn tương thích với một số loại quảng cáo nhất định. Tổng quan về khả năng tương thích được cung cấp trong ma trận tương tác.
Chèn quảng cáo tĩnh
Đặc điểm của tính năng chèn quảng cáo tĩnh là thêm siêu dữ liệu quảng cáo phù hợp trước khi tạo trình phát. Thông tin này được cung cấp trong MediaInformation
của LoadRequestData
. Ví dụ: bạn có thể đặt yêu cầu tải này trong yêu cầu tải ban đầu của người gửi đã kết nối hoặc chèn vào bằng ứng dụng Trình nhận web bằng cách chặn yêu cầu LOAD
. Sau khi LoadRequestData
được trả về SDK Bộ thu trên web để xử lý, trình phát sẽ được tạo. Xem thêm về cách tải nội dung nghe nhìn. Mẫu dưới đây minh hoạ một quảng cáo được ghép bởi máy khách theo cách thủ công đang được thêm vào trình chặn yêu cầu LOAD
.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, loadRequestData => {
// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.mp4';
clipClient.contentType = 'video/mp4';
// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
'break_postroll_client', ['bc_client'], -1);
// Set the ad information in the load request data.
let media = loadRequestData.media;
media.breakClips = [clipClient];
media.breaks = [breakPostrollClient];
return loadRequestData;
});
Chèn quảng cáo động
Đặc điểm của tính năng chèn quảng cáo động là đặt một điểm chèn quảng cáo trong khi phát nội dung. Bạn có thể thực hiện việc này bằng cách lấy một thực thể của BreakManager
và gọi API addBreak
. Thao tác này cần tối thiểu 2 tham số, một bản mở rộng được nhúng
Break
và một mảng BreakClip
.
Thuộc tính thứ ba không bắt buộc có trong thuộc tính đó để buộc gửi các thay đổi cho người gửi được kết nối thông qua thông báo truyền tin MediaStatus
khi được đặt thành true
. Khi thêm điểm chèn và đoạn ngắt, mã nhận dạng tương ứng phải là duy nhất. Bạn chỉ có thể thêm những quảng cáo này sau khi đã tạo trình phát. SDK Web receiver sẽ kích hoạt sự kiện
PLAYER_LOADING
sau khi tạo trình phát. Hãy xem ví dụ bên dưới để biết cách sử dụng trình xử lý sự kiện nhằm phản hồi các thay đổi trong siêu dữ liệu ID3 của luồng, đồng thời tạo đối tượng Break
và BreakClip
để chèn vào dòng thời gian.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
playerManager.addEventListener(cast.framework.events.EventType.ID3, (event) => {
// Create the BreakClip.
let clipEmbeddedExpanded = parseBreakClipFromData(event.segmentData);
let breakEmbeddedExpanded = parseExpandedBreakFromData(event.segmentData);
// Add the break and break clip.
breakManager.addBreak(breakEmbeddedExpanded, [clipEmbeddedExpanded]);
});
Xoá quảng cáo động
Để xoá các điểm chèn động, ứng dụng cần gọi removeBreakById
trong khi phát. Hàm này lấy một giá trị nhận dạng chuỗi của điểm chèn để xoá khỏi tiến trình. breakId
được chỉ định phải trỏ đến điểm chèn quảng cáo mở rộng được nhúng. Nếu phát hiện thấy bất kỳ loại điểm chèn quảng cáo nào khác, thì điểm chèn quảng cáo đó vẫn sẽ nằm trong tiến trình. Hãy xem mẫu bên dưới để biết cách loại bỏ điểm chèn quảng cáo.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
breakManager.removeBreakById('break_midroll_embedded_expanded');
Hành vi chèn quảng cáo
SDK xác định một hành vi mặc định khi người chơi vào và rời khỏi sự kiện, đồng thời cung cấp cách tuỳ chỉnh thêm bằng cách sử dụng một số API được cung cấp trong BreakManager
.
Hành vi chèn quảng cáo mặc định
Khi người dùng nhập một Break
thông qua quá trình phát thông thường hoặc bằng cách tìm kiếm qua Break
, SDK sẽ đánh giá xem người dùng đã xem thuộc tính đó hay chưa bằng cách kiểm tra thuộc tính isWatched
. Giá trị mặc định của điểm chèn quảng cáo cho thuộc tính này khi được tạo là false
. Nếu thuộc tính là true
, điểm chèn sẽ không được phát khi được nhập và nội dung chính sẽ tiếp tục phát. Nếu thuộc tính là false
, điểm chèn quảng cáo sẽ phát khi được nhập.
Khi tìm kiếm các điểm chèn trước đây, phương thức triển khai mặc định sẽ lấy tất cả các mục Break
có position
nằm trong giá trị seekFrom
và seekTo
của thao tác tìm kiếm. Trong danh sách điểm chèn này, SDK sẽ phát Break
có position
gần nhất với giá trị seekTo
và có thuộc tính isWatched
được đặt thành false
. Sau đó, thuộc tính isWatched
của điểm chèn đó sẽ được đặt thành true
và trình phát sẽ bắt đầu phát các đoạn của điểm chèn đó. Sau khi xem điểm chèn quảng cáo, nội dung chính sẽ tiếp tục phát từ vị trí seekTo
. Nếu không có điểm chèn nào như vậy, thì sẽ không có điểm chèn nào được phát và nội dung chính sẽ tiếp tục phát ở vị trí seekTo
.
Trong khi phát lại điểm chèn, SDK sẽ phát đi mọi nội dung cập nhật có liên quan đến các ứng dụng người gửi đã kết nối trong MediaStatus
.
Các ứng dụng này sẽ sử dụng thông báo truyền tin để cập nhật giao diện người dùng cho quảng cáo bằng cách đọc thuộc tính breakStatus
. Thuộc tính này chỉ được xác định trong khi phát lại nghỉ giải lao.
Các ứng dụng nhận cũng có thể truy vấn trực tiếp thông tin liên quan đến vị trí của con trỏ phát theo thời gian hiện tại của BreakClip
được hiển thị bằng cách gọi PlayerManager
getBreakClipCurrentTimeSec
.
Tương tự, các ứng dụng có thể truy vấn thời lượng của BreakClip
hiện tại bằng cách gọi getBreakClipDurationSec
.
Hành vi chèn quảng cáo tuỳ chỉnh
Bạn có thể sửa đổi hành vi mặc định cho các điểm chèn và đoạn ngắt bằng cách sử dụng phương thức setBreakClipLoadInterceptor
và setBreakSeekInterceptor
được cung cấp trong BreakManager
.
Công cụ chặn dịch vụ tìm kiếm ngắt
Trình chặn điểm chèn quảng cáo cho phép ứng dụng kiểm soát hành vi tìm kiếm điểm chèn quảng cáo. Hàm này được kích hoạt khi một thao tác tìm kiếm được yêu cầu tìm kiếm tiến hoặc lùi qua một hoặc nhiều điểm ngắt. Khi được gọi, BreakSeekData
sẽ được truyền dưới dạng tham số vào hàm callback. Đối tượng BreakSeekData
chứa một mảng các đối tượng Break
có thuộc tính position
được đặt thành một số trong khoảng thời gian giữa thời gian phát hiện tại được xác định là seekFrom
và thời gian đích tìm kiếm seekTo
.
Trình chặn này cho phép sửa đổi đối tượng Break
trong các điểm chèn tương ứng. Khi được triển khai, tính năng chặn điểm chèn quảng cáo phải chỉ định điểm chèn quảng cáo nào sẽ phát bằng cách trả về một đối tượng BreakSeekData
được sửa đổi (không bắt buộc). Người chơi sẽ tiếp tục chơi tất cả các điểm chèn có trong giá trị trả về. Nếu giá trị null
hoặc không trả về giá trị nào từ bộ chặn tìm kiếm điểm chèn, thì điểm chèn này sẽ bị bỏ qua.
Hãy xem mẫu bên dưới để biết cách triển khai đơn giản cho tính năng chặn (ghi đè hành vi mặc định) để xem tất cả điểm chèn quảng cáo được tìm kiếm, ngoại trừ các điểm chèn quảng cáo đã xem.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
breakManager.setBreakSeekInterceptor((breakSeekData) => {
// Filter the breaks array by removing watched breaks.
const unwatchedBreaks =
breakSeekData.breaks.filter(adBreak => !adBreak.isWatched);
breakSeekData.breaks = unwatchedBreaks;
return breakSeekData;
});
ngắt trình chặn tải đoạn video
Bằng cách sử dụng trình chặn tải đoạn ngắt, bạn có thể sửa đổi đối tượng BreakClip
trước khi bắt đầu phát.
Trình chặn tải đoạn ngắt chỉ được gọi cho điểm ngắt dòng thời gian ghép và có thể được thiết lập bằng cách sử dụng setBreakClipLoadInterceptor
.
Trước khi nhập Break
, trình chặn này được gọi một lần cho mỗi BreakClip
riêng lẻ được xác định trong điểm chèn đó. SDK sẽ truyền đối tượng BreakClip
ban đầu dưới dạng thông số của hàm callback. Sau đó, ứng dụng có thể sửa đổi BreakClip
này rồi trả về để SDK có thể tìm nạp và hiển thị đoạn ngắt với cấu hình đã cập nhật. Nếu null
hoặc không có dữ liệu nào được trả về, thì đoạn ngắt đoạn video sẽ bị bỏ qua.
Hãy xem ví dụ dưới đây để biết cách sửa đổi contentUrl
của các đoạn ngắt bằng lệnh gọi hàm tiện ích getUrlFromClipId
, trong đó id
của BreakClip
được ánh xạ đến một URL.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
breakManager.setBreakClipLoadInterceptor(
(breakClip, breakClipLoadInterceptorContext) => {
// Obtains the URL of a break clip id from a function call.
breakClip.contentUrl = getUrlFromClipId(breakClip.id);
return breakClip;
});
Bỏ qua quảng cáo
SDK Web receiver cung cấp các API để bỏ qua các điểm chèn quảng cáo và từng đoạn ngắt trong một điểm chèn quảng cáo. SDK cũng cho phép người dùng tuỳ ý bỏ qua các đoạn ngắt bằng cách tương tác với ứng dụng của người gửi hoặc thiết bị màn hình thông minh.
Đoạn video chèn quảng cáo có thể bỏ qua của người dùng
Việc đặt đoạn chèn quảng cáo ở dạng có thể bỏ qua cho phép người dùng tương tác với các ứng dụng của người gửi đã kết nối và các thiết bị màn hình thông minh để tuỳ ý bỏ qua phần còn lại của đoạn ngắt đoạn đang phát. Việc đặt thuộc tính whenSkippable
thành số giây không âm sẽ bật tính năng này cho đối tượng BreakClip
. Trình phát sẽ coi như đoạn ngắt đoạn có thể bỏ qua sau khi đoạn ngắt đoạn này đã phát được số giây đó. Việc đặt giá trị này thành 0
cho phép người dùng bỏ qua đoạn ngắt ngay lập tức.
// Create the BreakClip.
let clip = new cast.framework.messages.BreakClip('bc');
clip.title = 'The Ad Title to be displayed during playback';
clip.whenSkippable = 10; // Users can skip the clip after 10 seconds of playback.
Thông tin này có thể được đặt trong yêu cầu tải ban đầu của người gửi hoặc trong ứng dụng nhận. Khi bị bỏ qua, một đoạn chèn quảng cáo trong dòng thời gian được ghép sẽ ngừng phát đoạn chèn quảng cáo hiện tại. Trình phát sẽ tải đoạn chèn quảng cáo tiếp theo nếu có hoặc tải nội dung chính. Khi bị bỏ qua, một đoạn chèn quảng cáo trong một điểm chèn quảng cáo theo tiến trình được nhúng sẽ tìm cách kết thúc đoạn này và tiếp tục phát chương trình phát trực tiếp tại thời điểm đó.
Bỏ qua quảng cáo theo phương thức lập trình
Quảng cáo cũng có thể tự động bị bỏ qua mà không cần người dùng phải tương tác.
Để bỏ qua toàn bộ khoảng nghỉ, ứng dụng phải đặt thuộc tính isWatched
của Break
thành true
. Bạn có thể thực hiện việc này bất cứ lúc nào trong quá trình tải trình tự hoặc phát nội dung. Trình phát đánh giá thuộc tính isWatched
khi position
của điểm chèn quảng cáo đáp ứng thời gian hiện tại của nội dung chính. Khi đó, người chơi sẽ quyết định có nên nhập điểm chèn quảng cáo hay không.
Hãy xem mẫu dưới đây để lặp lại tất cả các điểm chèn và sửa đổi giá trị khi trình phát đang tải.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
playerManager.addEventListener(cast.framework.events.EventType.PLAYER_LOADING,
(event) => {
// Obtain the breaks and iterate through each item to skip all ad breaks.
let breaks = breakManager.getBreaks();
breaks.forEach((brk) => {
brk.isWatched = true;
});
});
Để bỏ qua một đoạn cắt cụ thể theo phương thức lập trình, bạn nên sử dụng trình chặn tải đoạn ngắt. Bằng cách trả về null
hoặc không trả về một giá trị trong hàm callback, đoạn video trong điểm chèn đó sẽ bị bỏ qua.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();
breakManager.setBreakClipLoadInterceptor(
(breakClip, breakClipLoadInterceptorContext) => {
return null;
});