動画パブリッシャーは、視聴者がミッドロール広告をスキップできないようにしたい場合があります。ユーザーが広告ブレークをシークして通り過ぎた場合、その広告ブレークの開始時点に戻って、その広告ブレークの再生が完了した後にシーク位置まで移動できます。この機能は「スナップバック」と呼ばれます。
たとえば、下の図をご覧ください。視聴者が動画を視聴していて、5 分のマークから 15 分のマークまでシークすることにしたとします。ただし、10 分のマークに広告ブレークがあり、その後のコンテンツを視聴するには、この広告ブレークを視聴する必要があります。
この広告ブレークを表示するには、次の手順を行います。
- ユーザーが未視聴の広告ブレークをスキップするシークを実行したかどうかを確認し、実行した場合は広告ブレークに戻します。
- 広告ブレークが完了したら、元のシーク位置に戻します。
図で表すと次のようになります。
高度な例で示されているように、IMA DAI SDK を使用して snapback を実装する方法は次のとおりです。
シークによって広告ブレークが未視聴のままになるのを防ぐ
ユーザーが未視聴の広告ブレークを過ぎてシークしたかどうかを確認し、シークした場合は広告ブレークに戻します。Roku の高度なサンプルでは、ユーザーがシークするためにリモコンのボタンを押すことに依存しています。ユーザーが早送りボタンを押すたびに、ストリーム内の設定された秒数だけ早送りされます。このジャンプを処理する同じメソッドは、ジャンプが広告ブレークを通過または開始するかどうかも確認し、その場合は、代わりにユーザーを広告ブレークの開始に送ります。
Function handleFastForward(player as Object, streamManager as Object, updatedTime As Integer)
previousAd = streamManager.getPreviousCuePoint(updatedTime)
If previousAd = Invalid or previousAd.hasPlayed
player.seek(updatedTime * 1000)
Else If previousAd.start > player.currentTime
player.isSnapback = True
player.timeAfterSnapback = updatedTime
player.seek(previousAd.start * 1000 + 1000)
End If
End Function
ユーザーを元のシーク位置に戻す
adBreakEnded
ハンドラで、前の広告ブレークがスナップバックの結果として再生されたかどうかを確認します。そうであれば、ユーザーを最初にシークしようとしていた場所に戻します(直前に再生された広告ブレークの途中ではない場合に限ります)。
player.adBreakEnded = Function(adBreakInfo as Object)
If m.isSnapback
m.seek(m.timeAfterSnapback * 1000)
m.isSnapback = False
End If
End Function