Multimedia3
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
10 lipca 2024 r. | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alfa02 |
Deklarowanie zależności
Aby dodać zależność od Media3, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
W pliku build.gradle
aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:
Odlotowe
dependencies { def media3_version = "1.4.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. W narzędziu Media3 Issue tracker możesz znaleźć odpowiedzi na pytania, znane problemy oraz prośby o dodanie funkcji, a także zgłaszać nowe problemy.
Wersja 1.4.0
Wersja 1.4.0-rc01
10 lipca 2024 r.
Usługa androidx.media3:media3-*:1.4.0-rc01
została zwolniona.
Wersja 1.4.0-rc01 zawiera te zatwierdzenia.
- Wspólna biblioteka:
- Dodaj
Format.customData
, aby udostępniać dostarczone przez aplikację niestandardowe informacje o wystąpieniachFormat
.
- Dodaj
- ExoPlayer:
- Napraw niektóre niespójności dotyczące ostrości dźwięku, np. nie zgłaszaj pełnej lub tymczasowej utraty ostrości, gdy odtwarzacz jest wstrzymany (#1436).
- Usuń potencjalne
IndexOutOfBoundsException
wywołane przez moduły wyodrębniania danych zgłaszających dodatkowe ścieżki po pierwszym kroku przygotowania (#1476). - Funkcja
Effects
w regionieExoPlayer.setVideoEffect()
otrzyma sygnatury czasowe z usuniętym przesunięciem mechanizmu renderowania (#1098). - Popraw potencjalny
IllegalArgumentException
podczas obsługi błędu odtwarzacza, który wystąpił podczas wczytywania innego elementu playlisty (#1483).
- Tekst:
- Poprawiono błąd
IllegalArgumentException
zLegacySubtitleUtil
, gdy przykładowe napisy WebVTT nie zawierają wskazówek, np. w ramach strumienia DASH (#1516).
- Poprawiono błąd
- Sesja:
- Zezwalaj na ustawianie aktywności w sesji na kontroler, aby zastąpić działanie sesji globalnej. Aktywność w sesji można zdefiniować dla kontrolera w czasie połączenia, tworząc
ConnectionResult
zAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Po nawiązaniu połączenia aktywność w sesji może zostać zaktualizowana za pomocą poleceniaMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Popraw replikację błędów wywołań funkcji
MediaLibrarySession.Callback
. Replikację błędów można teraz skonfigurować za pomocą poleceniaMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
do wyboru typu błędu lub rezygnacji z replikacji błędów, która jest domyślnie włączona.
- Zezwalaj na ustawianie aktywności w sesji na kontroler, aby zastąpić działanie sesji globalnej. Aktywność w sesji można zdefiniować dla kontrolera w czasie połączenia, tworząc
- Interfejs:
- Rozwiąż problem z platformą powodujący rozciągnięcie lub przycięcie filmu podczas korzystania z pola
SurfaceView
w funkcji tworzenia wiadomościAndroidView
w interfejsie API 34 (#1237).
- Rozwiąż problem z platformą powodujący rozciągnięcie lub przycięcie filmu podczas korzystania z pola
- Aplikacja w wersji demonstracyjnej
- Używaj
HttpEngineDataSource
jako elementuHttpDataSource
, jeśli urządzenie je obsługuje.
- Używaj
Wersja 1.4.0-beta01
26 czerwca 2024 r.
Usługa androidx.media3:media3-*:1.4.0-beta01
została zwolniona.
Wersja 1.4.0-beta01 zawiera te zatwierdzenia.
- ExoPlayer:
- Dodaj
ExoPlayer.isReleased()
, aby sprawdzić, czy usługaExoplayer.release()
została wywołana. - Dodaj
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
, aby skonfigurować maksymalną pozycję, podczas którejseekToPrevious()
przeszukuje poprzedni element (#1425).
- Dodaj
- Transformer:
- Usuń pole
ExportResult.processedInputs
. Jeśli używasz tego pola do szczegółów kodeka, zamiast niego użyjDefaultDecoderFactory.listener
. W przypadku wyjątku kodeka jego szczegóły będą dostępne w interfejsieExportException.codecInfo
.
- Usuń pole
- Moduły wyodrębniania danych:
- Naprawiono wyodrębnianie formatu audio PCM w kontenerach AVI.
- Obraz:
- Zezwalaj na używanie
null
jako parametru parametruExoPlayer.setImageOutput
, aby wyczyścić wcześniej ustawioną wartośćImageOutput
.
- Zezwalaj na używanie
- Efekt:
- Usuń nieużywaną wartość
OverlaySettings.useHdr
, bo zakres dynamiczny nakładki i klatki musi być taki sam. - Dodano obsługę HDR w przypadku zdjęć (
TextOverlay
). Luminancję nakładki tekstowej można dostosować za pomocą parametruOverlaySettings.setHdrLuminanceMultiplier
.
- Usuń nieużywaną wartość
- Sesja:
- Dodaj
MediaSession.Callback.onPlayerInteractionFinished
, by informować sesje o zakończeniu serii interakcji graczy z określonego kontrolera. - Dodaj
SessionError
i użyj go wSessionResult
iLibraryResult
zamiast kodu błędu, aby w miarę możliwości podać więcej informacji o błędzie i sposobie jego rozwiązania. - Opublikuj kod aplikacji testowej kontrolera media3, aby móc testować interakcje z aplikacjami publikującymi sesję multimediów.
- Rozpowszechniaj dodatki przekazywane do media3
MediaSession[Builder].setSessionExtras()
do kontrolera Media1PlaybackStateCompat.getExtras()
. - Zmapuj błędy krytyczne i niekrytyczne na sesję platformy i z niej.
PlaybackException
jest mapowany na stan błędu krytycznego wPlaybackStateCompat
. PoleSessionError
wysłane do kontrolera powiadomień o multimediach z identyfikatoremMediaSession.sendError(ControllerInfo, SessionError)
jest zmapowane na błąd niekrytyczny wPlaybackStateCompat
, co oznacza, że ustawiono kod błędu i komunikat o błędzie, ale stan sesji na platformie nie różni się odSTATE_ERROR
.
- Dodaj
- Interfejs:
- Rozszerzenie HLS:
- Naprawiono błąd polegający na tym, że playlisty odtwarzane poza główną funkcją odtwarzania nie są odświeżane podczas odtwarzania na żywo (#1240).
- Usuń wycofane symbole:
- Usuń interfejs
Bundleable
. Obejmuje to usunięcie wszystkichBundleable.Creator<Foo> CREATOR
pól stałych. Wywołujący powinni w przypadku każdego typu używać metodBundle toBundle()
istatic Foo fromBundle(Bundle)
.
- Usuń interfejs
Wersja 1.4.0-alpha02
7 czerwca 2024 r.
Usługa androidx.media3:media3-*:1.4.0-alpha02
została zwolniona.
Wersja 1.4.0-alfa02 zawiera te zatwierdzenia.
- Wspólna biblioteka:
- Przekierowuje wywołania przewijania uznawane za brak działań do chronionych metod
BasePlayer.seekTo
iSimpleBasePlayer.handleSeek
, zamiast je ignorować. Jeśli implementujesz te metody w odtwarzaczu niestandardowym, być może trzeba będzie obsługiwać te dodatkowe wywołania za pomocą funkcjimediaItemIndex == C.INDEX_UNSET
. - Usuń zależność kompilacji z ulepszonego usuwania szumu w języku Java 8 (#1312).
- Upewnij się, że czas przekazywany do
MediaItem.Builder.setImageDurationMs
jest ignorowany w przypadku właściwościMediaItem
, które nie są obrazami (zgodnie z opisem).
- Przekierowuje wywołania przewijania uznawane za brak działań do chronionych metod
- ExoPlayer:
- Dodaj
reset
doBasePreloadManager
, aby zwolnić wszystkie źródła wstrzymania, zachowując instancję menedżera wstępnego wczytywania. - Dodaj
ExoPlayer.setPriority
(orazBuilder.setPriority
), aby określić wartość priorytetu używaną wPriorityTaskManager
i na potrzeby znaczenia MediaCodec z interfejsu API 35. - Rozwiązaliśmy problem z aktualizowaniem czasu ostatniego ponownego buforowania, który powodował, że klucz
bs
(wytwarzanie bufora) w CMCD (#1124) był nieprawidłowy. - Dodaj
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
, aby wskazać, że źródło zostało wczytane do końca. Dzięki temu implementacjeDefaultPreloadManager
i niestandardowePreloadMediaSource.PreloadControl
mogą wstępnie wczytywać następne źródło lub wykonywać inne działania. - Naprawiono błąd polegający na tym, że pomijanie elementów na końcu wyciszenia może wywoływać wyjątek odtwarzania.
- Dodaj
clear
doPreloadMediaSource
, aby odrzucić okres wstępnego wczytywania. - Dodaj nowy kod błędu
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
, który jest używany w przypadku odzyskiwania zasobów kodeka na potrzeby zadań o wyższym priorytecie. - Pozwól funkcji
AdsMediaSource
wczytywać reklamy przed filmem, zanim zakończy się wstępne przygotowanie treści multimedialnych (#1358). - Naprawiono błąd polegający na tym, że podczas ponownego przygotowywania wielookresowej transmisji na żywo DASH z wcześniejszym okresem usunięcia z pliku manifestu ponownie odtwarzanie było przenoszone do
STATE_ENDED
. - Zmień nazwę
onTimelineRefreshed
naonSourcePrepared
, aonPrepared
naonTracksSelected
wPreloadMediaSource.PreloadControl
. Możesz też odpowiednio zmienić nazwy IntDefs w elemencieDefaultPreloadManager.Stage
. - Dodaj eksperymentalną obsługę harmonogramu dynamicznego, aby lepiej dostosować pracę do cykli wybudzania procesora i opóźnić pobudkę do momentu, w którym mechanizmy renderowania mogą zacząć korzystać z pomiaru.
Możesz to włączyć za pomocą
experimentalSetDynamicSchedulingEnabled
podczas konfigurowania instancji ExoPlayer. - Dodaj
Renderer.getDurationToProgressMs
.Renderer
może zaimplementować tę metodę, aby zwracać do ExoPlayer czas, jaki musi upłynąć od odtwarzania, aby mechanizm renderowania mógł przejść dalej. JeśliExoPlayer
jest ustawiony za pomocąexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
wywołuje tę metodę podczas obliczania czasu na zaplanowanie zadania roboczego. - Dodaj
MediaCodecAdapter#OnBufferAvailableListener
, aby otrzymywać alerty, gdyMediaCodecRenderer
ma dostęp do buforów danych wejściowych i wyjściowych. Po otrzymaniu tych wywołań zwrotnychMediaCodecRenderer
zasygnalizujeExoPlayer
, a jeśli zasadaExoPlayer
jest ustawiona za pomocą parametruexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
zaplanuje pętlę roboczą w miarę postępów mechanizmów renderowania. - Używaj klasy danych w metodach
LoadControl
zamiast poszczególnych parametrów.
- Dodaj
- Transformer:
- Rozwiązanie problemu z dekoderem, który polegał na tym, że podczas obsługi wejścia PCM liczba kanałów audio była ograniczona do stereo.
- Wybierając ścieżki w usłudze
ExoPlayerAssetLoader
, zignoruj ograniczenia liczby kanałów audio, ponieważ mają zastosowanie tylko do odtwarzania. - Zastąp interfejs
androidx.media3.transformer.Muxer
elementemandroidx.media3.muxer.Muxer
i usuńandroidx.media3.transformer.Muxer
. - Napraw ładowanie obrazów HEIC ze schematów identyfikatora URI treści. (#1373).
- Dostosuj czas trwania ścieżki audio w
AudioGraphInput
, aby poprawić synchronizację dźwięku z obrazem.
- Moduły wyodrębniania danych:
- MPEG-TS: wycofuj zmianę tak, aby renderowała ostatnią klatkę, przekazując ostatnią jednostkę dostępu strumienia do kolejki próbek (#7909). Wprowadzenie poprawek mających na celu rozwiązanie problemów, które pojawiły się tylko w strumieniach HLS(#1150) i H.262 HLS (#1126).
- MP3: wybieraj rozmiar danych z klatki
Info
zamiast rozmiaru zgłaszanego przez strumień źródłowy (np. rozmiar pliku lub nagłówek HTTPContent-Length
). Dzięki temu dane zwiastunów, których nie można odtworzyć (np. okładki albumu) nie będą uwzględniane w obliczeniach o stałej szybkości transmisji bitów, co zwiększy dokładność wyszukiwania (#1376). - MP3: na podstawie liczby klatek i innych danych w klatce
Info
(jeśli występują) oblicz średnią szybkość transmisji bitów dla stałej szybkości transmisji bitów, zamiast zawyżać szybkość transmisji bitów klatki po klatceInfo
, która może być sztucznie mała, np.PCUT
(#1376).
- Dźwięk:
- Naprawiono atrybuty kodowania DTS:X profilu 2 na potrzeby odtwarzania przekazującego (#1299).
- W przypadku odtwarzania bez wczytywania zresetuj pole śledzenia zakończenia strumienia w
DefaultAudioSink
przed wywołaniem funkcjiAudioTrack.stop()
. Dzięki temuAudioTrack.StreamEventCallback#onPresentationEnded
będzie prawidłowo identyfikował się z odtworzeniem wszystkich oczekujących danych. - Naprawiono błąd w
SilenceSkippingAudioProcessor
, który powodował, że przejścia między różnymi formatami audio (np. stereo na mono) mogły spowodować zgłoszenie wyjątku (#1352). - Zaimplementuj
MediaCodecAudioRenderer.getDurationToProgressUs
, by ExoPlayer dynamicznie zaplanował, kiedy główna pętla pracy może wykonać MediaCodecAudioRenderer.
- Film:
- Napraw logikę awaryjny dekodera dla Dolby Vision, by w razie potrzeby używać zgodnego dekodera AV1 (#1389).
- Tekst:
- Rozwiązanie problemu polegającego na tym, że napisy rozpoczynające się przed pozycją przewijania są pomijane. Ten problem został wprowadzony tylko w Media3 w wersji 1.4.0-alfa01.
- Zmień domyślny sposób analizy napisów, tak aby odbywał się podczas wyodrębniania, a nie podczas renderowania (różnicę między wyodrębnianiem a renderowaniem znajdziesz na schemacie architektury ExoPlayer).
- Tę zmianę można zastąpić, wywołując zarówno
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
, jak iTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Informacje o tym, jak umieścić te komponenty w instancjiExoPlayer
, znajdziesz w dokumentacji dotyczącej dostosowywania. Te metody (oraz cała obsługa dekodowania starszych napisów) zostaną usunięte w przyszłej wersji. - Aplikacje z niestandardową implementacją
SubtitleDecoder
muszą zaktualizować je tak, aby zamiastSubtitleDecoderFactory
implementowały one zasadęSubtitleParser
(iSubtitleParser.Factory
).
- Tę zmianę można zastąpić, wywołując zarówno
- PGS: napraw dekodowanie długości trwania, aby wskazać
0
jako indeks kolorów zamiast dosłownej wartości koloru (#1367). - CEA-708: ignoruj wartość
rowLock
. Specyfikacja CEA-708-E S-2023 stanowi, że obie wartości właściwościrowLock
icolumnLock
powinny być traktowane jako prawdziwe, niezależnie od wartości występujących w strumieniu (obsługacolumnLock
nie jest zaimplementowana, więc w rzeczywistości przyjmuje się, że zawsze ma ona wartość fałsz).- Ta zmiana była pierwotnie uwzględniona w informacjach o wersji
1.3.0-alpha01
, ale została przypadkowo cofnięta przed wersją1.3.0-rc01
. Problem został już rozwiązany, więc zmiana jest już wprowadzona.
- Ta zmiana była pierwotnie uwzględniona w informacjach o wersji
- CEA-708: unikaj dodawania powielonych wierszy do nowego wiersza przez następne działanie polecenia „set pen location” (ustaw lokalizację rysika) przez ExoPlayer (#1315).
- Metadane:
- Popraw mapowanie tagów sortowania MP4 na identyfikatory ID3. Wcześniej tagi MP4 „sortowanie albumu” (
soal
), „sortowanie według wykonawcy” (soar
) i „sortowanie według wykonawcy albumu” (soaa
) były niewłaściwie zmapowane na tagiTSO2
,TSOA
iTSOP
ID3 (#1302). - Poprawiono odczyt liczbowych tagów
gnre
(genre) itmpo
(tempo) MP4 (/iTunes), gdy wartość ma więcej niż 1 bajt. - Propaguj ramkę
TCON
o identyfikatorze 3 doMediaMetadata.genre
(#1305).
- Popraw mapowanie tagów sortowania MP4 na identyfikatory ID3. Wcześniej tagi MP4 „sortowanie albumu” (
- Obraz:
- Dodano obsługę niekwadratowych siatek miniatur DASH (#1300).
- Dodano obsługę AVIF w przypadku interfejsu API w wersji 34 lub nowszej.
- Źródło danych:
- Zezwalaj funkcji
ByteArrayDataSource
na rozstrzyganie identyfikatora URI do tablicy bajtów podczasopen()
, zamiast być zakodowany na stałe podczas budowy (#1405).
- Zezwalaj funkcji
- DRM:
- Zezwalaj na ustawienie
LoadErrorHandlingPolicy
wDefaultDrmSessionManagerProvider
(#1271).
- Zezwalaj na ustawienie
- Efekt:
- Naprawiono błąd, który powodował awarię
TimestampWrapper
podczas używania zExoPlayer#setVideoEffects
(#821). - Zmień domyślny obszar roboczy koloru SDR z kolorów liniowych na elektryczny film SDR BT 709. Udostępnij też trzecią opcję zachowania oryginalnej przestrzeni kolorów.
- Zezwalaj na definiowanie nieokreślonej kolejności elementów EditedMediaItemSequences (#1055).
- Utrzymuj stały zakres luminancji dla różnych fragmentów treści HDR (korzysta z zakresu HLG).
- Dodaliśmy obsługę nakładek Ultra HDR (bitmapy) w przypadku treści HDR.
- Zezwalaj na używanie efektów
SeparableConvolution
przed interfejsem API 26.
- Naprawiono błąd, który powodował awarię
- Rozszerzenie IMA:
- Zmień interfejs API, który jest wymagany, aby aplikacje odtwarzały strumienie reklam w ramach DAI do wersji stabilnej.
- Dodanie parametru
replaceAdTagParameters(Map <String, String>)
do taguImaServerSideAdInsertionMediaSource.AdLoader
umożliwia zastępowanie parametrów tagu reklamy w czasie działania. - Naprawiono błąd, który powodował, że podczas odtwarzania reklamy nie był wywoływane wywołanie
VideoAdPlayer.VideoAdPlayerCallback.onError
(#1334). - Zmień wersję pakietu IMA SDK na 3.33.0, aby naprawić błąd
NullPointerException
, gdy używasz identyfikatorów URI tagu reklamydata://
(#700).
- Sesja:
- Ukryj pasek przewijania w powiadomieniu o multimediach w transmisjach na żywo, nie ustawiając czasu trwania w metadanych sesji platformy (#1256).
- Dopasuj konwersję wartości
MediaMetadata
naMediaDescriptionCompat
, aby podczas wybierania właściwości metadanych używać tej samej preferowanej kolejności i tej samej logiki co w przypadku media1. - Dodaj identyfikator
MediaSession.sendError()
, który umożliwia wysyłanie błędów niekrytycznych do kontrolera Media3. W przypadku korzystania z kontrolera powiadomień (patrzMediaSession.getMediaNotificationControllerInfo()
) błąd niestandardowy służy do zaktualizowania elementuPlaybackState
sesji platformy do stanu błędu z podanymi informacjami o błędzie (#543).
- Rozszerzenie Cronet:
- Napraw problem
SocketTimeoutException
w:CronetDataSource
. W niektórych wersjach Cronet żądanie przekazane przez wywołanie zwrotne nie zawsze jest takie samo. Spowoduje to, że wywołanie zwrotne nie zostanie ukończone i przekroczy limit czasu żądania (https://issuetracker.google.com/328442628).
- Napraw problem
- Rozszerzenie HLS:
- Naprawiono błąd polegający na tym, że oczekujące próbki EMSG oczekujące na nieciągłość zostały przekazane w polu
HlsSampleStreamWrapper
z nieprawidłowym przesunięciem powodującym błądIndexOutOfBoundsException
lubIllegalArgumentException
(#1002). - Naprawiono błąd polegający na tym, że w przypadku strumieni LL-HLS ciągle ładują się ponownie playlisty inne niż podstawowa (#1240).
- Naprawiono błąd, który powodował, że włączenie CMCD dla HLS z segmentami inicjowania skutkowało wywołaniem
Source Error
iIllegalArgumentException
.
- Naprawiono błąd polegający na tym, że oczekujące próbki EMSG oczekujące na nieciągłość zostały przekazane w polu
- Rozszerzenie DASH:
- Rozszerzenie Cast:
- Naprawiono błąd polegający na przekształceniu tytułu albumu
MediaQueueItem
na wykonawcę w elemencie multimedialnym3 (#1255).
- Naprawiono błąd polegający na przekształceniu tytułu albumu
- Aplikacja w wersji demonstracyjnej
- Zezwalaj na ustawianie trybu powtarzania za pomocą argumentów
Intent
z wiersza poleceń (#1266).
- Zezwalaj na ustawianie trybu powtarzania za pomocą argumentów
- Usuń wycofane symbole:
- Usuń metodę
setContentTypePredicate(Predicate)
z metodDefaultHttpDataSource
,OkHttpDataSource
iCronetDataSource
. Użyj tej samej metody w każdym elemencieXXXDataSource.Factory
. - Usuń konstruktory
OkHttpDataSource
iOkHttpDataSourceFactory
. Użyj w zamian zasadyOkHttpDataSource.Factory
. - Usuń
PlayerMessage.setHandler(Handler)
. Użyj w zamian zasadysetLooper(Looper)
. - Usuń pole
Timeline.Window.isLive
. Zamiast tego użyj metodyisLive()
. - Usuń konstruktory
DefaultHttpDataSource
. UżyjDefaultHttpDataSource.Factory
. - Usuń
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. UżyjDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - Usuń
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Użyj w zamian zasadyMediaCodecInfo.canReuseCodec(Format, Format)
. - Usuń metody
DrmSessionManager.DUMMY
igetDummyDrmSessionManager()
. Użyj w zamian zasadyDrmSessionManager.DRM_UNSUPPORTED
. - Usuń
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Użyj przeciążeń, które zajmująDecoderReuseEvaluation
. - Usuń stałe
RendererSupport.FormatSupport
iFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
iFORMAT_UNSUPPORTED_TYPE
. Użyj równoważnej wartości IntDef i stałych w elemencieandroidx.media3.common.C
(np.C.FORMAT_HANDLED
).
- Usuń metodę
Wersja 1.4.0-alpha01
17 kwietnia 2024 r.
Usługa androidx.media3:media3-*:1.4.0-alpha01
została zwolniona.
Wersja 1.4.0-alfa01 zawiera te zatwierdzenia.
- ExoPlayer:
- Dodaj komponent
BasePreloadManager
, który koordynuje wstępne wczytywanie wielu źródeł na podstawie priorytetów zdefiniowanych w parametrachrankingData
. Dostosowanie jest możliwe dzięki rozszerzeniu tej klasy. Dodaj polecenieDefaultPreloadManager
, które używaPreloadMediaSource
do wstępnego wczytywania przykładowych multimediów ze źródeł do pamięci i używa liczby całkowitejrankingData
, która wskazuje indeks elementu w interfejsie. - Dodaj
PlayerId
do większości metodLoadControl
, aby umożliwić implementacjiLoadControl
obsługi wielu odtwarzaczy. - Usuń
Buffer.isDecodeOnly()
iC.BUFFER_FLAG_DECODE_ONLY
. Nie musisz ustawiać tej flagi jako mechanizmy renderowania, a dekodery będą pomijać bufory na podstawie sygnatury czasowej. Niestandardowe implementacje interfejsuRenderer
powinny sprawdzić, czy czas buforowania wynosi co najmniejBaseRenderer.getLastResetPositionUs()
, aby zdecydować, czy należy wyświetlić próbkę. Niestandardowe implementacjeSimpleDecoder
mogą w razie potrzeby zaznaczyć poleisAtLeastOutputStartTimeUs
lub oznaczyć inne bufory za pomocą parametruDecoderOutputBuffer.shouldBeSkipped
, aby je pominąć. - Zezwalaj na zwracanie przez
TargetPreloadStatusControl.getTargetPreloadStatus(T)
wartości null, aby wskazać, że nie należy wstępnie wczytywaćMediaSource
za pomocą podanego parametrurankingData
. - Dodaj
remove(MediaSource)
doBasePreloadManager
.
- Dodaj komponent
- Transformer:
- Dodaj
audioConversionProcess
ivideoConversionProcess
doExportResult
, aby wskazać, jak utworzono odpowiednią ścieżkę w pliku wyjściowym. - Łatwiejsze sprawdzanie przycięcia wersji H.264
- Dodanie obsługi przełączania między nośnikami wejściowymi SDR i HDR w sekwencjach.
- Dodanie obsługi efektów dźwiękowych na poziomie kompozycji.
- Dodaliśmy obsługę transkodowania obrazów ultra HDR na filmy HDR.
- Rozwiązanie problemu polegającego na tym, że po zresetowaniu i ponownie użytym urządzeniu
DefaultAudioMixer
nie zwraca prawidłowej liczby bajtów.
- Dodaj
- Film:
- Rozwiązanie problemu polegającego na tym, że przy przełączaniu platform w trakcie odtwarzania treści
Listener.onRenderedFirstFrame()
pojawia się zbyt wcześnie.
- Rozwiązanie problemu polegającego na tym, że przy przełączaniu platform w trakcie odtwarzania treści
- Źródło danych:
- Zaimplementuj obsługę identyfikatorów URI nieprzetworzonych zasobów
android.resource://package/id
, gdziepackage
różni się od pakietu bieżącej aplikacji. Dotychczas nie udokumentowaliśmy, że ta metoda działa, ale jest to skuteczniejszy sposób uzyskiwania dostępu do zasobów w innym pakiecie niż nazwa. - Sprawdź z własnością wartość
url
w konstruktorachDataSpec
. Ten parametr został już oznaczony jako niepusty.
- Zaimplementuj obsługę identyfikatorów URI nieprzetworzonych zasobów
- Efekt:
- Obsługuj kilka zmian szybkości w obrębie tego samego
EditedMediaItem
lubComposition
w poluSpeedChangeEffect
. - Obsługa HLG i PQ z wejścia mapy bitowej ultra HDR.
- Dodano obsługę EGL_GL_COLORSPACE_BT2020_HLG_EXT, która ulepsza dane wyjściowe HLG w przypadku ExoPlayer.setVideoEffect i Debuger SurfaceView.
- Zaktualizuj implementację matrycy nakładki, aby była spójna z dokumentacją, i odwróć wartości x i y zastosowane w zasadzie
setOverlayFrameAnchor()
. Jeśli używaszOverlaySettings.Builder.setOverlayFrameAnchor()
, odwróć ich wartości x i y, mnożąc je przez-1
.
- Obsługuj kilka zmian szybkości w obrębie tego samego
- Sesja:
- Zmień wartość domyślną z
CommandButton.enabled
natrue
i upewnij się, że ta wartość może pozostać Fałsz w przypadku kontrolerów, nawet jeśli powiązane polecenie jest dostępne. - Dodaj stałe ikony dla elementu
CommandButton
, których należy używać zamiast zasobów ikon niestandardowych. - Dodaj
MediaSessionService.isPlaybackOngoing()
, aby umożliwić aplikacjom wysyłanie zapytań o to, czy wonTaskRemoved()
(#1219) trzeba zatrzymać usługę. - Dodaj element
MediaSessionService.pauseAllPlayersAndStopSelf()
, który pozwala w wygodny sposób wstrzymać odtwarzanie wszystkich sesji, i wywołuj metodęstopSelf
, aby zakończyć cykl życia sesjiMediaSessionService
. - Zastąp
MediaSessionService.onTaskRemoved(Intent)
, aby zapewnić bezpieczną implementację domyślną, dzięki której usługa działa na pierwszym planie, jeśli odtwarzanie trwa, lub zatrzymuje jej działanie w innym przypadku.
- Zmień wartość domyślną z
- Pobrane pliki:
- Zadbaj o to, aby usługa
DownloadHelper
nie ujawniała nieopublikowanych instancjiRenderer
, co może doprowadzić do awarii aplikacji przy użyciuIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Zadbaj o to, aby usługa
- Narzędzia testowe:
- Wdróż
onInit()
ionRelease()
wFakeRenderer
. - Zmień metody
TestPlayerRunHelper.runUntil/playUntil
, aby zawodziły w przypadku błędów niekrytycznych (np. tych zgłoszonych doAnalyticsListener.onVideoCodecError
). Aby wyłączyć to działanie, użyj nowego łańcucha metodTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
.
- Wdróż
- Aplikacja w wersji demonstracyjnej
- Użyj
DefaultPreloadManager
w krótkiej wersji demonstracyjnej aplikacji.
- Użyj
- Usuń wycofane symbole:
- Usuń
CronetDataSourceFactory
. Użyj w zamian zasadyCronetDataSource.Factory
. - Usuń niektóre konstruktory
DataSpec
. Użyj w zamian zasadyDataSpec.Builder
.
- Usuń
Wersja 1.3.0
Wersja 1.3.1
11 kwietnia 2024 r.
Usługa androidx.media3:media3-*:1.3.1
została zwolniona.
Wersja 1.3.1 zawiera te zatwierdzenia.
- Wspólna biblioteka:
- Aby zezwolić na zlokalizowane lub inne etykiety, dodaj
Format.labels
.
- Aby zezwolić na zlokalizowane lub inne etykiety, dodaj
- ExoPlayer:
- Rozwiązanie problemu polegającego na tym, że
PreloadMediaPeriod
nie może zachować strumieni po ponownym załadowaniu. - Zastosuj właściwą wartość
TrackSelectionResult
do okresu odtwarzania przy ponownym wyborze utworu. - Uruchamiaj mechanizmy renderowania we wczesnej wersji dopiero po upływie okresu odtwarzania przy przejściu między elementami multimedialnymi (#1017).
- Dodaj brakujący typ zwrotu do reguły ProGuard
-keepclasseswithmembers
dlaDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Rozwiązanie problemu polegającego na tym, że
- Transformer:
- Dodaj obejście wyjątku zgłoszonego, ponieważ
MediaMuxer
nie obsługuje wykluczających sygnatur czasowych prezentacji przed interfejsem API 30.
- Dodaj obejście wyjątku zgłoszonego, ponieważ
- Wybór ścieżki:
DefaultTrackSelector
: preferuj ścieżki wideo z „wystarczającą” liczbą klatek (>=10 kl./s) zamiast tych z niższą lub nieustawioną liczbą klatek. Dzięki temu odtwarzacz wybiera „prawdziwą” ścieżkę wideo w formacie MP4 wyodrębnionym ze zdjęć ruchomych, które mogą zawierać dwie ścieżki HEVC, z których jedna ma wyższą rozdzielczość, ale bardzo małą liczbę klatek (#1051).
- Moduły wyodrębniania danych:
- Rozwiązanie problemu polegającego na tym, że dopełnienie nie było pomijane podczas odczytywania nieparzystych fragmentów z plików WAV (#1117).
- MP3: wypełnij plik
Format.averageBitrate
z ramek metadanych, takich jakXING
iVBRI
. - MPEG-TS: cofnięcie zmiany, która miała zagwarantować wyrenderowanie ostatniej klatki, przez przekazanie ostatniej jednostki dostępu strumienia do kolejki próbek (#7909). Wynika to ze zmiany, która powoduje nowe problemy ze strumieniami HLS (#1150) i H.262 HLS (#1126) tylko ze strumieniami I-Frame.
- Dźwięk:
- Zezwalaj na przywracanie mechanizmu renderowania przez wyłączenie funkcji odciążania, jeśli nie uda się zainicjować ścieżki audio w trybie odciążania.
- Film:
- Dodaj obejście problemu z urządzeniem na Galaxy Tab S7 FE, urządzeniu Chromecast z Google TV i Lenovo M10 FHD Plus, który powoduje, że strumienie H265 o szybkości 60 kl./s są oznaczane jako nieobsługiwane
- Dodaj obejście, które zapewni, że pierwsza klatka będzie zawsze renderowana podczas tunelowania, nawet jeśli urządzenie nie zrobi tego automatycznie zgodnie z wymaganiami interfejsu API (#1169). (#966).
- Rozwiązanie problemu, który polegał na tym, że obsługa informacji o kolorach HDR powoduje nieprawidłowe działanie kodeka i uniemożliwia przełączanie formatu adaptacyjnego ścieżek wideo SDR (#1158).
- Tekst:
- WebVTT: zapobiegaj tworzeniu fałszywych instancji
CuesWithTiming
bezpośrednio po sobie przez wskazówki zWebvttParser.parse
(#1177).
- WebVTT: zapobiegaj tworzeniu fałszywych instancji
- DRM:
- Obejście problemu
NoSuchMethodError
, który może zostać zgłoszony przez platformęMediaDrm
zamiastResourceBusyException
lubNotProvisionedException
na niektórych urządzeniach z Androidem 14 (#1145).
- Obejście problemu
- Efekt:
- Poprawiono mapowanie tonów PQ na SDR przez konwersję przestrzeni kolorów.
- Sesja:
- Rozwiązanie problemu polegającego na tym, że bieżąca pozycja cofa się, gdy kontroler zastępuje bieżący element (#951).
- Rozwiązanie problemu, który polegał na tym, że między kontrolerami multimediów a sesjami nie jest przesyłana wartość
MediaMetadata
z tylko wartościąextras
o wartości innej niż null (#1176).
- Interfejs:
- Jeśli
Locale
nie może zidentyfikować wyświetlanej nazwy, dodaj nazwę języka ścieżki audio (#988).
- Jeśli
- Rozszerzenie DASH:
- Wypełnij wszystkie elementy
Label
z pliku manifestu do polaFormat.labels
(#1054).
- Wypełnij wszystkie elementy
- Rozszerzenie RTSP:
- Pomiń puste wartości informacji o sesji (i-tagi) podczas analizy SDP (#1087).
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Domyślnie wyłącz rozszerzenie MIDI jako zależność lokalną, ponieważ wymaga ono skonfigurowania dodatkowego repozytorium Maven. Użytkownicy, którzy potrzebują tego modułu z zależności lokalnej, mogą go ponownie włączyć.
Wersja 1.3.0
6 marca 2024 roku
Usługa androidx.media3:media3-*:1.3.0
została zwolniona.
Wersja 1.3.0 zawiera te zatwierdzenia.
- Wspólna biblioteka:
- Zaimplementuj obsługę identyfikatorów URI nieprzetworzonych zasobów
android.resource://package/[type/]name
, gdziepackage
różni się od pakietu bieżącej aplikacji. Działanie to zawsze było udokumentowane, ale do tej pory nie było stosowane prawidłowo. - Normalizuj typy MIME ustawione przez kod aplikacji lub odczytywane z multimediów, tak aby były w pełni pisane małymi literami.
- Definiuj reklamy zawierające pełne
MediaItem
zamiast pojedynczych reklamUri
w języku:AdPlaybackState
. - Zwiększ
minSdk
do 19 (Android KitKat). Jest to dostosowane do wszystkich pozostałych bibliotek AndroidaX i jest wymagane, abyśmy mogli przejść na najnowszą wersję zależności AndroidaX. - Wypełnij pola
artworkUri
iartworkData
w poluMediaMetadata.Builder.populate(MediaMetadata)
, gdy co najmniej 1 z nich ma wartość inną niż null (#964).
- Zaimplementuj obsługę identyfikatorów URI nieprzetworzonych zasobów
- ExoPlayer:
- Dodaj zasady
PreloadMediaSource
iPreloadMediaPeriod
, które umożliwiają aplikacjom wstępne wczytywanie źródła multimediów treści w określonej pozycji początkowej przed odtworzeniem.PreloadMediaSource
przygotowuje źródło multimediów do otrzymaniaTimeline
, przygotowuje i zapisuje okres w danej pozycji początkowej, wybiera ścieżki i wczytuje dane multimediów dla tego okresu. Aplikacje kontrolują postęp wstępnego wczytywania, implementując poleceniePreloadMediaSource.PreloadControl
i ustawiając wstępnie wczytywane źródło do odtwarzacza, aby można było je odtwarzać. - Dodaj obiekt
ExoPlayer.setImageOutput
, który umożliwia aplikacjom konfigurowanie ustawieńImageRenderer.ImageOutput
. DefaultRenderersFactory
domyślnie udostępnia odtwarzaczowi wartośćImageRenderer
z wartościami nullImageOutput
iImageDecoder.Factory.DEFAULT
.- Emituj zdarzenie
Player.Listener.onPositionDiscontinuity
po pominięciu ciszy (#765). - Dodano eksperymentalną obsługę analizy napisów podczas wyodrębniania. Możesz to włączyć za pomocą
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Obsługuj adaptacyjne źródła multimediów za pomocą funkcji
PreloadMediaSource
. - Zaimplementuj
HttpEngineDataSource
(HttpDataSource
) za pomocą interfejsu API HttpEngine. - Zapobiegaj podklasyfikowaniu
CompositeSequenceableLoader
. Ten komponent był wcześniej rozszerzalny, ale nigdy nie był podklasyfikowany w bibliotece. Aby dostosować instancję, należy opakować instancję za pomocą wzorca dekoratora i zaimplementować niestandardowyCompositeSequenceableLoaderFactory
. - Rozwiązanie problemu, który polegał na tym, że powtarzanie tego samego czasu powoduje usunięcie metadanych z tego elementu (#1007).
- Zmień nazwy metod
experimentalSetSubtitleParserFactory
naBundledChunkExtractor.Factory
iDefaultHlsExtractorFactory
nasetSubtitleParserFactory
i zablokuj przekazywanie danychnull
. Używaj nowych metodexperimentalParseSubtitlesDuringExtraction(boolean)
do kontrolowania działania analizy. - Dodano obsługę dostosowywania właściwości
SubtitleParser.Factory
używanej podczas wyodrębniania. Umożliwia toMediaSource.Factory.setSubtitleParserFactory()
. - Dodaj prefiks źródła do wszystkich pól
Format.id
wygenerowanych na podstawieMergingMediaSource
. Pomaga to określić, z którego źródła pochodziFormat
(#883). - Popraw wyrażenie regularne używane do weryfikacji nazw kluczy niestandardowych danych klienta (CMCD), modyfikując je tak, aby sprawdzało tylko łączniki (#1028).
- Zatrzymaj podwójne kodowanie parametrów zapytania CMCD (#1075).
- Dodaj zasady
- Transformer:
- Dodano obsługę spłaszczania filmów w zwolnionym tempie w formacie H.265/HEVC SEF.
- Zwiększ szybkość transmuksowania, zwłaszcza przy usuwaniu zmian za pomocą polecenia „usuń film”.
- Dodaj interfejs API, aby mieć pewność, że plik wyjściowy będzie zaczynać się w ramce wideo. Dzięki temu dane wyjściowe operacji przycinania będą bardziej zgodne z implementacjami odtwarzacza, w których pierwsza klatka filmu nie pojawia się aż do momentu jej prezentacji (#829).
- Dodanie obsługi optymalizacji operacji przycinania w formacie MP4 pojedynczego zasobu.
- Dodaj obsługę, aby klatka wideo miała w pliku wyjściowym pierwszą sygnaturę czasową. Naprawia pliki wyjściowe rozpoczynające się od czarnej ramki w odtwarzaczach na iOS (#829).
- Wybór ścieżki:
- Aby umożliwić wybór ścieżki obrazów, dodaj
DefaultTrackSelector.selectImageTrack
. - Dodaj
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
, aby określić, czy wybrać ścieżkę obrazu, jeśli dostępna jest zarówno ścieżka obrazu, jak i ścieżka wideo. Wartość domyślna tofalse
, co oznacza, że wybór ścieżki wideo ma priorytet.
- Aby umożliwić wybór ścieżki obrazów, dodaj
- Moduły wyodrębniania danych:
- Dodaj dodatkową analizę AV1C do wyodrębniania MP4, aby pobrać wartości
ColorInfo.colorSpace
,ColorInfo.colorTransfer
iColorInfo.colorRange
(#692). - MP3: przewijanie o stałej szybkości transmisji bitów (CBR) w przypadku plików z nagłówkiem
Info
(odpowiednik CBR nagłówkaXing
). Wcześniej użyliśmy tabeli przewijania z nagłówkaInfo
, ale powoduje to mniej precyzyjne przewijanie niż w przypadku zignorowania jej i założenia, że plik to CBR. - MPEG2-TS: obsługa DTS, DTS-LBR i DTS:X Profile2 (#275).
- Wyodrębnianie typów audio z deskryptorów TS i mapowanie ich na flagi ról, umożliwiając użytkownikom dokonywanie świadomych wyborów ścieżek audio (#973).
- Dodaj dodatkową analizę AV1C do wyodrębniania MP4, aby pobrać wartości
- Dźwięk:
- Film:
- Zmień konstruktor
MediaCodecVideoRenderer
, który przyjmuje argumentVideoFrameProcessor.Factory
, i zastąp go konstruktorem, który przyjmuje argumentVideoSinkProvider
. Aplikacje, które chcą wstrzyknąć niestandardowyVideoFrameProcessor.Factory
, mogą utworzyć instancjęCompositingVideoSinkProvider
, która korzysta z niestandardowegoVideoFrameProcessor.Factory
, i przekazywać dostawcę ujścia wideo doMediaCodecVideoRenderer
.
- Zmień konstruktor
- Tekst:
- Napraw serializację wskazówek dotyczących mapy bitowej, aby naprawić błąd
Tried to marshall a Parcel that contained Binder objects
podczas używaniaDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignoruj wartość
rowLock
. Specyfikacja CEA-708-E S-2023 stanowi, że obie wartości właściwościrowLock
icolumnLock
powinny być traktowane jako prawdziwe, niezależnie od wartości występujących w strumieniu (obsługacolumnLock
nie jest zaimplementowana, więc w rzeczywistości przyjmuje się, że zawsze ma ona wartość fałsz).
- Napraw serializację wskazówek dotyczących mapy bitowej, aby naprawić błąd
- Obraz:
- Dodanie obsługi miniatur DASH. Obrazy w siatce są przycinane, a pojedyncze miniatury są przesyłane do
ImageOutput
w zbliżonym czasie.
- Dodanie obsługi miniatur DASH. Obrazy w siatce są przycinane, a pojedyncze miniatury są przesyłane do
- DRM:
- Domyślnie odtwarzaj domyślnie niezaszyfrowane próbki potencjalnych klientów w treściach DRM, nawet jeśli klucze do późniejszych zaszyfrowanych próbek nie są jeszcze gotowe. Może to spowodować zatrzymanie odtwarzania w trakcie odtwarzania, jeśli klucze nadal nie są gotowe, gdy pozycja odtwarzania osiągnie zaszyfrowane próbki (ale wcześniej odtwarzanie w ogóle się nie rozpoczęło). To zachowanie można wyłączyć za pomocą funkcji
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
lubDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Domyślnie odtwarzaj domyślnie niezaszyfrowane próbki potencjalnych klientów w treściach DRM, nawet jeśli klucze do późniejszych zaszyfrowanych próbek nie są jeszcze gotowe. Może to spowodować zatrzymanie odtwarzania w trakcie odtwarzania, jeśli klucze nadal nie są gotowe, gdy pozycja odtwarzania osiągnie zaszyfrowane próbki (ale wcześniej odtwarzanie w ogóle się nie rozpoczęło). To zachowanie można wyłączyć za pomocą funkcji
- Rozszerzenie IMA:
- Rozwiązanie problemu polegającego na tym, że nie można odtwarzać reklam DASH i HLS bez odpowiedniego rozszerzenia pliku.
- Sesja:
- Wyłącz wykrywanie dwukrotnych kliknięć w aplikacjach TV (#962).
- Rozwiązanie problemu polegającego na tym, że między kontrolerami multimediów a sesjami obiekt
MediaItem.RequestMetadata
z tylko niepustymi dodatkami nie jest przesyłany. - Dodaj do
MediaLibrarySession.Builder
konstruktor, który wymaga tylkoContext
zamiastMediaLibraryService
.
- Rozszerzenie HLS:
- Ogranicz
HlsMediaPeriod
do prywatnej widoczności pakietów. Ten typ nie powinien być bezpośrednio zależny od pakietu HLS. - Rozwiązanie pozwala skuteczniej szukać początku segmentu (#1031).
- Ogranicz
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Dekoder MIDI: ignoruj komunikaty o zdarzeniach SysEx (#710).
- Narzędzia testowe:
- Nie wstrzymuj odtwarzania za
TestPlayerRunHelper.playUntilPosition
. Test powoduje utrzymanie odtwarzania w stanie odtwarzania, ale zawiesza postęp do czasu, aż w ramach testu pojawią się asercje i dalsze działania.
- Nie wstrzymuj odtwarzania za
- Aplikacja w wersji demonstracyjnej
- Dodaj krótki moduł demonstracyjny, aby zaprezentować zastosowanie
PreloadMediaSource
w przypadku użycia krótkich treści.
- Dodaj krótki moduł demonstracyjny, aby zaprezentować zastosowanie
Wersja 1.3.0-rc01
22 lutego 2024 r.
Użyj wersji stabilnej 1.3.0.
Wersja 1.3.0-beta01
7 lutego 2024 r.
Użyj wersji stabilnej 1.3.0.
Wersja 1.3.0-alpha01
15 stycznia 2024 r.
Użyj wersji stabilnej 1.3.0.
Wersja 1.2.0
Wersja 1.2.1
9 stycznia 2024 r.
- ExoPlayer:
- Rozwiązanie problemu polegającego na tym, że ręczne przewijanie poza zakresem
LiveConfiguration.min/maxOffset
nadal koryguje przesunięcie z powrotem domin/maxOffset
. - Rozwiąż problem, który polegał na tym, że układy kanałów OPUS i VORBIS są nieprawidłowe w przypadku 3, 5, 6, 7 i 8 kanałów (#8396).
- Rozwiązanie problemu polegającego na tym, że wybór ścieżki po przejściu do zera w transmisji na żywo powoduje nieprawidłowe rozpoczęcie transmisji od pozycji domyślnej (#9347).
- Rozwiązaliśmy problem, który powodował, że nowe wystąpienia zmiennej
CmcdData.Factory
otrzymywały wartości ujemne dla parametrubufferedDurationUs
ze źródeł fragmentów, powodując powstawanie błęduIllegalArgumentException
(#888).
- Rozwiązanie problemu polegającego na tym, że ręczne przewijanie poza zakresem
- Transformer:
- Rozwiąż problem, który powodował, że koder wydłużył czas konfiguracji z powodu ustawienia wysokiej szybkości działania.
- Moduły wyodrębniania danych:
- Oznacz dodatkowe (nieodtwarzane) ścieżki HEVC w zdjęciach ruchomych JPEG jako
ROLE_FLAG_ALTERNATE
, aby uniemożliwić ich automatyczne odtwarzanie ze względu na wyższą rozdzielczość. - Naprawianie nieprawidłowego wykrywania klatek kluczowych w przypadku strumieni TS H264 (#864).
- Popraw szacowany czas trwania strumieni TS, który jest dłuższy niż 47 721 sekund (#855).
- Oznacz dodatkowe (nieodtwarzane) ścieżki HEVC w zdjęciach ruchomych JPEG jako
- Dźwięk:
- Naprawa obsługi EOS w przypadku funkcji
SilenceSkippingAudioProcessor
w przypadku wielokrotnego wywoływania (#712).
- Naprawa obsługi EOS w przypadku funkcji
- Film:
- Dodaj obejście problemu z urządzeniem na urządzeniach Galaxy Tab S7 FE, Chromecast z Google TV i Lenovo M10 FHD Plus, który powoduje, że strumienie AVC 60 kl./s są oznaczane jako nieobsługiwane (#693).
- Metadane:
- Naprawiono błąd polegający na tym, że w komentarzach Vorbisa pole
MediaMetadata
było wypełniane tylko wielkimi literami (#876). - Wyłapuje element
OutOfMemoryError
podczas analizowania bardzo dużych klatek ID3. Oznacza to, że odtwarzanie może być kontynuowane bez informacji o tagu, a odtwarzanie kończy się niepowodzeniem.
- Naprawiono błąd polegający na tym, że w komentarzach Vorbisa pole
- DRM:
- Rozszerz obejście adresu URL fałszywej licencji ClearKey
https://default.url
na interfejs API w wersji 33 lub nowszej (wcześniej obejście stosowane było dokładnie w interfejsie API 33) (#837). - Napraw
ERROR_DRM_SESSION_NOT_OPENED
, jeśli przełączasz się z zaszyfrowanej na oczyszczoną treść bez przymocowanej powierzchni do odtwarzacza. Przyczyną błędu było nieprawidłowe użycie bezpiecznego dekodera do odtwarzania wyraźnych treści.
- Rozszerz obejście adresu URL fałszywej licencji ClearKey
- Sesja:
- Umieść niestandardowe klucze i wartości w komórce
MediaMetadataCompat
jakoMediaMetadata.extras
, aMediaMetadata.extras
jakoMediaMetadataCompat
(#756, #802). - Poprawiono transmisję
notifyChildrenChanged
w przypadku starszych kontrolerów (#644). - Naprawiono błąd, który powodował, że ustawienie ujemnego czasu w przypadku wyłączonego minutnika
setWhen
powiadomienia powodowało awarię na niektórych urządzeniach (#903). - Rozwiązanie problemu
IllegalStateException
, który polegał na tym, że kontroler powiadomień o multimediach nie zakończył połączenia przy żądaniu pierwszej aktualizacji powiadomienia (#917).
- Umieść niestandardowe klucze i wartości w komórce
- Interfejs:
- Rozwiązanie problemu polegającego na tym, że przyciski przewijania do przodu i do tyłu nie były widoczne podczas używania stylu Material Design we fragmencie bottomSheetDialogFragment (#511).
- Rozwiązanie problemu polegającego na tym, że liczby na przycisku przewijania do przodu na elemencie
PlayerControlView
były niewłaściwie wyrównane (#547).
- Rozszerzenie DASH:
- Przeanalizuj parametr „f800” jako liczbę kanałów równą 5 w przypadku Dolby w pliku manifestu DASH (#688).
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Rozszerzenie Cast:
- Napraw proces tworzenia obiektu
Timeline
, aby uniknąć awarii aplikacji, gdy nie uda się wczytać multimediów na urządzeniu przesyłającym (#708).
- Napraw proces tworzenia obiektu
Wersja 1.2.0
15 listopada 2023 r.
- Wspólna biblioteka:
- Dodaj parametr
@Nullable Throwable
do metod w interfejsieLog.Logger
. Parametrmessage
tych metod nie zawiera już żadnych informacji oThrowable
przekazanych do metodLog.{d,i,w,e}()
, więc implementacje będą musiały ręcznie dołączać te informacje w razie potrzeby (ewentualnie przy użyciuLogger.appendThrowableString(String, Throwable)
). - Rozwiązanie problemu ze zgodnością z Kotlin, w którym ogólne parametry typu ogólne i elementy tablicy z możliwością wartości null nie są wykrywane jako dopuszczające wartości null. Przykładami są parametry metod
TrackSelectorResult
iSimpleDecoder
(#6792). - Zmień domyślny interfejs i działanie powiadomień w usłudze
Util.shouldShowPlayButton
, aby wyświetlać przycisk odtwarzania, gdy odtwarzanie jest tymczasowo wstrzymywane (np. z powodu tymczasowej utraty ostrości dźwięku). Starsze zachowanie można zachować, używając parametruPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
lubMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Zmień
androidx.annotation:annotation-experimental
na1.3.1
, aby rozwiązać problem https://issuetracker.google.com/251172715. - Przenieś
ExoPlayer.setAudioAttributes
do interfejsuPlayer
.
- Dodaj parametr
- ExoPlayer:
- Rozwiąż problemy z przewijaniem w strumieniach AC4 wynikające z nieprawidłowej identyfikacji próbek tylko do dekodowania (#11000).
- Dodaj blokowanie odtwarzania na nieodpowiednich urządzeniach wyjściowych audio (np. wbudowanym głośniku na urządzeniach z Wear OS), gdy ta funkcja jest włączona za pomocą
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Przyczyna wstrzymania odtwarzania zostanie zaktualizowana jakoPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
, jeśli zostanie podjęta próba odtwarzania, gdy nie ma odpowiednich wyjść audio lub gdy wszystkie odpowiednie wyjścia zostaną odłączone podczas odtwarzania. Przyczyna zablokowania zostanie usunięta po podłączeniu odpowiednich danych wyjściowych. - Dodaj
MediaSource.canUpdateMediaItem
iMediaSource.updateMediaItem
, aby zaakceptować aktualizacje typuMediaItem
po utworzeniu wPlayer.replaceMediaItem(s)
. - Zezwalaj na aktualizacje funkcji
MediaItem
w przypadku wszystkich klasMediaSource
udostępnionych przez bibliotekę za pomocąPlayer.replaceMediaItem(s)
(#33, #9978). - Zmień nazwę
MimeTypes.TEXT_EXOPLAYER_CUES
naMimeTypes.APPLICATION_MEDIA3_CUES
. - Dodaj
PngExtractor
, który wysyła i odczytuje doTrackOutput
cały plik PNG jako jedną próbkę. - Ulepsz metodę
SequenceableLoader.continueLoading(long)
w interfejsieSequenceableLoader
doSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
zawiera dodatkowe parametry, w tymplaybackSpeed
ilastRebufferRealtimeMs
, oprócz obecnychplaybackPositionUs
. - Ulepsz metodę
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
w interfejsieChunkSource
do wersjiChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Dodaj do rejestrowania danych Common Media Client Data (CMCD) dodatkowe pola: brak bufora (
bs
), termin (dl
), szybkość odtwarzania (pr
) i uruchomienie (su
) (#8699). - Dodaj głębię kolorów Lumy i chroma do funkcji
ColorInfo
(#491). - Dodaj więcej pól do logowania Common Media Client Data (CMCD): żądanie następnego obiektu (
nor
) i żądanie następnego zakresu (nrr
) (#8699). - Dodaj funkcje przesyłania danych Common Media Client Data (CMCD) przy użyciu parametrów zapytania (#553).
- Napraw problem
ConcurrentModificationException
w:ExperimentalBandwidthMeter
(#612). - Dodaj parametr
MediaPeriodId
doCompositeMediaSource.getMediaTimeForChildMediaTime
. - Obsługuj
ClippingMediaSource
(i inne źródła z przesunięciem okresu/okna) wConcatenatingMediaSource2
(#11226). - Zmień
BaseRenderer.onStreamChanged()
, aby otrzymać także argumentMediaPeriodId
.
- Transformer:
- Analizuj dane obrotu EXIF dla danych wejściowych obrazu.
- Usuń typ adnotacji
TransformationRequest.HdrMode
i powiązane z nim stałe. Zamiast niego używaj elementuComposition.HdrMode
i powiązanych z nim stałych. - Aby rozwiązać problemy z rotacją, uprość
OverlaySettings
. - Zmieniono parametry
frameRate
idurationUs
parametruSampleConsumer.queueInputBitmap
naTimestampIterator
.
- Wybór ścieżki:
- Aby wyraźnie zezwolić na łatwą adaptację lub ją zablokować, dodaj
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
. Wartość domyślna pozostaje bez zmian (true
).
- Aby wyraźnie zezwolić na łatwą adaptację lub ją zablokować, dodaj
- Moduły wyodrębniania danych:
- MPEG-TS: upewnij się, że ostatnia klatka została wyrenderowana, przekazując ostatnią jednostkę dostępu strumienia do kolejki przykładowej (#7909).
- Popraw literówkę podczas określania wartości
rotationDegrees
. ZmienionoprojectionPosePitch
naprojectionPoseRoll
(#461). - Usuń założenie, że instancje
Extractor
mogą być sprawdzane bezpośrednio przy użyciuinstanceof
. Jeśli chcesz uzyskać dostęp w czasie działania do szczegółów implementacji obiektuExtractor
, musisz najpierw wywołaćExtractor.getUnderlyingInstance
. - Dodaj
BmpExtractor
. - Dodaj
WebpExtractor
. - Dodaj
HeifExtractor
. - Dodaj obsługę klasycznej wersji QuickTime
do aplikacji
Mp4Extractor
.
- Dźwięk:
- Dodaj obsługę 24-/32-bitowego kodu PCM w formatach MP4 i Matroska oraz przeanalizuj kodowanie PCM dla
lpcm
w formacie MP4. - Dodano obsługę wyodrębniania dźwięku Vorbis w formacie MP4.
- Dodaj obiekt
AudioSink.getFormatOffloadSupport(Format)
, który pobiera poziom obsługi odciążania, który może zapewnić ujście w przypadku danego formatu za pomocą polaDefaultAudioOffloadSupportProvider
. Zwraca nową wartośćAudioOffloadSupport
, która zawieraisFormatSupported
,isGaplessSupported
iisSpeedChangeSupported
. - Dodaj element
AudioSink.setOffloadMode()
, który pozwala skonfigurować odciążanie w ujściach audio. Wartość domyślna toAudioSink.OFFLOAD_MODE_DISABLED
. - Odciążanie można włączyć za pomocą funkcji
setAudioOffloadPreference
w obszarzeTrackSelectionParameters
. Jeśli wybrane ustawienie ma być włączone, urządzenie obsługuje odciążanie w przypadku tego formatu, a wybór utworu to jedna ścieżka dźwiękowa, to wyłączenie dźwięku zostanie włączone. - Jeśli
audioOffloadModePreference
ma wartośćAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
wybiera ścieżkę audio tylko wtedy, gdy jej format jest obsługiwany przy odciążaniu. Jeśli przy odciążaniu nie jest obsługiwana żadna ścieżka audio, nie zostanie wybrana żadna ścieżka. - Wyłączenie obsługi odciążania w przypadku wersji sprzed interfejsu API na poziomie 33 z powodu problemu z pozycją odtwarzania po przejściu ścieżki.
- Usuń parametr
enableOffload
z podpisu metodyDefaultRenderersFactory.buildAudioSink
. - Usuń metodę
DefaultAudioSink.Builder.setOffloadMode
. - Usuń wartość intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Dodanie obsługi metadanych Opus podczas odtwarzania bez przerw.
- Zezwalaj na przywracanie mechanizmu renderowania przez wyłączenie funkcji odciążania w przypadku niepowodzenia przy pierwszym zapisie (#627).
- Włącz domyślnie planowanie przeładowania, aby odtwarzać bez dźwięku w trybie „Tylko dźwięk”.
- Usuń
ExoPlayer.experimentalSetOffloadSchedulingEnabled
iAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - Nazwa
onExperimentalSleepingForOffloadChanged
została zmieniona naonSleepingForOffloadChanged
, aonExperimentalOffloadedPlayback
naonOffloadedPlayback
. - Przenieś powiązane interfejsy i definicje
TrackSelectionParameters
związane z trybem odciążania dźwięku do wewnętrznej klasyAudioOffloadPreferences
. - Dodaj wywołania zwrotne
onAudioTrackInitialized
ionAudioTrackReleased
doAnalyticsListener
,AudioRendererEventListener
iAudioSink.Listener
. - Rozwiąż problem z niedostatecznym przepływem w buforze audio DTS Express (#650).
- Naprawiono błąd, który powodował, że sprawdzanie możliwości E-AC3-JOC powoduje wyświetlenie błędu
IllegalArgumentException
(#677).
- Dodaj obsługę 24-/32-bitowego kodu PCM w formatach MP4 i Matroska oraz przeanalizuj kodowanie PCM dla
- Film:
- Zezwól przeglądarce
MediaCodecVideoRenderer
na używanie niestandardowego interfejsuVideoFrameProcessor.Factory
. - Naprawiono błąd polegający na tym, że nie można było wyrenderować pierwszej klatki, jeśli strumień audio zaczyna się od ujemnych sygnatur czasowych (#291).
- Zezwól przeglądarce
- Tekst:
- Usuń
ExoplayerCuesDecoder
. Ścieżki tekstowe zawierające właściwośćsampleMimeType = application/x-media3-cues
są teraz obsługiwane bezpośrednio przez usługęTextRenderer
bez konieczności instancjiSubtitleDecoder
.
- Usuń
- Metadane:
- Funkcja
MetadataDecoder.decode
nie będzie już wywoływana w przypadku przykładów „tylko dekodowanie”, ponieważ implementacja i tak musi zwracać wartość null.
- Funkcja
- Efekt:
- Dodaj
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
do kolejki bitmapowej według sygnatury czasowej. - Zmień ustawienie
VideoFrameProcessor.registerInputStream()
na nieblokujące. Aplikacje muszą obsługiwać obiektVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Zmieniono parametry
frameRate
idurationUs
parametruVideoFrameProcessor.queueInputBitmap
naTimestampIterator
.
- Dodaj
- Rozszerzenie IMA:
- Naprawiono błąd, który powodował, że w przypadku wielookresowej transmisji na żywo DASH, która nie jest pierwszym elementem playlisty, może zostać zgłoszony wyjątek (#571).
- Zanim wywołasz funkcję
AdsLoader.destroy()
, zwolnij StreamManagera - Zmień wersję pakietu IMA SDK na 3.31.0.
- Sesja:
- Ustaw zachowanie usługi na pierwszym planie na
FOREGROUND_SERVICE_IMMEDIATE
wDefaultMediaNotificationProvider
(#167). - Aby uniknąć problemów z wycofanym interfejsem API na urządzeniach Samsung, używaj tylko
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
interfejsu API 31 powyżej (#167). - Używaj kontrolera powiadomień o multimediach jako serwera proxy do ustawiania dostępnych poleceń i niestandardowego układu do wypełniania powiadomienia i sesji platformy.
- Konwertuj zdarzenia przycisku multimediów odebrane przez usługę
MediaSessionService.onStartCommand()
w Media3 zamiast kierować je do sesji platformy i z powrotem do Media3. Dzięki temu kontroler wywołujący jest zawsze kontrolerem powiadomień o multimediach, a aplikacje mogą w taki sam sposób rozpoznawać wywołania pochodzące z powiadomień w taki sam sposób na wszystkich obsługiwanych poziomach interfejsu API. - Naprawiono błąd, przez który
MediaController.getCurrentPosition()
nie rozwija się po połączeniu ze starszą wersjąMediaSessionCompat
. - Dla wygody dodaj
MediaLibrarySession.getSubscribedControllers(mediaId)
. - Zastąp
MediaLibrarySession.Callback.onSubscribe()
, aby potwierdzić dostępność identyfikatora nadrzędnego, który subskrybuje kontroler. Jeśli operacja się uda, subskrypcja zostanie zaakceptowana, a funkcjanotifyChildrenChanged()
zostanie natychmiast wywołana z informacją o przeglądarce (#561). - Dodaj moduł demonstracyjny sesji dla systemu operacyjnego Automotive i włącz demonstrację dla Androida Auto.
- Nie ustawiaj kolejki sesji platformy, gdy interfejs
COMMAND_GET_TIMELINE
jest niedostępny dla kontrolera powiadomień o multimediach. Gdy Android Auto jest kontrolerem klienta odczytującym dane z sesji platformy, przyciskqueue
w interfejsie Androida Auto nie jest wyświetlany (#339). - Domyślnie używaj parametru
DataSourceBitmapLoader
zamiastSimpleBitmapLoader
(#271, #327). - Dodaj obiekt
MediaSession.Callback.onMediaButtonEvent(Intent)
, który umożliwia aplikacjom zastępowanie domyślnej obsługi zdarzeń przycisku multimediów.
- Ustaw zachowanie usługi na pierwszym planie na
- Interfejs:
- Dodaj na urządzeniach z Wear OS implementację
Player.Listener
, która obsługuje blokowanie odtwarzania z powoduPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
.Otwórz okno systemowe, aby umożliwić użytkownikowi podłączenie odpowiedniego wyjścia audio (np. słuchawek Bluetooth). Detektor automatycznie wznowi odtwarzanie, jeśli odpowiednie urządzenie zostanie podłączone w określonym czasie oczekiwania (domyślnie jest to 5 minut).
- Dodaj na urządzeniach z Wear OS implementację
- Pobrane pliki:
- Zadeklaruj typ usługi na pierwszym planie typu „synchronizacja danych” na potrzeby
DownloadService
w związku ze zgodnością z Androidem 14. Gdy używasz tej usługi, aplikacja musi też dodać w pliku manifestu uprawnieniadataSync
jakoforegroundServiceType
i dodać uprawnienieFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Zadeklaruj typ usługi na pierwszym planie typu „synchronizacja danych” na potrzeby
- Rozszerzenie HLS:
- Odśwież playlistę na żywo HLS, stosując odstęp obliczony na podstawie czasu rozpoczęcia ostatniego wczytywania, a nie od momentu zakończenia ostatniego wczytywania (#663).
- Rozszerzenie DASH:
- Zezwalaj na wiele tego samego identyfikatora DASH w adresie URL szablonu segmentu.
- Dodano eksperymentalną obsługę analizy napisów podczas wyodrębniania. Ta funkcja zapewnia lepszą obsługę łączenia nakładających się napisów, w tym migotania przy przechodzeniu między segmentami napisów. Możesz to włączyć za pomocą metody
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Rozszerzenie RTSP:
- Napraw warunek wyścigu, który może powodować występowanie
IndexOutOfBoundsException
przy ponownym połączeniu z TCP lub zawieszanie się odtwarzania w niektórych sytuacjach. - Sprawdź stan w konfiguracji RTSP podczas zwracania stanu wczytywania
RtspMediaPeriod
(#577). - Ignoruj niestandardowe metody żądań Rtsp w nagłówku publicznym odpowiedzi Opcje (#613).
- Użyj wartości limitu czasu oczekiwania odpowiedzi na konfigurację RTSP w przedziale czasu podczas wysyłania żądań utrzymywania aktywności opcji RTSP (#662).
- Napraw warunek wyścigu, który może powodować występowanie
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Zwolnij moduł dekodera MIDI, który zapewnia obsługę odtwarzania standardowych plików MIDI za pomocą biblioteki Jsyn do syntezy dźwięku.
- Dodaj atrybut
DecoderOutputBuffer.shouldBeSkipped
, aby bezpośrednio oznaczać bufory wyjściowe, których nie trzeba udostępniać. Ta opcja jest preferowana zamiast wersjiC.BUFFER_FLAG_DECODE_ONLY
, która zostanie wycofana. - Dodaj
Decoder.setOutputStartTimeUs
iSimpleDecoder.isAtLeastOutputStartTimeUs
, aby umożliwić dekoderom usuwanie próbek tylko z dekodowania przed godziną rozpoczęcia. Zalecamy tę opcję w przypadku funkcjiBuffer.isDecodeOnly
, która zostanie wycofana. - Poprawiono błąd podczas publikowania artefaktu dekodera MIDI w repozytorium Maven. Nazwa artefaktu została zmieniona na
media3-exoplayer-midi
(#734).
- Rozszerzenie Leanback:
- Naprawiono błąd, przez który wyłączenie powierzchni może powodować pojawienie się kodu
ArithmeticException
w kodzie Leanback (#617).
- Naprawiono błąd, przez który wyłączenie powierzchni może powodować pojawienie się kodu
- Narzędzia testowe:
- Zadbaj o to, aby
TestExoPlayerBuilder
iFakeClock
były zgodne z testami interfejsu Espresso i testami interfejsu Compose. Usunęliśmy błąd polegający na tym, że podczas interakcji w widoku Espresso lub Composer odtwarzanie przesuwało się w sposób niedeterministyczny.
- Zadbaj o to, aby
- Usuń wycofane symbole:
- Usuń
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
iTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Użyj funkcjiComposition.Builder.setHdrMode(int)
i przekażComposition
użytkownikowiTransformer.start(Composition, String)
. - Usuń wycofaną metodę
DownloadNotificationHelper.buildProgressNotification
. Użyj niewycofanej metody, która przyjmuje parametrnotMetRequirements
.
- Usuń
Wersja 1.2.0-rc01
1 listopada 2023 roku
Użyj wersji stabilnej 1.2.0.
Wersja 1.2.0-beta01
19 października 2023 r.
Użyj wersji stabilnej 1.2.0.
Wersja 1.2.0-alfa02
29 września 2023 r.
Użyj wersji stabilnej 1.2.0.
Wersja 1.2.0-alpha01
17 sierpnia 2023 r.
Użyj wersji stabilnej 1.2.0.
Wersja 1.1.0
Wersja 1.1.1
16 sierpnia 2023 r.
- Wspólna biblioteka:
- Usuń przypadkowo dodaną zależność
multidex
ze wszystkich modułów (#499).
- Usuń przypadkowo dodaną zależność
- ExoPlayer:
- Naprawiono błąd w
PlaybackStatsListener
, który polegał na tym, że po wyczyszczeniu playlisty były tworzone fałszywePlaybackStats
. - Dodaj do logowania danych Common Media Client Data (CMCD) dodatkowe pola: format strumieniowania (sf), typ strumienia (st), wersja (v), górna szybkość transmisji bitów (tb), czas trwania obiektu (d), zmierzona przepustowość (mtp) i typ obiektu (ot) (#8699).
- Naprawiono błąd w
- Dźwięk:
- Naprawiono błąd, który powodował, że podczas odtwarzania bardzo krótkich plików
Player.getState()
nigdy nie przełączał się naSTATE_ENDED
(#538).
- Naprawiono błąd, który powodował, że podczas odtwarzania bardzo krótkich plików
- Odciążanie dźwięku:
- Dołącz nagłówek identyfikatora Ogg i strony nagłówków komentarzy na początku strumienia bitowego na potrzeby wyłączonego odtwarzania Opus, zgodnie ze standardem RFC 7845.
- Film:
- H.265/HEVC: naprawianie analizy informacji o obrazie referencyjnym SPS krótko- i długoterminowych.
- Tekst:
- CEA-608: zmień logikę obcinania wskazówek tak, aby uwzględniała tylko widoczny tekst. Wcześniej przy ograniczeniu długości sygnału do 32 znaków (#11019) uwzględniono wcześniej wcięcie i odsunięcie tabulatora.
- Rozszerzenie IMA:
- Zaktualizuj pakiet IMA SDK do wersji 3.30.3.
- Sesja:
- Dodaj układ niestandardowy do stanu kontrolera i udostępnij metodę pobierania dostępu do niego. Gdy zmienia się układ niestandardowy, wywoływana jest funkcja
MediaController.Listener.onCustomLayoutChanged
. Aplikacje, które chcą wysyłać różne układy niestandardowe do różnych kontrolerów Media3, mogą to zrobić wMediaSession.Callback.onConnect
za pomocą elementuAcceptedResultBuilder
, który zagwarantuje, że po zakończeniu połączenia układ niestandardowy będzie dostępny dla kontrolera. - Napraw przypadki, gdy funkcja
MediaLibraryServiceLegacyStub
wysłała błąd do funkcjiResult
, która go nie obsługuje, co spowodowało wyświetlenieUnsupportedOperationException
(#78). - Napraw sposób tworzenia elementu
VolumeProviderCompat
przez funkcjęPlayerWrapper
, wskazującvolumeControlType
za pomocą zarówno starszych poleceń (COMMAND_ADJUST_DEVICE_VOLUME
iCOMMAND_SET_DEVICE_VOLUME
), jak i nowych (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
iCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Dodaj układ niestandardowy do stanu kontrolera i udostępnij metodę pobierania dostępu do niego. Gdy zmienia się układ niestandardowy, wywoływana jest funkcja
Wersja 1.1.0
5 lipca 2023 r.
- Wspólna biblioteka:
- Dodaj przyczynę wstrzymania w przypadku nieodpowiedniej trasy audio i odtwarzaj, gdy gotowy powód zmiany jest zbyt długi. (15).
- Dodaj polecenia do odtwarzacza:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Dodaj do odtwarzacza metody przeciążenia, które pozwalają użytkownikom określać flagi woluminu:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Dodaj element
Builder
dla elementuDeviceInfo
i wycofaj istniejący konstruktor. - Dodaj
DeviceInfo.routingControllerId
, aby określić identyfikator kontrolera routingu na potrzeby odtwarzania zdalnych. - Dodaj
Player.replaceMediaItem(s)
jako skrót do dodawania i usuwania elementów w tym samym miejscu (#8046).
- ExoPlayer:
- Zezwól ExoPlayer na sterowanie opcjami głośności urządzenia tylko wtedy, gdy jest to wyraźnie dozwolone. Użyj konta
ExoPlayer.Builder.setDeviceVolumeControlEnabled
, aby uzyskać dostęp do:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
isetDeviceVolume(int, int)
increaseDeviceVolume(int)
iincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
idecreaseDeviceVolume(int, int)
- Dodaj atrybut
FilteringMediaSource
, który umożliwia filtrowanie dostępnych typów ścieżek zMediaSource
. - Dodano obsługę uwzględniania danych Common Media Client Data (CMCD) w żądaniach wychodzących adaptacyjnych formatów strumieniowania DASH, HLS i SmoothStreaming. Pola
br
,bl
,cid
,rtp
isid
zostały uwzględnione (#8699). Struktura interfejsu API i jego metody:- Logowanie CMCD jest domyślnie wyłączone. Aby je włączyć, użyj
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
. - Wszystkie klucze są domyślnie włączone. Zastąp
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
, aby odfiltrować logowane klucze. - Zastąp
CmcdConfiguration.RequestConfig.getCustomData()
, aby włączyć logowanie kluczy niestandardowych.
- Logowanie CMCD jest domyślnie wyłączone. Aby je włączyć, użyj
- Dodaj dodatkowe działanie do pliku manifestu głównej wersji demonstracyjnej, aby ułatwić uruchamianie aplikacji w wersji demonstracyjnej za pomocą niestandardowego pliku
*.exolist.json
(#439). - Dodaj
ExoPlayer.setVideoEffects()
za używanieEffect
podczas odtwarzania filmu. - Zaktualizuj
SampleQueue
, aby zapisać elementsourceId
jakolong
, a nieint
. Spowoduje to zmianę podpisów metod publicznychSampleQueue.sourceId
iSampleQueue.peekSourceId
. - Dodaj parametry do metod
LoadControl
shouldStartPlayback
ionTracksSelected
, które umożliwiają powiązanie tych metod z odpowiednimi wartościamiMediaPeriod
. - Zmień podpis elementu
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
, dodając parametr osi czasu, który zawiera kropki z identyfikatorami UID używanymi jako klucze na mapie. Jest to wymagane, aby uniknąć problemów z równoczesnością w transmisjach na żywo z wieloma okresami. - Wycofuj
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
iBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. Zamiast tego można wywołać wariant metod bezmediaTimeOffsetUs
. Nawet w przypadku wycofanych wersji nie jest ono już dodawane do elementówstartTimeUs
iendTimeUs
obiektówMediaLoadData
wysyłanych przez dyspozytora. - Zmień nazwę
ExoTrackSelection.blacklist
naexcludeTrack
, aisBlacklisted
naisTrackExcluded
. - Rozwiąż problem z niespójnościami między wywołaniem
ExoPlayer.setMediaItem(s)
iaddMediaItem(s)
w przypadku pustej playlisty.
- Zezwól ExoPlayer na sterowanie opcjami głośności urządzenia tylko wtedy, gdy jest to wyraźnie dozwolone. Użyj konta
- Transformer:
- Usuń
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Zamiast nich używaj właściwościExoPlayerAssetLoader.Factory(MediaSource.Factory)
iTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Usuń
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Naprawiono błąd, który powodował, że przekształcenie mogło się zawiesić (co powodowało przekroczenie limitu czasu działania routera), jeśli koniec strumienia wideo był sygnalizowany w momencie, gdy klatka wejściowa czekała na przetworzenie.
- Aby zwiększyć obsługę, wysyłaj zapytania do kodeków za pomocą
MediaCodecList
zamiast za pomocą narzędzifindDecoder/EncoderForFormat
. - Usuń konfigurację ramek B w
DefaultEncoderFactory
, ponieważ nie działa na niektórych urządzeniach.
- Usuń
- Wybór ścieżki:
- Dodaj pole
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, które jest domyślnie wyłączone. Jeśli ta opcja jest włączona, po zmianie możliwości mechanizmu renderowaniaDefaultTrackSelector
aktywuje nową ścieżkę.
- Dodaj pole
- Moduły wyodrębniania danych:
- Dźwięk:
- Naprawiono błąd polegający na tym, że niektóre odtworzenia kończyły się niepowodzeniem, gdy włączone jest tunelowanie, a pole
AudioProcessors
jest aktywne, np. w przypadku pełnego przycinania (#10847). - Umieszczaj ramki Opus w pakietach Ogg podczas odtwarzania bezpośredniego (odciążania).
- Przeprowadź ekstrapolację bieżącej pozycji podczas snu z planowaniem odciążania.
- Dodaj
Renderer.release()
iAudioSink.release()
, aby zwolnić zasoby pod koniec cyklu życia odtwarzacza. - Posłuchaj zmian funkcji audio w usłudze
DefaultAudioSink
. Dodaj w konstruktorzeDefaultAudioSink
wymagany parametrcontext
, dzięki któremuDefaultAudioSink
będzie rejestrować się jako detektorAudioCapabilitiesReceiver
i aktualizować właściwośćaudioCapabilities
po otrzymaniu informacji o zmianie możliwości. - Propaguj zmiany możliwości dźwiękowych za pomocą nowego zdarzenia
onAudioCapabilitiesChanged
w interfejsieAudioSink.Listener
i nowego interfejsuRendererCapabilities.Listener
, który aktywuje zdarzeniaonRendererCapabilitiesChanged
. - Dodaj
ChannelMixingAudioProcessor
, aby zastosować skalowanie/miksowanie do kanałów audio. - Dodaj nową wartość int (
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
) do elementuDecoderDiscardReasons
, aby odrzucić dekoder dźwięku, gdy tryb ominięcia jest możliwy po zmianie funkcji audio. - Dodanie bezpośredniej obsługi odtwarzania DTS Express i DTS:X(#335).
- Naprawiono błąd polegający na tym, że niektóre odtworzenia kończyły się niepowodzeniem, gdy włączone jest tunelowanie, a pole
- Film:
- Gdy mechanizm renderowania jest wyłączony,
MediaCodecVideoRenderer
zgłaszaVideoSize
z szerokością i wysokością równą 0. Po zmianie parametruPlayer.getVideoSize()
funkcjaPlayer.Listener.onVideoSizeChanged
jest wywoływana odpowiednio. Po tej zmianie rozmiar wideo ExoPlayera zMediaCodecVideoRenderer
ma szerokość i wysokość 0, jeśli elementPlayer.getCurrentTracks
nie obsługuje wideo lub rozmiar obsługiwanej ścieżki wideo nie jest jeszcze określony.
- Gdy mechanizm renderowania jest wyłączony,
- DRM:
- Ogranicz widoczność kilku metod przeznaczonych tylko do użytku wewnętrznego w
DefaultDrmSession
, których nie należy wywoływać spoza pakietu DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Ogranicz widoczność kilku metod przeznaczonych tylko do użytku wewnętrznego w
- Muxer:
- Dodaj nową bibliotekę Muxera, której można użyć do utworzenia pliku kontenera MP4.
- Rozszerzenie IMA:
- Włącz transmisje DASH z wieloma przedziałami czasu na potrzeby DAI. Pamiętaj, że obecna implementacja nie obsługuje jeszcze przewijania w transmisjach na żywo (#10912).
- Napraw błąd polegający na wstawieniu nowej grupy reklam w transmisjach na żywo, ponieważ obliczona pozycja treści na kolejnych osiach czasu nieznacznie się zmienia.
- Sesja:
- Dodaj metodę pomocniczą
MediaSession.getControllerForCurrentRequest
, aby uzyskać informacje o kontrolerze, który obecnie wywołuje metodęPlayer
. - Dodaj
androidx.media3.session.MediaButtonReceiver
, aby umożliwić aplikacjom wdrażanie wznawiania odtwarzania ze zdarzeniami dotyczącymi przycisku multimediów wysyłanymi na przykład przez zestaw słuchawkowy Bluetooth (#167). - Dodaj domyślną implementację do
MediaSession.Callback.onAddMediaItems
, aby umożliwić przekazywanie żądańMediaItems
doPlayer
, jeśli mają oneLocalConfiguration
(np. identyfikator URI) (#282). - Domyślnie dodaj przyciski poleceń „przewiń do poprzedniego” i „przewiń do następnego” w widoku powiadomień o multimediach kompaktowych na Androidzie 12 i starszych (#410).
- Dodaj domyślną implementację do
MediaSession.Callback.onAddMediaItems
, aby umożliwić przekazywanie żądańMediaItems
doPlayer
, jeśli mają oneLocalConfiguration
(np. identyfikator URI) (#282). - Domyślnie dodaj przyciski poleceń „przewiń do poprzedniego” i „przewiń do następnego” w widoku powiadomień o multimediach kompaktowych na Androidzie 12 i starszych (#410).
- Dodaj metodę pomocniczą
- Interfejs:
- Dodaj metody narzędzi
shouldShowPlayButton
ihandlePlayPauseButtonAction
, aby zapisać niestandardowe elementy interfejsu za pomocą przycisku odtwarzania/wstrzymania.
- Dodaj metody narzędzi
- Rozszerzenie RTSP:
- Rozszerzenie DASH:
- Usuń przesunięcie czasu multimediów z
MediaLoadData.startTimeMs
iMediaLoadData.endTimeMs
w przypadku strumieni DASH z wieloma okresami. - Poprawiono błąd polegający na tym, że ponowne przygotowanie wielookresowego źródła multimediów na żywo w Dash dawało kod
IndexOutOfBoundsException
(#10838).
- Usuń przesunięcie czasu multimediów z
- Rozszerzenie HLS:
- Dodaj
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
, aby ustawić czas oczekiwania, po którym wczytywany wątek będzie czekać na zainicjowanieTimestampAdjuster
. Jeśli inicjowanie nie zakończy się przed upływem czasu oczekiwania, generowany jest żądaniePlaybackException
, aby uniknąć niekończącego się procesu odtwarzania. Domyślnie limit czasu jest ustawiony na zero (#323).
- Dodaj
- Narzędzia testowe:
- Sprawdź w
DataSourceContractTest
, czy w schemacie URI nie jest rozróżniana wielkość liter.
- Sprawdź w
- Usuń wycofane symbole:
- Usuń konstruktory
DefaultAudioSink
, zamiast nich użyjDefaultAudioSink.Builder
. - Usuń kolumnę
HlsMasterPlaylist
. Zamiast niej użyj zasadyHlsMultivariantPlaylist
. - Usuń
Player.stop(boolean)
. Zamiast nich użyj właściwościPlayer.stop()
iPlayer.clearMediaItems()
(jeślireset
totrue
). - Usuń 2 wycofane konstrukcje
SimpleCache
. Aby uzyskać lepszą wydajność, użyj wycofanego konstruktora, który zamiast tego używaDatabaseProvider
. - Usuń konstruktor
DefaultBandwidthMeter
, zamiast niego użyjDefaultBandwidthMeter.Builder
. - Usuń konstruktory
DefaultDrmSessionManager
, zamiast tego użyjDefaultDrmSessionManager.Builder
. - Usuń 2 wycofane konstrukcje
HttpDataSource.InvalidResponseCodeException
i użyj wycofanego konstruktora, który akceptuje dodatkowe pola(cause
,responseBody
), aby usprawnić logowanie błędów. - Usuń
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
iDownloadHelper.forSmoothStreaming
. Zamiast nich użyjDownloadHelper.forMediaItem
. - Usuń wycofany konstruktor
DownloadService
. Użyj niewycofanego konstruktora zawierającego opcję podawania parametruchannelDescriptionResourceId
. - Usuń wycofane stałe ciągi znaków dla znaków (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
iUTF16LE_NAME
). Użyj zamiast tego Kotlin Charsets z pakietukotlin.text
albojava.nio.charset.StandardCharsets
lubcom.google.common.base.Charsets
. - Usuń wycofany konstruktor
WorkManagerScheduler
. Użyj wycofanego konstruktora, który zawiera opcję podania parametruContext
. - Usuń wycofane metody
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
icreateSampleFormat
, które zostały użyte do utworzenia instancji klasyFormat
. Zamiast tego do tworzenia instancjiFormat
użyjFormat.Builder
. - Usuń wycofane metody
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
icopyWithVideoSize
, użyj zamiast nich metodFormat.buildUpon()
i metod ustawiania. - Usuń wycofaną zasadę
ExoPlayer.retry()
. Zamiast niej użyj zasadyprepare()
. - Usuń wycofany konstruktor
DefaultTrackSelector
bez argumentu. Zamiast niego użyjDefaultTrackSelector(Context)
. - Usuń wycofany konstruktor
OfflineLicenseHelper
. Zamiast niego użyjOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Usuń wycofany konstruktor
DownloadManager
. Użyj konstruktora, który korzysta z obiektuExecutor
. - Usuń wycofane konstrukcje
Cue
. Zamiast nich użyjCue.Builder
. - Usuń wycofany konstruktor
OfflineLicenseHelper
. Zamiast niego użyjOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Usuń 4 wycofane metody
AnalyticsListener
:onDecoderEnabled
, użyj właściwościonAudioEnabled
lubonVideoEnabled
.onDecoderInitialized
, zamiast tego użyjonAudioDecoderInitialized
lubonVideoDecoderInitialized
.onDecoderInputFormatChanged
, użyj właściwościonAudioInputFormatChanged
lubonVideoInputFormatChanged
.onDecoderDisabled
, użyj właściwościonAudioDisabled
lubonVideoDisabled
.
- Usuń wycofane
Player.Listener.onSeekProcessed
iAnalyticsListener.onSeekProcessed
. Zamiast nich używajonPositionDiscontinuity
zDISCONTINUITY_REASON_SEEK
. - Usuń
ExoPlayer.setHandleWakeLock(boolean)
, zamiast tego użyjsetWakeMode(int)
. - Usuń wycofany atrybut
DefaultLoadControl.Builder.createDefaultLoadControl()
, zamiast niego użyj zasadybuild()
. - Usuń wycofaną zasadę
MediaItem.PlaybackProperties
. Zamiast niej użyjMediaItem.LocalConfiguration
. Wycofane poleMediaItem.playbackProperties
jest teraz typuMediaItem.LocalConfiguration
.
- Usuń konstruktory
Wersja 1.1.0-rc01
21 czerwca 2023 r.
Użyj wersji stabilnej 1.1.0.
Wersja 1.1.0-beta01
7 czerwca 2023 r.
Użyj wersji stabilnej 1.1.0.
Wersja 1.1.0-alpha01
10 maja 2023 r.
Użyj wersji stabilnej 1.1.0.
Wersja 1.0.0
Wersja 1.0.2
18 maja 2023 r.
Usługa androidx.media3:media3-*:1.0.2
została zwolniona.
Wersja 1.0.2 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.7.
Od wersji 1.0.1 w tej wersji wprowadzono te zmiany:
- Biblioteka podstawowa:
- Dodaj
Buffer.isLastSample()
, który wskazuje, czyBuffer
zawiera flagęC.BUFFER_FLAG_LAST_SAMPLE
. - Rozwiązanie problemu polegającego na tym, że ostatnia klatka może nie zostać wyrenderowana, jeśli ostatnia klatka z klatek została usunięta z kolejki bez odczytania próbki „koniec strumienia”. (#11079).
- Dodaj
- Moduły wyodrębniania danych:
- Napraw analizę składni H.265 SPS w plikach MPEG-TS, ponownie korzystając z logiki analizy używanej już przez moduły wyodrębniania RTSP i MP4 (#303).
- Tekst:
- SSA: dodaj obsługę plików UTF-16, jeśli zaczynają się od znaku kolejności bajtów (#319).
- Sesja:
- Rozwiązanie problemu polegającego na tym, że
MediaController
nie aktualizuje dostępnych poleceń po połączeniu ze starszą wersjąMediaSessionCompat
, która aktualizuje działania. - Naprawiono błąd, który uniemożliwiał
MediaLibraryService
zwracanie wartości null w przypadku wywołania z interfejsu systemu doCallback.onGetLibraryRoot
za pomocą parametruparams.isRecent == true
w interfejsie API 30 (#355). - Napraw wyciek pamięci w:
MediaSessionService
lubMediaLibraryService
(#346). - Naprawiono błąd, w wyniku którego połączone atrybuty
Timeline
i aktualizacja pozycji wMediaSession
mogą powodować, żeMediaController
przesyłaIllegalStateException
.
- Rozwiązanie problemu polegającego na tym, że
Wersja 1.0.1
18 kwietnia 2023 r.
Usługa androidx.media3:media3-*:1.0.1
została zwolniona.
Wersja 1.0.1 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.6.
- Biblioteka podstawowa:
- Zresetuj zastąpienie docelowej transmisji na żywo po przejściu do pozycji domyślnej (#11051).
- Usunęliśmy błąd polegający na tym, że puste przykładowe strumienie multimediów mogły blokować odtwarzanie.
- Sesja:
- Naprawiono błąd, który powodował, że wiele identycznych elementów kolejki opublikowanych przez starszą wersję
MediaSessionCompat
skutkuje wyjątkiem w zasadzieMediaController
(#290). - Dodaj brakujące przekierowanie z adresu
MediaSession.broadcastCustomCommand
do starszej wersjiMediaControllerCompat.Callback.onSessionEvent
(#293). - Naprawiono błąd, który powodował, że wywołanie funkcji
MediaSession.setPlayer
nie aktualizuje dostępnych poleceń. - Rozwiązanie problemu polegającego na tym, że instancje
TrackSelectionOverride
wysłane z interfejsuMediaController
są ignorowane, jeśli odwołują się do grupyFormat.metadata
(#296). - Rozwiąż problem, który polegał na tym, że do metadanych za pomocą starszej wersji
MediaSessionCompat
wymagana jest usługaPlayer.COMMAND_GET_CURRENT_MEDIA_ITEM
. - Rozwiązaliśmy problem polegający na tym, że instancje
MediaSession
w wątku w tle powodują awarię, gdy są używane wMediaSessionService
(#318). - Rozwiązanie problemu polegającego na tym, że odbiornik przycisku multimediów został zadeklarowany przez bibliotekę bez spełnienia tego celu przez aplikację (#314).
- Naprawiono błąd, który powodował, że wiele identycznych elementów kolejki opublikowanych przez starszą wersję
- DASH:
- Poprawiono obsługę pustych osi czasu segmentów (#11014).
- RTSP:
- Spróbuj ponownie, korzystając z TCP, jeśli konfiguracja RTSP z UDP nie powiedzie się i pojawi się błąd RTSP 461 Nieobsługiwany transport (#11069).
Wersja 1.0.0
22 marca 2023 r.
Usługa androidx.media3:media3-*:1.0.0
została zwolniona.
Wersja 1.0.0 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.5.
Od wersji 1.0.0-rc02 nie ma żadnych zmian.
Wersja 1.0.0-rc02
2 marca 2023 r.
Usługa androidx.media3:media3-*:1.0.0-rc02
została zwolniona.
Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.4.
- Biblioteka podstawowa:
- Pobrane pliki:
- Zastosuj maksymalną różnicę w czasie rozpoczęcia w przypadku 2 segmentów, które można scalać w klasach
SegmentDownloader
i podklasach (#248).
- Zastosuj maksymalną różnicę w czasie rozpoczęcia w przypadku 2 segmentów, które można scalać w klasach
- Dźwięk:
- Film:
- Zmapuj format HEVC HDR10 na
HEVCProfileMain10HDR10
zamiast naHEVCProfileMain10
. - Dodaj obejście problemu z urządzeniem Chromecast z Google TV i Lenovo M10 FHD Plus, który powoduje, że strumienie AVC 60 kl./s są oznaczane jako nieobsługiwane (#10898).
- Rozwiąż problemy z wydajnością renderowania klatek podczas odtwarzania multimediów, w których liczba klatek jest znacznie większa niż częstotliwość odświeżania ekranu.
- Zmapuj format HEVC HDR10 na
- Obsada:
- Popraw przejściowe
STATE_IDLE
podczas przechodzenia między elementami multimedialnymi (#245).
- Popraw przejściowe
- RTSP:
- Zidentyfikuj wyjątek IllegalArgumentException podczas analizy nieprawidłowego protokołu RTSP. Opisz odpowiedzi (#10971).
- Sesja:
- Naprawiono błąd, który powodował, że przycisk odtwarzania/wstrzymywania powiadomienia nie aktualizuje się wraz ze stanem odtwarzacza (#192).
- Rozszerzenie IMA:
- Naprawiliśmy błąd, który uniemożliwiał uruchomienie strumieni z dynamicznym wstawianiem reklam bez reklam, ponieważ nie odebrano pierwszego (i w przypadku bez reklam jedynego) zdarzenia
LOADED
.
- Naprawiliśmy błąd, który uniemożliwiał uruchomienie strumieni z dynamicznym wstawianiem reklam bez reklam, ponieważ nie odebrano pierwszego (i w przypadku bez reklam jedynego) zdarzenia
Wersja 1.0.0-rc01
16 lutego 2023 r.
Usługa androidx.media3:media3-*:1.0.0-rc01
została zwolniona.
Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.3.
- Biblioteka podstawowa:
- Dostosuj logikę porządkowania dekodera mechanizmu renderowania, by zachować preferencje
MediaCodecSelector
, nawet jeśli według dekodera nie jest w stanie odtworzyć multimediów wydajnie. Na przykład z selektorem domyślnym dekoder sprzętowy z obsługą wyłącznie funkcjonalnych będzie miał wyższy priorytet niż dekoder programowy, który w pełni obsługuje ten format (#10604). - Dodaj
ExoPlayer.Builder.setPlaybackLooper
, który ustawia istniejący wątek odtwarzania nowej instancji ExoPlayer. - Zezwalaj na czyszczenie pomocniczych menedżera pobierania (#10776).
- Dodaj parametr do elementu
BasePlayer.seekTo
, aby wskazać też polecenie używane do przewijania. - Użyj motywu podczas wczytywania elementów możliwych do rysowania w interfejsie API 21 lub nowszym (#220).
- Dodaj obiekt
ConcatenatingMediaSource2
, który umożliwia połączenie wielu elementów multimedialnych w jednym oknie (#247).
- Dostosuj logikę porządkowania dekodera mechanizmu renderowania, by zachować preferencje
- Moduły wyodrębniania danych:
- Zgłoś
ParserException
zamiastNullPointerException
, jeśli w tabeli przykładowej (STB) brakuje wymaganego opisu próbki (stsd) podczas analizowania atomów trak. - Prawidłowo pomijaj próbki podczas przechodzenia bezpośrednio do klatki synchronizacji w fMP4 (#10941).
- Zgłoś
- Dźwięk:
- Użyj szybkości transmisji skompresowanego formatu audio, aby obliczyć minimalny rozmiar bufora w przypadku elementu
AudioTrack
w przypadku odtwarzania bezpośrednich (przekazywanych).
- Użyj szybkości transmisji skompresowanego formatu audio, aby obliczyć minimalny rozmiar bufora w przypadku elementu
- Tekst:
- Popraw
TextRenderer
, który przekazuje nieprawidłowy (ujemny) indeks doSubtitle.getEventTime
, jeśli plik napisów nie zawiera żadnych znaków. - SubRip: dodaj obsługę plików UTF-16, jeśli zaczynają się od znaku kolejności bajtów.
- Popraw
- Metadane:
- Przeanalizuj wiele wartości rozdzielonych null z ramek ID3, zgodnie z zasadami ID3 w wersji 2.4.
- Dodaj
MediaMetadata.mediaType
, aby wskazać typ treści lub typ folderu opisany przez metadane. - Dodaj
MediaMetadata.isBrowsable
jako zamiennikMediaMetadata.folderType
. Ten typ folderu zostanie wycofany w następnej wersji.
- DASH:
- Dodaj pełną analizę na potrzeby zestawów do adaptacji obrazów, w tym liczbę kafelków (#3752).
- Interfejs:
- Napraw wycofany tag
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
, aby mieć pewność, że zmiany dotyczące widoczności będą przekazywane do zarejestrowanego detektora (#229). - Popraw kolejność elementów sterujących środkowego odtwarzacza w
PlayerView
, jeśli używasz układu od prawej do lewej (od prawej do lewej) (#227).
- Napraw wycofany tag
- Sesja:
- Dodaj abstrakcyjny
SimpleBasePlayer
, aby ułatwić implementację interfejsuPlayer
w odtwarzaczach niestandardowych. - Dodaj metodę pomocniczą, aby przekonwertować token sesji platformy na Media3
SessionToken
(#171). - Użyj polecenia
onMediaMetadataChanged
, aby aktywować aktualizacje sesji multimediów na platformie (#219). - Dodaj sesję multimediów jako argument funkcji
getMediaButtons()
wDefaultMediaNotificationProvider
i użyj list stałych, aby zwiększyć przejrzystość (#216). - Dodaj detektor wywołania zwrotnego
onSetMediaItems
, aby określić sposoby modyfikowania/ustawiania listyMediaItem
, początkowy indeks i pozycja według sesji przed ustawieniem dla odtwarzacza (#156). - Unikaj wykrywania dwukrotnego dotknięcia w przypadku zdarzeń przycisków multimediów niezwiązanych z Bluetoothem (#233).
- Zwiększ wydajność funkcji
QueueTimeline
w przypadku podejrzanego stanu sesji starszego typu (#241).
- Dodaj abstrakcyjny
- Metadane:
- Przeanalizuj wiele wartości rozdzielonych null z ramek ID3, zgodnie z zasadami ID3 w wersji 2.4.
- Dodaj
MediaMetadata.mediaType
, aby wskazać typ treści lub typ folderu opisany przez metadane. - Dodaj
MediaMetadata.isBrowsable
jako zamiennikMediaMetadata.folderType
. Ten typ folderu zostanie wycofany w następnej wersji.
- Rozszerzenie Cast:
- Zmień wersję pakietu SDK Cast na 21.2.0.
- Rozszerzenie IMA:
- Usuń detektor odtwarzacza
ImaServerSideAdInsertionMediaSource
z wątku aplikacji, aby uniknąć problemów z wątkami. - Dodaj do obiektu
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
właściwośćfocusSkipButtonWhenAvailable
, aby zażądać skoncentrowania przycisku pomijania na telewizorach i domyślnie ustawić ją na wartość Prawda. - Dodaj metodę
focusSkipButton()
do obiektuImaServerSideAdInsertionMediaSource.AdsLoader
, aby automatycznie zażądać zaznaczenia przycisku pominięcia. - Zmień wersję pakietu IMA SDK na 3.29.0.
- Usuń detektor odtwarzacza
- Aplikacja w wersji demonstracyjnej
- Poproś o zgodę na wyświetlanie powiadomień o pobieraniu (#10884).
Wersja 1.0.0-beta03
22 listopada 2022 r.
Usługa androidx.media3:media3-*:1.0.0-beta03
została zwolniona.
Wersja 1.0.0-beta03 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.2.
- Biblioteka podstawowa:
- Dodaj
ExoPlayer.isTunnelingEnabled
, aby sprawdzić, czy dla obecnie wybranych ścieżek włączone jest tunelowanie (#2518). - Dodaj
WrappingMediaSource
, aby uprościć pakowanie pojedynczegoMediaSource
(#7279). - Wyczyść bufor wsteczny, zanim odtwarzanie się zatrzyma z powodu niewystarczającej ilości dostępnej pamięci.
- Gdy włączone jest odciążanie, zamknij blok śledzenia „doSomeWork”.
- Rozwiąż problem ze śledzeniem sesji z szybkimi przewijaniem w trybie
PlaybackStatsListener
(#180). - Wyślij brakujące wywołanie zwrotne
onMediaItemTransition
podczas wywoływania funkcjiseekToNext
lubseekToPrevious
w playliście z jednym elementem (#10667). - Dodaj pole
Player.getSurfaceSize
, które zwraca rozmiar powierzchni, na której jest renderowany film. - Naprawiono błąd, który powodował, że usunięcie detektorów w trakcie publikowania odtwarzacza mogło powodować błąd
IllegalStateException
(#10758).
- Dodaj
- Kompilacja:
- Wymuszaj minimalną wartość
compileSdkVersion
, aby uniknąć błędów kompilacji (#10684). - Unikaj publikowania bloku, który jest częścią innej kompilacji Gradle.
- Wymuszaj minimalną wartość
- Wybór ścieżki:
- Preferuj inne ścieżki do Dolby Vision, jeśli wyświetlacz go nie obsługuje. (#8944).
- Pobrane pliki:
- Napraw potencjalną pętlę nieskończoną w polu
ProgressiveDownloader
spowodowana równoczesnym pobieraniem i odtwarzaniem przy użyciu tego samego parametruPriorityTaskManager
(#10570). - Powiadomienie o pobraniu pojawia się natychmiast (#183).
- Ogranicz liczbę równoległych operacji pobierania do 1, aby uniknąć tworzenia wątków (#10458).
- Napraw potencjalną pętlę nieskończoną w polu
- Film:
- Jeśli wyświetlacz nie obsługuje Dekodera Dolby Vision, wypróbuj inny dekoder. (#9794).
- Dźwięk:
- Użyj
SingleThreadExecutor
do publikowania instancjiAudioTrack
, aby uniknąć błędów OutOfMemory w przypadku publikowania wielu odtwarzaczy jednocześnie (#10057). - Dodaje wartość
AudioOffloadListener.onExperimentalOffloadedPlayback
dla stanu odciążania AudioTrack. (nr 134). - Ustaw
AudioTrackBufferSizeProvider
jako interfejs publiczny. - Dodaj
ExoPlayer.setPreferredAudioDevice
, aby ustawić preferowane urządzenie wyjściowe audio (#135). - Zmień nazwę
androidx.media3.exoplayer.audio.AudioProcessor
naandroidx.media3.common.audio.AudioProcessor
. - Zmapuj odpowiednio 8- i 12-kanałowy dźwięk na maski kanałów 7.1 i 7.1.4 na wszystkich wersjach Androida (#10701).
- Użyj
- Metadane:
MetadataRenderer
można teraz skonfigurować tak, aby renderowało metadane, gdy tylko będą dostępne. Utwórz instancję za pomocą atrybutuMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
, aby określić, czy mechanizm renderowania zwróci metadane wcześnie, czy zsynchronizowane z pozycją odtwarzacza.
- DRM:
- Obejście błędu w implementacji ClearKey na Androidzie 13, który zwraca niepusty, ale nieprawidłowy adres URL licencji.
- Naprawa błędu
setMediaDrmSession failed: session not opened
występującego podczas przełączania między schematami DRM na playliście (np. z Widevine na ClearKey).
- Tekst:
- CEA-608: upewnij się, że polecenia przełącznika usługi w polu 2 są prawidłowo obsługiwane (#10666).
- DASH:
- Przeanalizuj
EventStream.presentationTimeOffset
z plików manifestu (#10460).
- Przeanalizuj
- Interfejs:
- Użyj bieżących zastąpień odtwarzacza jako gotowych ustawień w
TrackSelectionDialogBuilder
(#10429).
- Użyj bieżących zastąpień odtwarzacza jako gotowych ustawień w
- Sesja:
- Sprawdź, czy polecenia są zawsze wykonywane w odpowiedniej kolejności, nawet jeśli niektóre wymagają rozdzielczości asynchronicznej (#85).
- Dodaj
DefaultMediaNotificationProvider.Builder
, aby utworzyć instancje (DefaultMediaNotificationProvider
). Kreator może skonfigurować identyfikator powiadomień, identyfikator kanału powiadomień i nazwę kanału powiadomień używaną przez dostawcę. Dodaj też metodęDefaultMediaNotificationProvider.setSmallIcon(int)
, aby ustawić małą ikonę powiadomień. (nr 104). - Sprawdź, czy polecenia wysłane przed
MediaController.release()
nie są pomijane (#99). SimpleBitmapLoader
może wczytać bitmapę z identyfikatorów URI typufile://
(#108).- Napraw problem, który uniemożliwia usłudze
MediaController
przewinięcie reklamy w danym okresie (#122). - Po zakończeniu odtwarzania element
MediaSessionService
jest zatrzymywany na pierwszym planie i pojawia się powiadomienie z prośbą o ponowne uruchomienie odtwarzania ostatnio odtwarzanego elementu multimedialnego (#112). - Nie uruchamiaj usługi na pierwszym planie z oczekującą intencją wstrzymania (#167).
- Ręcznie ukryj „plakietkę” powiązaną z powiadomieniem utworzonym przez użytkownika
DefaultNotificationProvider
w interfejsach API 26 i API 27 (w interfejsach API w wersji 28 i nowszych plakietka jest automatycznie ukrywana) (#131). - Usunęliśmy błąd, który powodował, że drugie połączenie powiązania ze starszą sesją MediaSession z Media3 MediaController powoduje wystąpienie wyjątku IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Dodaj czas oczekiwania na wczytanie informacji o reklamie, aby obsługiwać przypadki, gdy pakiet IMA SDK utknie na etapie wczytywania reklamy (#10510).
- Zapobiegaj pomijaniu reklam w trakcie filmu po przejściu do końca treści (#10685).
- Prawidłowo obliczaj czas trwania transmisji na żywo z reklamami wstawionymi po stronie serwera, np. IMA DAI (#10764).
- Rozszerzenie FFmpeg:
- Dodaj nowo wymagane flagi, aby połączyć biblioteki FFmpeg z biblioteką NDK w wersji 23.1.7779620 lub nowszej (#9933).
- Rozszerzenie AV1:
- Zaktualizuj wersję CMake, aby uniknąć niezgodności z najnowszymi wersjami Androida Studio (#9933).
- Rozszerzenie Cast:
- Zaimplementuj
getDeviceInfo()
, aby umożliwić rozpoznawanieCastPlayer
podczas sterowania odtwarzaniem za pomocąMediaController
(nr 142).
- Zaimplementuj
- Transformer:
- Dodaj licznik watchdoga Spannera, aby wykryć, że generowanie próbki wyjściowego jest za wolne.
- Usuń wycofane symbole:
- Usuń
Transformer.Builder.setOutputMimeType(String)
. Ta funkcja została usunięta. Gdy jest używany domyślny multiplekser, typem MIME jest zawsze MP4.
- Usuń
Wersja 1.0.0-beta02
21 lipca 2022 r.
Usługa androidx.media3:media3-*:1.0.0-beta02
została zwolniona.
Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Ta wersja odpowiada wersji ExoPlayer 2.18.1.
- Biblioteka podstawowa:
- Upewnij się, że zmiana
ShuffleOrder
za pomocąExoPlayer.setShuffleOrder
skutkuje wywołaniemPlayer.Listener#onTimelineChanged
zreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - W przypadku multimediów progresywnych umieszczaj tylko wybrane ścieżki w buforze (#10361).
- Zezwalaj na korzystanie z niestandardowego rejestratora dla wszystkich danych wyjściowych dziennika ExoPlayer (#9752).
- Napraw implementację
setDataSourceFactory
wDefaultMediaSourceFactory
, która w niektórych przypadkach nie działała (#116).
- Upewnij się, że zmiana
- Moduły wyodrębniania danych:
- DASH:
- Analizuj URL licencji ClearKey z plików manifestu (#10246).
- Interfejs:
- Sprawdź, czy TalkBack informuje na głos o obecnie aktywnej opcji szybkości w menu elementów sterujących odtwarzaniem (#10298).
- RTSP:
- Dodaj pofragmentowaną obsługę pakietów VP8 (#110).
- Rozszerzenie Leanback:
- Posłuchaj zmian funkcji
playWhenReady
w dokumencieLeanbackAdapter
(10420).
- Posłuchaj zmian funkcji
- Obsada:
Wersja 1.0.0-beta01
16 czerwca 2022 r.
Usługa androidx.media3:media3-*:1.0.0-beta01
została zwolniona.
Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Odpowiada to wersji ExoPlayer 2.18.0.
- Biblioteka podstawowa:
- Włącz obsługę diagnostyki platformy Androida za pomocą
MediaMetricsManager
. ExoPlayer przekaże do platformy zdarzenia odtwarzania i dane o wydajności, co pomaga dostarczyć informacje dotyczące wydajności systemu i debugowania na urządzeniu. Te dane mogą być też gromadzone przez Google, jeśli użytkownik urządzenia włączy udostępnianie danych o użytkowaniu i diagnostyce. Aplikacje mogą zrezygnować z udziału w diagnostyce platformy ExoPlayer za pomocąExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Poprawiliśmy błąd polegający na tym, że ścieżki są zbyt często resetowane podczas korzystania z elementu
MergingMediaSource
, np. gdy ładujesz napisy z innego urządzenia lub zmieniasz wybrane napisy w trakcie ich odtwarzania (#10248). - Przestań wykrywać typ sieci 5G-NSA w interfejsach API 29 i 30. W przypadku odtwarzania tych treści zakładamy, że korzystasz z sieci 4G.
- Nie zezwalaj na przekazywanie komunikatów
null
doMediaSource.Factory.setDrmSessionManagerProvider
iMediaSource.Factory.setLoadErrorHandlingPolicy
. InstancjeDefaultDrmSessionManagerProvider
iDefaultLoadErrorHandlingPolicy
można w razie potrzeby przekazywać wprost. - Dodaj atrybut
MediaItem.RequestMetadata
reprezentujący metadane potrzebne do odtwarzania multimediów, gdy dokładna wartośćLocalConfiguration
nie jest znana. Usuń teżMediaMetadata.mediaUrl
, ponieważ jest on teraz uwzględniony w usłudzeRequestMetadata
. - Dodaj
Player.Command.COMMAND_SET_MEDIA_ITEM
, aby umożliwić graczom ustawienie jednego elementu.
- Włącz obsługę diagnostyki platformy Androida za pomocą
- Wybór ścieżki:
- Rozdziel klasę
TrackSelectionOverrides
naTrackSelectionParameters
i zmień klasęTrackSelectionOverride
na klasę najwyższego poziomu. - Zmień nazwę
TracksInfo
naTracks
, aTracksInfo.TrackGroupInfo
naTracks.Group
. NazwyPlayer.getCurrentTracksInfo
iPlayer.Listener.onTracksInfoChanged
również zostały zmienione naPlayer.getCurrentTracks
iPlayer.Listener.onTracksChanged
. Obejmuje to wycofanie nazwy metodyPlayer.Listener.onTracksChanged
, ale z użyciem innych typów parametrów. - Zmień
DefaultTrackSelector.buildUponParameters
iDefaultTrackSelector.Parameters.buildUpon
, aby zwracałyDefaultTrackSelector.Parameters.Builder
zamiast wycofanej funkcjiDefaultTrackSelector.ParametersBuilder
. - Dodaj pole
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
, które jest domyślnie włączone. Gdy ta opcja jest włączona,DefaultTrackSelector
preferuje ścieżki audio, których liczba kanałów nie przekracza możliwości wyjścia urządzenia. W przypadku urządzeń mobilnychDefaultTrackSelector
preferuje dźwięk stereo/mono niż wielokanałowe formaty audio, chyba że format wielokanałowy może być uprzestrzenny (Android 12L lub nowszy) lub dźwięk przestrzenny Dolby. Dodatkowo na urządzeniach, które obsługują uporządkowanie dźwięku,DefaultTrackSelector
będzie monitorować zmiany we właściwościach przestrzennika i aktywować na nich nowy wybór ścieżki. Urządzenia ztelevision
trybem interfejsu są wykluczone z tych ograniczeń. Preferowany jest format z największą liczbą kanałów. Aby można było włączyć tę funkcję, instancjęDefaultTrackSelector
trzeba utworzyć za pomocąContext
.
- Rozdziel klasę
- Film:
- Zmień nazwę
DummySurface
naPlaceholderSurface
. - Dodaj obsługę AV1 do interfejsu
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Zmień nazwę
- Dźwięk:
- Używaj niestandardowego typu MIME do reklamowania dekodera dźwięku LG AC3.
- Zmień typ zwrotu
AudioAttributes.getAudioAttributesV21()
zandroid.media.AudioAttributes
na nową klasę otokiAudioAttributesV21
, aby zapobiec powolnej weryfikacji ART w interfejsie API < 21. - Wyślij zapytanie do platformy (API w wersji 29 lub nowszej) lub załóż, że liczba kanałów kodowania audio na potrzeby przekazywania dźwięku jest nieskonfigurowana, gdy liczba kanałów audio nie jest określona, co ma miejsce w przypadku przygotowania bezfragmentowego protokołu HLS (10204).
- Skonfiguruj
AudioTrack
z maską kanałuAudioFormat.CHANNEL_OUT_7POINT1POINT4
, jeśli dekoder wysyła 12-kanałowy dźwięk w formacie PCM (#10322.
- DRM
- Upewnij się, że sesja DRM jest zawsze poprawnie aktualizowana w przypadku wyszukiwania natychmiast po zmianie formatu (10274).
- Tekst:
- Zmień
Player.getCurrentCues()
, aby zwracała wartośćCueGroup
zamiastList<Cue>
. - SSA: obsługa ustawienia stylu
OutlineColour
, gdyBorderStyle == 3
(tj.OutlineColour
ustawia tło wskazówki) (#8435). - CEA-708: analiza danych na potrzeby wielu bloków obsługi i ignorowanie blokad niepowiązanych z wybranym numerem usługi.
- Usuń plik
RawCcExtractor
, który był używany tylko do obsługi wewnętrznego formatu napisów Google.
- Zmień
- Moduły wyodrębniania danych:
- Interfejs:
- Napraw dostarczanie zdarzeń do
OnClickListener
ustawionych naPlayerView
, jeśliuseController=false
(#9605). Poprawiono też wyświetlanie zdarzeń doOnLongClickListener
we wszystkich konfiguracjach widoku. - Rozwiązanie problemu z nieprawidłowym traktowaniem sekwencji zdarzeń dotknięcia, które wychodzą z granic zbioru
PlayerView
przedACTION_UP
, jako kliknięcia (#9861). - Rozwiązaliśmy problem z ułatwieniami dostępu w usłudze
PlayerView
, który polegał na tym, że kliknięcie może spowodować przełączenie odtwarzania zamiast ukrycia elementów sterujących (#8627). - Przeredaguj
TrackSelectionView
iTrackSelectionDialogBuilder
, aby działały w interfejsiePlayer
zamiastExoPlayer
. Dzięki temu widoki mogą być używane z innymi implementacjamiPlayer
, a zależność między modułem interfejsu a modułem ExoPlayer zostaje usunięta. To przełomowa zmiana. - Nie pokazuj wymuszonych ścieżek tekstowych w selektorze ścieżek
PlayerView
i pozostaw wybraną odpowiednią ścieżkę tekstową, jeśli wybrano opcję „Brak” (#9432).
- Napraw dostarczanie zdarzeń do
- DASH:
- Przeanalizuj liczbę kanałów z elementów
AudioChannelConfiguration
DTS. Spowoduje to ponowne włączenie przekazywania dźwięku w strumieniach DTS (#10159). - Nie zezwalaj na przekazywanie danych
null
doDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. InstancjeDefaultCompositeSequenceableLoaderFactory
można przekazywać w sposób jawny w razie potrzeby.
- Przeanalizuj liczbę kanałów z elementów
- HLS:
- Wróć do szczegółowego przygotowania, jeśli atrybut CODECS playlisty nie zawiera kodeka audio (#10065).
- Nie zezwalaj na przekazywanie komunikatów
null
doHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
iHlsMediaSource.Factory.setPlaylistTrackerFactory
. WystąpieniaDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
lub odniesienie doDefaultHlsPlaylistTracker.FACTORY
mogą być w razie potrzeby przekazywane bezpośrednio.
- Płynne strumieniowanie:
- Nie zezwalaj na przekazywanie danych
null
doSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. W razie potrzeby instancjeDefaultCompositeSequenceableLoaderFactory
można przekazać jawnie.
- Nie zezwalaj na przekazywanie danych
- RTSP:
- Dodaj czytnik RTP dla H263 (#63).
- Dodaj czytnik RTP dla MPEG4 (#35).
- Dodaj czytnik RTP na potrzeby HEVC (#36).
- Dodaj czytnik RTP na potrzeby AMR. Obecnie obsługiwane są tylko jednokanałowe, nieprzeplatane strumienie AMR. Złożony ładunek RTP AMR nie jest obsługiwany. (nr 46).
- Dodaj czytnik RTP dla VP8 (#47).
- Dodaj czytnik RTP na potrzeby WAV (#56).
- Popraw nagłówek podstawowej autoryzacji RTSP. (#9544).
- Przestań sprawdzać obowiązkowe pola SDP, ponieważ ExoPlayer ich nie potrzebuje (#10049).
- Podczas analizy czasu RTSP (#10165) zgłaszaj wyjątek zaznaczony.
- Dodaj czytnik RTP dla VP9 (#47).
- Dodaj czytnik RTP dla OPUS (#53).
- Źródła danych:
- Zmień nazwę
DummyDataSource
naPlaceholderDataSource
. - Obejście problemu z przerwami w obsłudze przerw w OkHttp.
- Zmień nazwę
- Sesja:
- Zastąp
MediaSession.MediaItemFiller
wartościąMediaSession.Callback.onAddMediaItems
, aby umożliwić asynchroniczne rozpoznawanie żądań. - Obsługuj metody
setMediaItems(s)
, gdyMediaController
łączy się ze starszą sesją multimediów. - Usuń
MediaController.setMediaUri
iMediaSession.Callback.onSetMediaUri
. Tę samą funkcję można osiągnąć za pomocą właściwościMediaController.setMediaItem
iMediaSession.Callback.onAddMediaItems
. - Przekierowuj starsze połączenia
MediaController
, aby odtwarzać multimedia naMediaSession.Callback.onAddMediaItems
zamiastonSetMediaUri
. - Aby dostosować powiadomienie, dodaj
MediaNotification.Provider
iDefaultMediaNotificationProvider
. - Aby pobrać obrazy dzieł sztuki, dodaj
BitmapLoader
iSimpleBitmapLoader
. - Dodaj
MediaSession.setCustomLayout()
, by zapewnić zgodność wsteczną ze starszą sesją. - Dodaj
MediaSession.setSessionExtras()
, aby zapewnić spójność funkcji ze starszą sesją. - Zmień nazwę
MediaSession.MediaSessionCallback
naMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
naMediaLibrarySession.Callback
, aMediaSession.Builder.setSessionCallback
nasetCallback
. - Napraw NPE w
MediaControllerImplLegacy
(#59). - Zaktualizuj informacje o pozycji sesji w przypadku zmiany osi czasu(nr 51).
- Napraw NPE w
MediaControllerImplBase
po zwolnieniu kontrolera (#74).
- Zastąp
- Odtwarzanie reklam / IMA:
- Zmniejsz częstotliwość odpytywania reklam z co 100 do 200 ms, aby dostosować ustawienia do rekomendacji Media Rating Council (MRC).
- Rozszerzenie FFmpeg:
- Zaktualizuj wersję CMake do wersji
3.21.0+
, aby uniknąć błędu CMake, który powodował niepowodzenie synchronizacji narzędzia Gradle w Android Studio (#9933).
- Zaktualizuj wersję CMake do wersji
- Usuń wycofane symbole:
- Usuń
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Użyj w zamian zasadyPlayer.Listener.onTracksChanged(Tracks)
. - Usuń
Player.getCurrentTrackGroups
iPlayer.getCurrentTrackSelections
. Użyj w zamian zasadyPlayer.getCurrentTracks
. Możesz też nadal używać metodExoPlayer.getCurrentTrackGroups
iExoPlayer.getCurrentTrackSelections
, ale te metody pozostają wycofane. - Usuń stałe
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
iDEFAULT_TRACK_SELECTOR_PARAMETERS
. W miarę możliwości używaj parametrugetDefaultTrackSelectorParameters(Context)
, a w przeciwnym razie –DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Usuń konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Użyj w zamian zasadyDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Usuń
Transformer.Builder.setContext
. WartośćContext
powinna zostać przekazana do konstruktoraTransformer.Builder
.
- Usuń
Wersja 1.0.0-alpha03
14 marca 2022 r.
Usługa androidx.media3:media3-*:1.0.0-alpha03
została zwolniona.
Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.
Odpowiada to wersji ExoPlayer 2.17.1.
- Dźwięk:
- Usunęliśmy błąd podczas sprawdzania funkcji audio Dolby Atmos (E-AC3-JOC) w HLS.
- Moduły wyodrębniania danych:
- FMP4: usunięto problem, który powodował, że przykładowe metadane emsg w niewłaściwej kolejności w przypadku strumieni zawierających atomy emsg w wersjach v0 i v1 (#9996).
- Tekst:
- Napraw interakcję
SingleSampleMediaSource.Factory.setTrackId
iMediaItem.SubtitleConfiguration.Builder.setId
, aby nadać priorytet poluSubtitleConfiguration
, i wróć do wartościFactory
, jeśli nie jest ustawiona (#10016).
- Napraw interakcję
- Odtwarzanie reklam:
- Napraw przerwy w odtwarzaniu dźwięku między okresami reklamowymi w transmisjach HLS SSAI na żywo.
Wersja 1.0.0-alpha02
2 marca 2022 r.
Usługa androidx.media3:media3-*:1.0.0-alpha02
została zwolniona.
Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.
Odpowiada to wersji ExoPlayer 2.17.0.
- Biblioteka podstawowa:
- Dodaj chronioną metodę
DefaultRenderersFactory.getCodecAdapterFactory()
, aby podklasy klasyDefaultRenderersFactory
, które zastępująbuildVideoRenderers()
lubbuildAudioRenderers()
, miały dostęp do fabryki kodeka i przekazywały ją doMediaCodecRenderer
utworzonych przez siebie instancji. - Propaguj pola nagłówka ICY
name
igenre
odpowiednio doMediaMetadata.station
iMediaMetadata.genre
, aby użytkownicy docierali do aplikacji przezPlayer.Listener.onMediaMetadataChanged()
(#9677). - Usuń klucze null z
DefaultHttpDataSource#getResponseHeaders
. - Uśpienie i ponowienie próby, jeśli nie uda się utworzyć instancji
MediaCodec
. Pozwala to obejść problem, który występuje na niektórych urządzeniach przy przełączaniu platformy z bezpiecznego kodeka na inny kodek (#8696). - Dodaj
MediaCodecAdapter.getMetrics()
, aby umożliwić użytkownikom uzyskiwanie danych z usługiMediaCodec
. (#9766). - Napraw rozwiązywanie zależności Maven (#8353).
- Wyłącz automatyczną korektę szybkości w przypadku transmisji na żywo, które nie mają funkcji małego opóźnienia ani nie mają ustawienia szybkości na żądanie użytkownika (#9329).
- Zmień nazwę
DecoderCounters#inputBufferCount
naqueuedInputBufferCount
. - Ustaw profil
SimpleExoPlayer.renderers
jako prywatny. Mechanizmy renderowania są dostępne na stronieExoPlayer.getRenderer
. - Zaktualizowaliśmy niektóre stałe
AnalyticsListener.EventFlags
, by pasowały do wartości w tabeliPlayer.EventFlags
. - Podziel
AnalyticsCollector
na interfejs i domyślną implementację, aby umożliwić usunięcie go przez R8, gdy aplikacja jej nie potrzebuje.
- Dodaj chronioną metodę
- Wybór ścieżki:
- Obsługuj flagi preferowanych ról wideo przy wyborze utworu (#9402).
- Zaktualizuj logikę wyboru ścieżki wideo, aby podczas wybierania wielu ścieżek wideo do adaptacji uwzględniała preferowane typy MIME i flagi ról (#9519).
- Zaktualizuj logikę wyboru ścieżki wideo i ścieżki audio, aby wybierać tylko te formaty w przypadku wyborów adaptacyjnych o tym samym poziomie obsługi dekodera i sprzętu (#9565).
- Zaktualizuj logikę wyboru ścieżki wideo, aby preferować bardziej wydajne kodeki, jeśli główne dekodery z akceleracją sprzętową obsługują wiele kodeków (#4835).
- Wybieraj treści audio (np. „domyślna” ścieżka dźwiękowa lub ścieżka w języku systemu operacyjnego) zamiast technicznych ograniczeń wyboru ścieżki (np. preferowany typ MIME lub maksymalna liczba kanałów).
- Rozwiązanie problemu z wyborem ścieżki, w którym zastąpienie jednej grupy ścieżek nie wyłączało innych grup ścieżek tego samego typu (#9675).
- Rozwiązanie problemu z wyborem utworu, w którym nie można prawidłowo zastąpić zarówno niepustego, jak i pustego utworu (#9649).
- Nie zezwalaj na duplikaty komponentów
TrackGroup
w atrybucieTrackGroupArray
. ElementyTrackGroup
można zawsze odróżnić, ustawiając elementid
w konstruktorzeTrackGroup
. Rozwiązano problem, który występował podczas wznawiania odtwarzania po uruchomieniu aplikacji w tle z zastąpieniem aktywnej ścieżki (#9718). - Zmień zasady w
AdaptiveTrackSelection
, aby zapewnić wzrost jakości przy wystarczającej przepustowości sieci nawet wtedy, gdy odtwarzanie odbywa się bardzo blisko brzegu transmisji na żywo (#9784).
- Film:
- Napraw logikę zastępczą dekodera w Dolby Vision, by w razie potrzeby używać zgodnego dekodera H264/H265.
- Dźwięk:
- Napraw logikę działania awaryjnego dekodera dla Dolby Atmos (E-AC3-JOC), aby w razie potrzeby używać zgodnego dekodera E-AC3.
- Zmień interfejsy API
AudioCapabilities
tak, aby wymagały jawnego przekazywaniaAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
zamiastnull
. - Możesz dostosować obliczenie rozmiaru bufora
AudioTrack
, wstawiając wartośćAudioTrackBufferSizeProvider
doDefaultAudioSink
. (#8891). - Jeśli żądany rozmiar bufora przekracza 1 MB, ponów próbę utworzenia pliku
AudioTrack
. (#9712).
- Moduły wyodrębniania danych:
- Tekst:
- Dodaj pole
MediaItem.SubtitleConfiguration.id
, które zostanie przekazane do polaFormat.id
ścieżki z napisami utworzonej na podstawie konfiguracji (#9673). - Dodanie podstawowej obsługi napisów WebVTT w kontenerach Matroska (#9886).
- Nie zezwalaj usłudze
Cea708Decoder
na odczyt większego rozmiaru bloku usługi niż zadeklarowany.
- Dodaj pole
- DRM:
- Usuń
playbackLooper
z kontaDrmSessionManager.(pre)acquireSession
. Gdy aplikacjaDrmSessionManager
jest używana przez aplikację w niestandardowym elemencieMediaSource
, zamiast tego doDrmSessionManager.setPlayer
należy przekazaćplaybackLooper
.
- Usuń
- Odtwarzanie reklam / IMA:
- Dodaj obsługę dynamicznego wstawiania reklam (DAI) IMA (#8213).
- Dodaj metodę do
AdPlaybackState
, aby umożliwić zresetowanie grupy reklam i jej ponowne odtworzenie (#9615). - Egzekwuj szybkość odtwarzania wynoszącą 1,0 podczas odtwarzania reklamy (#9018).
- Rozwiązanie problemu polegającego na tym, że w przypadku grupy reklam, której nie udało się wczytać, odtwarzanie zostało natychmiast zresetowane (#9929).
- Interfejs:
- DASH:
- Dodaj przeanalizowane podstawowe i dodatkowe właściwości do
Representation
(#9579). - Obsługuj rolę śledzenia
forced-subtitle
(#9727). - Przestań interpretować rolę ścieżki
main
jakoC.SELECTION_FLAG_DEFAULT
. - Napraw zasadę wykluczania podstawowego adresu URL w przypadku plików manifestu, które nie deklarują przestrzeni nazw DVB (#9856).
- Obsługuj względne adresy URL typu
MPD.Location
(#9939).
- Dodaj przeanalizowane podstawowe i dodatkowe właściwości do
- HLS:
- Prawidłowo wypełnij pole
Format.label
w przypadku strumieni HLS tylko audio (#9608). - Domyślnie używaj przygotowywania bez fragmentów, aby skrócić czas uruchamiania. Jeśli Twoje wypożyczenia zawierają powielone ścieżki napisów, które nie są zadeklarowane na playliście reklamy nadrzędnej, dodaj je do playlisty reklamy nadrzędnej, aby umożliwić odtwarzanie, lub wyłącz przygotowywanie bez fragmentów, korzystając z usługi
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Obsługuj precyzyjne przewijanie klatki kluczowej w HLS (#2882).
- Prawidłowo wypełnij pole
- RTSP:
- Udostępnij interfejs API klienta, aby zastąpić identyfikator
SocketFactory
używany w przypadku każdego połączenia z serwerem (#9606). - Preferuj metodę uwierzytelniania DIGEST zamiast metody PODSTAWOWEJ, jeśli obie są obecne (#9800).
- Obsługa, gdy czas ścieżki RTSP jest niedostępny (#9775).
- Zignoruj nieprawidłowe wartości nagłówka RTP-Info (#9619).
- Udostępnij interfejs API klienta, aby zastąpić identyfikator
- Transformer:
- Zwiększ wymaganą wersję interfejsu API min. do 21.
TransformationException
służy teraz do opisywania błędów występujących podczas przekształcania.- Dodaj
TransformationRequest
, aby określić opcje przekształcenia. - Zezwalaj na rejestrowanie wielu detektorów.
- Rozwiązywanie problemów z blokowaniem Transformera, gdy dane wyjściowe kodeka są częściowo odczytywane.
- Popraw potencjalny NPE w
Transformer.getProgress
podczas zwalniania żądań Muxer. - Dodaj aplikację w wersji demonstracyjnej do stosowania przekształceń.
- Rozszerzenie MediaSession:
- Domyślnie
MediaSessionConnector
czyści playlistę po zatrzymaniu. Aplikacje, które chcą zachować playlistę, mogą wywoływaćsetClearMediaItemsOnStop(false)
w oprogramowaniu sprzęgającym.
- Domyślnie
- Rozszerzenie Cast:
- Rozszerzenie FFmpeg:
- Spraw, aby funkcja
build_ffmpeg.sh
zależała od narzędzi bin LLVM, a nie GNU (#9933).
- Spraw, aby funkcja
- Zgodność z Androidem 12:
- Uaktualnij rozszerzenie Cast, by korzystać z interfejsu
com.google.android.gms:play-services-cast-framework:20.1.0
. Wcześniejsze wersjeplay-services-cast-framework
są niezgodne z aplikacjami kierowanymi na Androida 12 i podczas tworzenia aplikacjiPendingIntent
ulegają awarii zIllegalArgumentException
(#9528).
- Uaktualnij rozszerzenie Cast, by korzystać z interfejsu
- Usuń wycofane symbole:
- Usuń
Player.EventListener
. Użyj w zamian zasadyPlayer.Listener
. - Usuń
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
iMediaSourceFactory#setDrmUserAgent
. UżyjMediaSourceFactory#setDrmSessionManagerProvider
. - Usuń
MediaSourceFactory#setStreamKeys
. UżyjMediaItem.Builder#setStreamKeys
. - Usuń
MediaSourceFactory#createMediaSource(Uri)
. UżyjMediaSourceFactory#createMediaSource(MediaItem)
. - Usuń
setTag
z usługDashMediaSource
,HlsMediaSource
iSsMediaSource
. Użyj w zamian zasadyMediaItem.Builder#setTag
. - Usuń
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. Użyj parametrówMediaItem.Builder#setLiveConfiguration
iMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, aby zastąpić instrukcje wyświetlane w pliku manifestu, lubDashMediaSource#setFallbackTargetLiveOffsetMs
, aby podać wartość zastępczą. - Usuń
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Nie można już zrezygnować z egzekwowania zasad. - Usuń
ActionFile
iActionFileUpgradeUtil
. Użyj rozszerzenia ExoPlayer w wersji 2.16.1 lub starszej, aby za pomocąActionFileUpgradeUtil
scalać starsze pliki działań wDefaultDownloadIndex
. - Usuń
ProgressiveMediaSource#setExtractorsFactory
. Użyj konstruktoraProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - Usuń
ProgressiveMediaSource.Factory#setTag
orazProgressiveMediaSource.Factory#setCustomCacheKey
. Zamiast nich używajMediaItem.Builder#setTag
iMediaItem.Builder#setCustomCacheKey
. - Usuń konstruktory
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
iDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Zamiast tego używaj konstruktoraDefaultRenderersFactory(Context)
orazDefaultRenderersFactory#setExtensionRendererMode
iDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Usuń wszystkie publiczne konstruktory
CronetDataSource
. UżyjCronetDataSource.Factory
.
- Usuń
- Zmień tylko
IntDefs
na@Target(TYPE_USE)
. Może to zakłócić kompilację przypadków użycia w kotlinie, co można poprawić, przenosząc adnotację do typu (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(wcom.google.android.exoplayer2.ext.flac
pakiecie)@FlacExtractor.Flags
(wcom.google.android.exoplayer2.extractor.flac
pakiecie)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Wersja 1.0.0-alpha01
27 października 2021 roku
Usługa androidx.media3:media3-*:1.0.0-alpha01
została zwolniona.
Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
Media3 to nowe miejsce, w którym znajdziesz biblioteki obsługujące multimedia, w tym ExoPlayer. Pierwsza wersja alfa obejmuje wczesne, funkcjonalne implementacje bibliotek do implementacji przypadków użycia multimediów, w tym:
- ExoPlayer – odtwarzacz na Androida na poziomie aplikacji, który można łatwo dostosować i rozszerzyć.
- Funkcja sesji multimediów, aby pokazać i kontrolować odtwarzanie. Ten nowy moduł sesji korzysta z tego samego interfejsu
Player
co ExoPlayer. - Komponenty do tworzenia interfejsów do odtwarzania multimediów.
- Funkcja pakowania modułów w innych bibliotekach do użytku z ExoPlayer, np. wstawiania reklam za pomocą pakietu IMA SDK.
Więcej informacji znajdziesz w projekcie GitHub Media3.
Oprogramowanie ExoPlayer było wcześniej hostowane w oddzielnym projekcie GitHub. W Media3 nazwa pakietu to androidx.media3.exoplayer
. Planujemy dalej obsługiwać projekt GitHub ExoPlayer i udostępniać go przez jakiś czas, aby dać aplikacjom czas na migrację do Media3. Media3 ma zamienniki wszystkich modułów ExoPlayer z wyjątkiem starszych rozszerzeń media2 i mediasession, które zostały zastąpione nowym modułem media3-session
. Zapewnia to bezpośrednią integrację między odtwarzaczami a sesjami multimediów bez konieczności używania adaptera/klasy łącznika.