È possibile salvare la posizione di riproduzione corrente in un video e riprendere la riproduzione nella stessa posizione in una sessione futura.
Gli annunci inseriti in modo dinamico differiscono tra le sessioni utente, pertanto la posizione viene salvata con gli annunci uniti si riferiscono a una posizione diversa in una sessione futura. TVSDK fornisce metodi per recuperare la posizione di riproduzione ignorando gli annunci uniti.
Quando l’utente chiude un video, l’applicazione recupera e salva la posizione all’interno del video.
Le durate degli annunci non sono incluse.
Le interruzioni pubblicitarie possono variare in ogni sessione a causa di modelli di annunci, limiti di frequenza e così via. L’ora corrente del video in una sessione potrebbe essere diversa in una sessione futura. Quando si salva una posizione nel video, l'applicazione recupera l'ora locale, che è possibile salvare sul dispositivo o in un database sul server.
Ad esempio, se l’utente si trova al 20° minuto del video e questa posizione include cinque minuti di annunci, getCurrentTime
restituirà 1200 secondi, mentre getLocalTime
in questa posizione restituirà 900 secondi.
L’ora locale e l’ora corrente sono le stesse per i flussi live/lineari. In questo caso, convertToLocalTime
non ha alcun effetto. Per VOD, l’ora locale rimane invariata durante la riproduzione degli annunci.
// Save the user session when player activity stops
@Override
public void onStop(){
super.onStop();
...
prefs = PreferenceManager.getDefaultSharedPreferences(
getActivity().getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
// get the local time where stream stopped playing and
// save it in System preferences
editor.putLong(LAST_LOCAL_TIME, _mediaPlayer.getLocalTime());
editor.putString(LAST_MEDIA_RESOURCE, _contentInfo.toMediaResource().getUrl());
editor.commit();
...
}
Ripristina la sessione utente quando l’attività del lettore riprende.
@Override
public void onResume() {
super.onResume();
...
prefs =
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
if (prefs.getString(LAST_MEDIA_RESOURCE, "nil").
equals(_contentInfo.toMediaResource().getUrl())) {
_lastKnownLocalTime =
prefs.getLong(LAST_LOCAL_TIME, 0); // get the last local time
// saved in system preferences
if(_lastKnownLocalTime > 0) {
_shouldResumePlayback = true;
}
}
...
}
Per riprendere il video nella stessa posizione:
Per riprendere la riproduzione del video dalla posizione salvata da una sessione precedente, utilizzare seekToLocalTime
.
Questo metodo viene chiamato solo con valori di ora locali. Se il metodo viene chiamato con i risultati dell'ora corrente, si verifica un comportamento errato.
Per cercare fino all'ora corrente, utilizzare seek
.
Quando l'applicazione riceve onStatusChanged
evento di modifica dello stato, cerca nell’ora locale salvata.
private final MediaPlayer.PlaybackEventListener _playbackEventListener =
new MediaPlayer.PlaybackEventListener() {
@Override
public void onPrepared() {
...
if(_shouldResumePlayback){
if(_lastKnownLocalTime >= 0) {
_mediaPlayer.seekToLocalTime(_lastKnownLocalTime);
}
}
...
}
...
}
Specifica le interruzioni pubblicitarie come specificato nell’interfaccia dei criteri relativi agli annunci.
Implementa un selettore di criteri per annunci personalizzato estendendo il selettore di criteri per annunci predefinito.
Fornisci le interruzioni pubblicitarie che devono essere presentate all'utente implementando selectAdBreaksToPlay
.
Questo metodo include un’interruzione pubblicitaria pre-roll e le interruzioni pubblicitarie mid-roll prima della posizione temporale locale. L’applicazione può decidere di riprodurre un’interruzione pubblicitaria pre-roll e riprendere all’ora locale specificata, riprodurre un’interruzione pubblicitaria mid-roll e riprendere all’ora locale specificata oppure non riprodurre interruzioni pubblicitarie.