スキップしたミッドロール挿入点に戻る
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
動画のパブリッシャーは、視聴者が
スキップできますユーザーがミッドロール挿入点を超えてシークすると、
その広告ブレークの先頭に戻って
そのミッドロール挿入点が完了した後に、シークする位置にユーザーが移動します。この
「スナップバック」と呼ばれます。
例として、以下の図をご覧ください。視聴者が動画を視聴している
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;
}
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-21 UTC。
[null,null,["最終更新日 2025-08-21 UTC。"],[[["\u003cp\u003eSnapback prevents viewers from skipping mid-roll ads by redirecting them to the ad and then returning them to their intended location.\u003c/p\u003e\n"],["\u003cp\u003eThis feature ensures ad completion before viewers proceed to the content they seek.\u003c/p\u003e\n"],["\u003cp\u003eSnapback functionality is implemented through the IMA DAI SDK, as demonstrated in the AdvancedExample.\u003c/p\u003e\n"],["\u003cp\u003eThe process involves identifying unwatched ad breaks and redirecting the viewer and then resuming playback at the target point after the ad.\u003c/p\u003e\n"]]],[],null,["# Return to a skipped ad break\n\nAs a video publisher, you may want to prevent your viewers from\nseeking past your mid-roll ads. When a user seeks past an ad break,\nyou can take them back to the start of that ad break, and then return\nthem to their seek location after that ad break has completed. This\nfeature is called \"snapback.\"\n\nAs an example, see the diagram below. Your viewer is watching a video,\nand decides to seek from the 5-minute mark to the 15-minute mark.\nThere is, however, an ad break at the 10-minute mark that you want\nthem to watch before they can watch the content after it:\n\nIn order to show this ad break, take the following steps:\n\n1. Check if the user ran a seek that jumped past an unwatched ad break, and if so, take them back to the ad break.\n2. After the ad break completes, return them to their original seek.\n\nIn diagram form, that looks like this:\n\nHere's how to implement this workflow in the IMA DAI SDK, as done in\n[AdvancedExample](//github.com/googleads/googleads-ima-android-dai).\n\nPrevent a seek from leaving an ad break unwatched\n-------------------------------------------------\n\nCheck if the user has run a seek that went past an unwatched ad break,\nand if so, take them back to the ad break.\nIn the Android SDK, use the `PlayerControl` object to detect seeking.\nWhen the user seeks, trigger the `onSeek()` method of the\n`SampleHlsVideoPlayerCallback` implemented by `SampleAdsWrapper`.\nThat method (presented below) checks the cue point prior to the user's\nseek time. If it is unplayed, seek to the beginning of that ad break\ninstead of their initial desired seek point, and save that desired seek\npoint in `snapBackTime`. \n\n @Override\n public void onSeek(int timeMillis) {\n double timeToSeek = timeMillis;\n if (streamManager != null) {\n CuePoint cuePoint =\n streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);\n if (cuePoint != null && !cuePoint.isPlayed()) {\n snapBackTime = timeToSeek / 1000.0; // Update snapback time.\n // Missed cue point, so snap back to the beginning of cue point.\n timeToSeek = cuePoint.getStartTime() * 1000;\n videoPlayer.seek(Math.round(timeToSeek));\n videoPlayer.setCanSeek(false);\n return;\n }\n }\n videoPlayer.seek(Math.round(timeToSeek));\n }\n\nPut the user back to their original seek\n----------------------------------------\n\nNow when you get an `onAdBreakEnded` event, check to see if `snapBackTime`\nis set. If so, take the user to that point in the stream, because the ad\nbreak they just watched was the result of snapback: \n\n @Override\n public void onAdBreakEnded() {\n // Re-enable player controls.\n videoPlayer.setCanSeek(true);\n videoPlayer.enableControls(true);\n if (snapBackTime \u003e 0) {\n videoPlayer.seek(Math.round(snapBackTime * 1000));\n }\n snapBackTime = 0;\n }"]]