Khoá cài

Là nhà xuất bản video, bạn nên ngăn người xem tìm kiếm qua 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, bạn có thể đưa họ trở lại điểm bắt đầu của điểm chèn quảng cáo, sau đó quay lại họ đến vị trí tìm kiếm của mình sau khi điểm chèn quảng cáo đó hoàn tất. Chiến dịch này được gọi là "quay lại".

Để biết ví dụ, hãy xem sơ đồ dưới đây. Khán giả đang xem video, và quyết định tìm từ mốc 5 phút đến mốc 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 để trẻ xem trước khi xem nội dung sau khi video đó kết thúc:

Để 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 một lượt tìm kiếm nhảy qua điểm chèn quảng cáo mà bạn 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 các quảng cáo trở về lượt tìm kiếm ban đầu.

Ở dạng biểu đồ, mã sẽ có dạng như sau:

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

Ngăn lượt tìm kiếm để lại 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 lượt tìm kiếm mà đã vượt qua điểm chèn quảng cáo mà bạn 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. Trong SDK Android, hãy sử dụng đối tượng PlayerControl để phát hiện tua. 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 này (được trình bày bên dưới) kiểm tra điểm dừng trước khi người dùng thời gian tua. Nếu video chưa được phát, hãy tìm đến đầu điểm chèn quảng cáo đó thay vì điểm tua mong muốn ban đầu và lưu lượt tua mong muốn đó điểm ở 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 quay lại lệnh tìm kiếm ban đầu

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

@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;
}