Interfejs playlist API opiera się na MediaItem
instancjach, które można w wygodny sposób utworzyć
za pomocą MediaItem.Builder
. Wewnątrz odtwarzacza MediaItem
jest przekształcany w
gra MediaSource
przez MediaSource.Factory
. Bez
konfiguracji niestandardowej,
tę konwersję wykonuje DefaultMediaSourceFactory
, który jest
jest w stanie tworzyć złożone źródła multimediów odpowiadające właściwościom
element multimedialny. Poniżej podano niektóre z właściwości, które można ustawić w elementach multimedialnych.
poniżej.
Proste elementy multimedialne
Element multimedialny zawierający tylko identyfikator URI strumienia można utworzyć za pomocą fromUri
metody wygodnej:
Kotlin
val mediaItem = MediaItem.fromUri(videoUri)
Java
MediaItem mediaItem = MediaItem.fromUri(videoUri);
W pozostałych przypadkach możesz użyć MediaItem.Builder
. W poniższym przykładzie
Element multimedialny jest utworzony z identyfikatorem i dołączonymi metadanymi:
Kotlin
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();
Dołączanie metadanych może być przydatne aktualizacji UI aplikacji podczas przejścia na playlistę.
Obrazy
Odtwarzanie obrazów wymaga określenia czasu trwania w elemencie multimedialnym obraz powinien być widoczny podczas odtwarzania. Zobacz Na stronie przewodnika po obrazach znajdziesz więcej informacji: Zdjęcia ruchome i Wczytywanie biblioteki obrazów (na przykład Glide).
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
Niestandardowe rozszerzenia plików dla multimediów adaptacyjnych
ExoPlayer udostępnia adaptacyjne źródła multimediów dla DASH, HLS SmoothStreaming. Jeśli identyfikator URI takiego adaptacyjnego elementu multimedialnego kończy się znakiem standardu , odpowiednie źródło multimediów zostanie utworzone automatycznie. Jeśli Identyfikator URI ma niestandardowe rozszerzenie lub nie ma żadnego rozszerzenia, typ MIME musi być wyraźnie określony, aby wskazać typ elementu multimedialnego:
Kotlin
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();
W przypadku progresywnych strumieni multimediów typ MIME nie jest wymagany.
Treść chroniona
W przypadku treści chronionych należy ustawić właściwości DRM elementu multimedialnego. identyfikator UUID, jest wymagany, wszystkie pozostałe właściwości są opcjonalne.
Przykładowa konfiguracja odtwarzania elementu chronionego przez Widevine DRM, gdzie identyfikator URI licencji nie jest dostępny bezpośrednio w multimediach (np. na playliście DASH) i wymaganych jest wiele sesji (np. z powodu rotacji kluczy):
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build()) .build();
Wewnątrz
odtwarzacza, DefaultMediaSourceFactory
przekazuje te właściwości do funkcji
DrmSessionManagerProvider
, aby uzyskać DrmSessionManager
, czyli
wstrzyknięto do utworzonego MediaSource
. Działanie DRM może być
bardziej spersonalizowane
do własnych potrzeb.
Wczytywanie ścieżek napisów z innego urządzenia
Aby pobrać ścieżki napisów z innego urządzenia, można dodać instancje MediaItem.Subtitle
, gdy
tworzenia elementu multimedialnego:
Kotlin
val subtitle = SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build() val mediaItem = MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()
Java
MediaItem.SubtitleConfiguration subtitle = new MediaItem.SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build(); MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setSubtitleConfigurations(ImmutableList.of(subtitle)) .build();
Wewnętrznie DefaultMediaSourceFactory
będzie używać interfejsu MergingMediaSource
do:
Połącz źródło multimediów treści z tagiem SingleSampleMediaSource
dla każdego parametru
ścieżki z napisami. Aplikacja DefaultMediaSourceFactory
nie obsługuje instalowania z nieoficjalnych źródeł
napisy do DASH z wieloma przedziałami czasu.
Przycinanie strumienia multimediów
Aby przyciąć treści, do których odwołuje się element multimedialny, ustaw niestandardowe pozycje początkowe i końcowe:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( new ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build()) .build();
Wewnętrznie DefaultMediaSourceFactory
użyje ClippingMediaSource
do zapakowania
źródła treści multimedialnych. Istnieją dodatkowe właściwości przycinania. Zobacz
MediaItem.Builder
Javadoc, aby dowiedzieć się więcej.
Wstawianie reklam
Aby wstawiać reklamy, ustaw właściwość identyfikatora URI tagu reklamy elementu multimedialnego:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
Wewnętrznie DefaultMediaSourceFactory
umieszcza źródło multimediów w elemencie typu
AdsMediaSource
, aby wstawić reklamy określone przez tag reklamy. Aby to działało, klucz
odtwarzacz musi też mieć uprawnienie DefaultMediaSourceFactory
odpowiednio skonfigurowane.