Questa guida mostra come implementare la funzionalità di aggiunta ai preferiti utilizzando l'SDK IMA DAI quando si utilizza l'inserimento di annunci dinamici (DAI) per gli stream video on demand (VOD). Si presuppone che sia presente un'implementazione IMA DAI funzionante, come quella presentata nella sezione Inizia.
Che cos'è la funzionalità di aggiunta ai preferiti?
La funzionalità di aggiunta ai preferiti consente di salvare e ritornare successivamente a un punto specifico dello streaming di contenuti. Supponiamo che un utente guardi cinque minuti di contenuti, esca dallo stream video e poi vi ritorni. La funzionalità di aggiunta ai preferiti salva la posizione dell'utente nello stream e riprende la riproduzione dal punto di interruzione, per garantire allo spettatore un'esperienza perfettamente integrata.
Funzionalità di aggiunta ai preferiti DAI
Quando aggiungi ai preferiti uno stream DAI, devi registrare l'ID dello stream e l'ora in cui l'utente esce dal video. Quando l'utente torna, richiedi di nuovo lo stream e cerca l'ora salvata. Poiché ogni istanza dello stream richiesto può avere interruzioni pubblicitarie di durata diversa, la semplice memorizzazione dell'ora dello stream non funzionerà. Quello che devi fare è continuare dallo stesso tempo di contenuto.
Metodi di conversione
L'SDK IMA DAI fornisce una coppia di metodi per richiedere il tempo di contenuto per un determinato tempo di stream e il tempo di stream per un determinato tempo di contenuto. Utilizzando questi metodi di conversione, puoi memorizzare il tempo di contenuto aggiunto ai preferiti e poi cercare il tempo di stream corrispondente nella nuova istanza dello stream. Ecco l'approccio, incluso un link a un'app di esempio che mostra un'implementazione funzionante della funzionalità di aggiunta ai preferiti.
Salvataggio dei preferiti
Salva un preferito quando l'attività è in pausa.
Objective-C
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.contentPlayer pause];
// Ignore this if we're presenting a modal view (e.g. in-app clickthrough).
if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
// Don't save bookmark if we're playing a live stream.
if (self.video.streamType != StreamTypeLive) {
NSTimeInterval contentTime = [self.streamManager
contentTimeForStreamTime:CMTimeGetSeconds(self.contentPlayer.currentTime)];
[self.delegate videoViewController:self didReportSavedTime:contentTime forVideo:self.video];
}
Swift
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
contentPlayer.pause()
if isMovingFromParent {
// Only save bookmark if we're playing a VOD stream.
if let vodStream = stream as? VODStream, let streamManager = streamManager {
let contentTime = streamManager.contentTime(
forStreamTime: contentPlayer.currentTime().seconds)
if contentTime.isFinite, contentTime > 0 {
delegate?.videoViewController(self, didReportBookmarkedTime: contentTime, for: vodStream)
}
}
if trackingContent {
removeContentPlayerObservers()
}
streamManager?.destroy()
adsLoader?.contentComplete()
streamManager = nil
adsLoader = nil
}
}
Caricamento dei preferiti
Carica il preferito quando richiedi di nuovo uno stream. Fa parte dell'implementazione dell'interfaccia VideoStreamPlayer.
Objective-C
case kIMAAdEvent_STREAM_LOADED: {
if (self.video.streamType == StreamTypeVOD) {
[self addContentPlayerObservers];
if (self.video.savedTime > 0) {
NSTimeInterval streamTime =
[self.streamManager streamTimeForContentTime:self.video.savedTime];
[self.IMAVideoDisplay seekStreamToTime:streamTime];
self.video.savedTime = 0;
}
}
Swift
case .STREAM_LOADED:
guard let stream else { return }
addContentPlayerObservers()
if let vodStream = stream as? VODStream, vodStream.bookmarkTime > 0 {
bookmarkStreamTime = streamManager.streamTime(forContentTime: vodStream.bookmarkTime)
if let time = bookmarkStreamTime {
pendingBookmarkSeek = true
logMessage(
"STREAM_LOADED: Bookmark pending for contentTime: \(String(format: "%.2f", vodStream.bookmarkTime)) (streamTime: \(String(format: "%.2f", time)))"
)
vodStream.bookmarkTime = 0
}
}