Puoi usare TVSDK per recuperare informazioni sui file multimediali da visualizzare sulla barra di ricerca.
Attendere che il lettore sia nello stato PREPARATO.
Recupera l'ora corrente dell'indicatore di riproduzione utilizzando il metodo MediaPlayer.getCurrentTime
.
Restituisce la posizione corrente dell'indicatore di riproduzione sulla timeline virtuale, in millisecondi. Il tempo viene calcolato in base al flusso risolto che potrebbe contenere più istanze di contenuto alternativo, ad esempio più annunci o interruzioni pubblicitarie unite nel flusso principale. Per i flussi in tempo reale/lineare, il tempo restituito è sempre nell'intervallo della finestra di riproduzione.
long getCurrentTime() throws IllegalStateException;
Recupera l'intervallo di riproduzione del flusso e determina la sua durata.
Utilizzare il metodo mediaPlayer.getPlaybackRange
per ottenere l'intervallo di tempo della timeline virtuale.
TimeRange getPlaybackRange() throws IllegalStateException;
Analizza l’intervallo di tempo utilizzando mediacore.utils.TimeRange
.
Per determinare la durata, sottraete l’inizio dalla fine dell’intervallo.
Ciò include la durata del contenuto aggiuntivo inserito nel flusso (annunci).
Per VOD, l’intervallo inizia sempre con zero e il valore finale è uguale alla somma della durata del contenuto principale e delle durate del contenuto aggiuntivo inserito nel flusso (annunci).
Per una risorsa lineare/live, l’intervallo rappresenta l’intervallo della finestra di riproduzione e questo intervallo cambia durante la riproduzione.
TVSDK chiama il callback onUpdated
per indicare che l’elemento multimediale è stato aggiornato e che i relativi attributi (compreso l’intervallo di riproduzione) sono stati aggiornati.
Utilizza i metodi disponibili nella classe MediaPlayer
e SeekBar
che sono disponibili pubblicamente nell’SDK per Android per impostare i parametri della barra di ricerca.
Ad esempio, ecco un possibile layout che contiene gli elementi SeekBar
e due TextView
.
<LinearLayout
android:id="@+id/controlBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@android:color/black"
android:orientation="horizontal" >
<TextView
android:id="@+id/playerCurrentTimeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="00:00"
android:textColor="@android:color/white" />
<SeekBar
android:id="@+id/playerSeekBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/playerTotalTimeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="00:00"
android:textColor="@android:color/white" />
</LinearLayout>
Utilizzare un timer per recuperare periodicamente l'ora corrente e aggiornare SeekBar.
Nell'esempio seguente viene utilizzata la classe di supporto Clock.java
come timer, disponibile nel lettore di riferimento PrimetimeReference. Questa classe imposta un listener di eventi e attiva un evento onTick
ogni secondo o un altro valore di timeout che è possibile specificare.
playbackClock = new Clock(PLAYBACK_CLOCK, CLOCK_TIMER);
playbackClockEventListener = new Clock.ClockEventListener() {
@Override
public void onTick(String name) {
// Timer event is received. Update the SeekBar here.
}
};
playbackClock.addClockEventListener(playbackClockEventListener);
Su ogni segno di spunta dell'orologio, questo esempio recupera la posizione corrente del lettore multimediale e aggiorna SeekBar. Utilizza i due elementi TextView per contrassegnare l'ora corrente e la posizione finale dell'intervallo di riproduzione come valori numerici.
@Override
public void onTick(String name) {
if (mediaPlayer != null && mediaPlayer.getStatus() == PlayerState.PLAYING) {
handler.post(new Runnable() {
@Override
public void run() {
seekBar.setProgress((int)
mediaPlayer.getCurrentTime());
currentTimeText.setText(timeStampToText(
mediaPlayer.getCurrentTime()));
totalTimeText.setText(timeStampToText(
mediaPlayer.getPlaybackRange().getEnd()));
}
});
}
}