スナップバック

動画のパブリッシャーは、視聴者が スキップできますユーザーがミッドロール挿入点を超えてシークすると、 その広告ブレークの先頭に戻って そのミッドロール挿入点が完了した後に、シークする位置にユーザーが移動します。この 「スナップバック」と呼ばれます。

例として、以下の図をご覧ください。視聴者が動画を視聴している 5 分時点から 15 分の時点までシークします。 希望する 10 分の時点でミッドロール挿入点を設けたい。 ユーザーが次のコンテンツを視聴する前に、次の動画を視聴するようユーザーに促すことができます。

このミッドロール挿入点を表示する方法は次のとおりです。

  1. ユーザーがシークを実行して、視聴していないミッドロール挿入点を通過したかどうかを確認します。 その場合はミッドロール挿入点に戻ります
  2. ミッドロール挿入点が完了したら、元の移動に戻ります。

図形式では、次のようになります。

このワークフローを IMA DAI SDK で実装する方法は次のとおりです。 AdvancedExample をご覧ください。

シークで広告ブレークが再生されないままにならないようにする

ユーザーが再生していない広告ブレークを通過したシークをユーザーが実行したかどうかを確認します。 その場合はミッドロール挿入点に戻ります Android SDK では、PlayerControl オブジェクトを使用してシークを検出します。 ユーザーがシーク動作したら、onSeek() SampleAdsWrapper によって実装された SampleHlsVideoPlayerCallback。 このメソッド(下記参照)は、ユーザーが再生した広告の再生前にキューポイントを シーク時間を指定します。その広告が再生されていない場合は、そのミッドロール挿入点の先頭に移動 最初の目的のシーク ポイントではなく、その目的のシークを保存します。 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));
}

ユーザーを元の検索モードに戻す

onAdBreakEnded イベントを受け取ったときに、snapBackTime かどうかを確認する 設定されます。広告を表示するには、ストリーム内のその時点にユーザーを誘導します。 視聴した休憩はスナップバックの結果です。

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