作为视频发布商,您可能不希望观看者跳过中贴片广告。当用户跳过广告插播时间点时,您可以将他们带回该广告插播时间点的起始位置,并在该广告插播时间点结束后将他们返回到跳转时的位置。此功能称为“跳回”。
例如,请参阅下图。您的观看者正在观看视频,并决定从 5 分钟标记处跳转到 15 分钟标记处。 不过,在 10 分钟标记处有一个广告插播时间点,您希望他们先观看该广告插播时间点,然后再观看其后的内容:

如需展示此广告插播时间点,请按以下步骤操作:
- 检查用户是否执行了跳转操作,跳过了未观看的广告插播时间点,如果是,则将他们带回广告插播时间点。
- 广告插播时间点结束后,将他们返回到原来的跳转位置。
以图表形式表示如下:

下面介绍了如何使用 IMA DAI SDK 实现跳回功能,如我们的 高级示例所示。
防止跳转操作导致广告插播时间点未观看
检查用户是否执行了跳转操作,跳过了未观看的广告插播时间点,如果是,则将他们带回广告插播时间点。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