Điểm chèn quảng cáo

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 VASTVMAP. 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ó isEmbeddedexpanded đượ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, whenSkippableclickThroughUrl. 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ề BreakBreakClip 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ề BreakBreakClip 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 trueexpanded đượ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 trueexpanded đượ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đ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, VASTVMAP). 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 videocuố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ố.

Tiến trình của quảng cáo ghép với khách hàng
Hình 1: Tiến trình thể hiện một số nội dung và 3 điểm chèn quảng cáo có chèn quảng cáo với máy khách.


Tiến trình của quảng cáo được nhúng do máy chủ ghép
Hình 2: Tiến trình thể hiện một số nội dung và 3 điểm chèn quảng cáo do máy chủ chèn.


Tiến trình của quảng cáo mở rộng được nhúng do máy chủ
Hình 3: Tiến trình thể hiện một số nội dung và 3 điểm chèn quảng cáo mở rộng do máy chủ chèn.

Đị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-rollpost-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.

Bảng 1: Ma trận khả năng tương tác của 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.

Vòng đời của sự kiện ngắt
Hình 4: Vòng đời sự kiện ngắt.
Bảng 2: Sự kiện ngắt và nội dung mô tả về các sự kiện đó.
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:
  • Một đoạn ngắt dòng thời gian ghép nối được phát hoàn toàn.
  • Một đoạn ngắt dòng thời gian ghép sẽ chuyển đổi thành một đoạn ngắt khác.
  • Mọi đoạn ngắt đều bị bỏ qua.
  • Đoạn ngắt điểm chèn cuối cùng được phát toàn bộ trong một điểm chèn quảng cáo được nhúng cuối video.
  • Đã xảy ra lỗi.
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độ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 BreakBreakClip để 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 Breakposition nằm trong giá trị seekFromseekTo của thao tác tìm kiếm. Trong danh sách điểm chèn này, SDK sẽ phát Breakposition 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 setBreakClipLoadInterceptorsetBreakSeekInterceptor đượ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;
});