動画のパブリッシャーは、視聴者が スキップできますユーザーがミッドロール挿入点を超えてシークすると、 その広告ブレークの先頭に戻って そのミッドロール挿入点が完了した後に、シークする位置にユーザーが移動します。この 「スナップバック」と呼ばれます。
例として、以下の図をご覧ください。視聴者が動画を視聴している 5 分時点から 15 分の時点までシークします。 希望する 10 分の時点でミッドロール挿入点を設けたい。 ユーザーが次のコンテンツを視聴する前に、次の動画を視聴するようユーザーに促すことができます。
このミッドロール挿入点を表示する方法は次のとおりです。
- ユーザーがシークを実行して、視聴していないミッドロール挿入点を通過したかどうかを確認します。 その場合はミッドロール挿入点に戻ります
- ミッドロール挿入点が完了したら、元の移動に戻ります。
図形式では、次のようになります。
このワークフローを 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;
}