Snapback

In qualità di publisher di video, puoi impedire agli spettatori di guardare oltre gli annunci mid-roll. Quando un utente cerca di andare oltre un'interruzione pubblicitaria, puoi riportarlo all'inizio dell'interruzione e riportarlo alla posizione di ricerca al termine dell'interruzione. Questa funzione è chiamata "snapback".

Come esempio, vedi il diagramma seguente. Lo spettatore sta guardando un video e decide di andare dall'indicatore dei 5 minuti a quello dei 15 minuti. Tuttavia, è presente un'interruzione pubblicitaria in corrispondenza dell'indicatore dei 10 minuti in cui vuoi che guardino prima che possano guardare i contenuti successivi:

Per mostrare questa interruzione pubblicitaria, svolgi i seguenti passaggi:

  1. Controlla se l'utente ha eseguito una ricerca che ha superato un'interruzione pubblicitaria non guardata e, in questo caso, riportalo all'interruzione pubblicitaria.
  2. Al termine dell'interruzione pubblicitaria, riporta l'utente alla ricerca originale.

In forma di diagramma, l'aspetto è simile al seguente:

Ecco come implementare questo flusso di lavoro nell'SDK IMA DAI, come indicato in AdvancedExample.

Impedire che una ricerca lasci un'interruzione pubblicitaria non guardata

Controlla se l'utente ha eseguito una ricerca che ha superato un'interruzione pubblicitaria non guardata e, in questo caso, riportalo all'interruzione pubblicitaria. Per l'esempio avanzato per iOS, utilizza l'interazione dell'utente con la UI per rilevare quando ha eseguito una ricerca. Mantieni l'ora di inizio della ricerca per controllare se l'utente ha superato un'interruzione pubblicitaria non riprodotta. Quando l'utente rilascia i controlli video, confronta l'ora attuale con quella dell'interruzione pubblicitaria più recente. Se l'interruzione pubblicitaria scende dopo l'ora di inizio della ricerca (ovvero l'utente l'ha saltata) e non è stata ancora riprodotta, fai in modo che torni all'inizio dell'interruzione pubblicitaria. Imposta anche un flag di Snapback da controllare in seguito nel gestore del completamento dell'interruzione pubblicitaria:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Riportare l'utente alla ricerca originale

Nel gestore dell'interruzione pubblicitaria, verifica se l'interruzione precedente è stata riprodotta come risultato di uno snapshot. In tal caso, riporta l'utente al punto in cui l'utente stava cercando inizialmente (a condizione che non si tratti di un'interruzione pubblicitaria appena riprodotta):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}