Khoá cài

Là nhà xuất bản video, bạn nên ngăn người xem tìm kiếm quảng cáo trong video. Khi người dùng tìm kiếm một điểm chèn quảng cáo trước đó, bạn có thể đưa họ trở lại điểm bắt đầu của điểm chèn quảng cáo đó và sau đó đưa họ về vị trí tìm kiếm sau khi điểm chèn quảng cáo đó đã hoàn tất. Tính năng này được gọi là "quay lại".

Ví dụ: hãy xem sơ đồ dưới đây. Người xem đang xem video và quyết định tìm kiếm từ mốc 5 phút đến 15 phút. Tuy nhiên, có một điểm chèn quảng cáo ở mốc 10 phút mà bạn muốn họ xem rồi mới có thể xem tiếp nội dung sau:

Để hiển thị điểm chèn quảng cáo này, hãy làm theo các bước sau:

  1. Kiểm tra xem người dùng có chạy tua vượt qua điểm chèn quảng cáo chưa xem hay không, và nếu có, hãy đưa họ trở lại điểm chèn quảng cáo.
  2. Sau khi điểm chèn quảng cáo kết thúc, hãy đưa chúng trở lại phiên bản đầu tiên.

Dạng biểu đồ sẽ có dạng như sau:

Dưới đây là cách triển khai quy trình công việc này trong SDK IMA DAI, như được thực hiện trong AdvancedExample.

Ngăn người dùng tua để một điểm chèn quảng cáo chưa được xem

Kiểm tra xem người dùng có chạy một cụm từ tìm kiếm đã vượt qua điểm chèn quảng cáo chưa xem hay không. Nếu đã xem, hãy đưa họ trở lại điểm chèn quảng cáo đó. Trong SDK Android, hãy sử dụng đối tượng PlayerControl để phát hiện trạng thái đang tìm kiếm. Khi người dùng tìm kiếm, hãy kích hoạt phương thức onSeek() của SampleHlsVideoPlayerCallback do SampleAdsWrapper triển khai. Phương thức đó (được trình bày bên dưới) sẽ kiểm tra điểm dừng trước thời gian tìm kiếm của người dùng. Nếu quảng cáo chưa phát, hãy tìm điểm bắt đầu của điểm chèn quảng cáo đó thay vì điểm tìm kiếm mong muốn ban đầu, và lưu điểm tìm kiếm mong muốn đó trong snapBackTime.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

Đưa người dùng trở lại thanh tua ban đầu

Bây giờ, khi bạn nhận được sự kiện onAdBreakEnded, hãy kiểm tra xem snapBackTime có được đặt hay không. Nếu có, hãy đưa người dùng đến điểm đó trong luồng vì điểm chèn quảng cáo họ vừa xem là kết quả của quay lại nhanh:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}