Media3
Najnowsza aktualizacja | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
12 kwietnia 2024 r. | 1.3.1 | - | - | 1.4.0-alfa01 |
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:
Odlotowy
dependencies { def media3_version = "1.3.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" }
Kotlin
dependencies { val media3_version = "1.3.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") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Możesz użyć narzędzia do śledzenia problemów z Media3, aby znaleźć odpowiedzi na pytania, znane problemy i prośby o dodanie funkcji, a także zgłosić nowe problemy.
Wersja 1.4.0
Wersja 1.4.0-alfa01
17 kwietnia 2024 r.
Aplikacja androidx.media3:media3-*:1.4.0-alpha01
została zwolniona.
Wersja 1.4.0-alpha01 zawiera te zatwierdzenia.
- ExoPlayer:
- Dodaj element
BasePreloadManager
, który koordynuje wstępne wczytywanie wielu źródeł na podstawie priorytetów określonych przez parametrrankingData
. Rozszerzanie tej klasy jest możliwe, aby można było je dostosowywać. Dodaj funkcjęDefaultPreloadManager
, która używa metodyPreloadMediaSource
do wstępnego wczytywania próbek multimediów ze źródeł do pamięci, oraz liczby całkowitejrankingData
, która wskazuje indeks elementu w interfejsie. - Dodaj
PlayerId
do większości metodLoadControl
, aby umożliwić implementacjeLoadControl
obsługujące wiele odtwarzaczy. - Usuń użytkowników
Buffer.isDecodeOnly()
iC.BUFFER_FLAG_DECODE_ONLY
. Nie trzeba ustawiać tej flagi, ponieważ mechanizmy renderowania i dekoderów będą decydować o pomijaniu buforów na podstawie sygnatury czasowej. Niestandardowe implementacjeRenderer
powinny sprawdzać, czy czas buforowania wynosi co najmniejBaseRenderer.getLastResetPositionUs()
, aby określić, czy należy wyświetlić próbkę. Niestandardowe implementacjeSimpleDecoder
mogą w razie potrzeby sprawdzać parametrisAtLeastOutputStartTimeUs
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 ma być wstępnie ładowaneMediaSource
z określonymrankingData
. - Dodaj
remove(MediaSource)
doBasePreloadManager
.
- Dodaj element
- Transformer:
- Dodaj
audioConversionProcess
ivideoConversionProcess
doExportResult
, by określić sposób utworzenia odpowiedniej ścieżki w pliku wyjściowym. - Rozluźnij się z kontrolą optymalizacji przycięcia H.264.
- Dodano obsługę przełączania między multimediami wejściowymi SDR i HDR w sekwencji.
- Dodano obsługę efektów dźwiękowych na poziomie kompozycji.
- Dodaj obsługę transkodowania obrazów ultra HDR do filmów HDR.
- Rozwiązaliśmy problem polegający na tym, że po zresetowaniu i ponownym użyciu
DefaultAudioMixer
nie zwraca prawidłowej liczby bajtów.
- Dodaj
- Film:
- Rozwiązanie problemu polegającego na tym, że
Listener.onRenderedFirstFrame()
pojawia się zbyt wcześnie podczas przełączania platform w trakcie odtwarzania.
- Rozwiązanie problemu polegającego na tym, że
- Ź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. Do tej pory nie było to udokumentowane, ale jest to skuteczniejszy sposób uzyskiwania dostępu do zasobów w innym pakiecie niż nazwa. - Starannie sprawdź parametr
url
w konstruktorachDataSpec
, który nie ma wartości null. Ten parametr został już dodany do adnotacji nie ma wartości null.
- Zaimplementuj obsługę identyfikatorów URI nieprzetworzonych zasobów
- Efekt:
- Obsługuj wiele zmian prędkości w obrębie tego samego atrybutu
EditedMediaItem
lubComposition
wSpeedChangeEffect
. - Obsługa wyjściowego formatu HLG i PQ z wejścia bitmapy ultra HDR.
- Dodano obsługę klasy EGL_GL_COLORSPACE_BT2020_HLG_EXT, która poprawia jakość danych wyjściowych HLG w plikach ExoPlayer.setVideoEffect i Debuger SurfaceView.
- Zaktualizuj implementację macierzy nakładki, aby była zgodna z dokumentacją, odwracając wartości x i y stosowane w
setOverlayFrameAnchor()
. Jeśli używasz funkcjiOverlaySettings.Builder.setOverlayFrameAnchor()
, odwróć ich wartości x i y, mnożąc je przez-1
.
- Obsługuj wiele zmian prędkości w obrębie tego samego atrybutu
- Sesja:
- Zmień wartość domyślną z
CommandButton.enabled
natrue
i upewnij się, że w przypadku kontrolerów ta wartość może pozostać nieskonfigurowana, nawet jeśli powiązane polecenie jest dostępne. - Dodaj stałe ikony dla elementu
CommandButton
, które powinny być używane zamiast zasobów ikon niestandardowych. - Dodaj
MediaSessionService.isPlaybackOngoing()
, aby umożliwić aplikacjom zapytania o to, czy usługa musi zostać zatrzymana w komponencieonTaskRemoved()
(#1219). - Dodaj funkcję
MediaSessionService.pauseAllPlayersAndStopSelf()
, która w wygodny sposób wstrzyma odtwarzanie wszystkich sesji, i wywołaj metodęstopSelf
, aby zakończyć cykl życiaMediaSessionService
. - Zastąp
MediaSessionService.onTaskRemoved(Intent)
, aby zapewnić bezpieczną implementację domyślną, która utrzymuje usługę na pierwszym planie, jeśli odtwarzanie trwa, lub zatrzymuje ją w inny sposób.
- Zmień wartość domyślną z
- Pobrane pliki:
- Upewnij się, że
DownloadHelper
nie ujawnia nieopublikowanych instancjiRenderer
, co może doprowadzić do awarii aplikacjiIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Upewnij się, że
- Narzędzia testowe:
- Zaimplementuj
onInit()
ionRelease()
w aplikacjiFakeRenderer
. - Zmień metody
TestPlayerRunHelper.runUntil/playUntil
, aby nie wykonywały błędów niekrytycznych (np. tych zgłoszonych doAnalyticsListener.onVideoCodecError
). Użyj nowego łańcucha metodTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
, aby wyłączyć takie zachowanie.
- Zaimplementuj
- Aplikacja w wersji demonstracyjnej:
- Użyj
DefaultPreloadManager
w krótkiej aplikacji demonstracyjnej.
- 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.
Aplikacja androidx.media3:media3-*:1.3.1
została zwolniona.
Wersja 1.3.1 zawiera te zatwierdzenia.
- Wspólna biblioteka:
- Dodaj
Format.labels
, aby zezwolić na etykiety zlokalizowane i inne.
- Dodaj
- ExoPlayer:
- Rozwiązanie problemu polegającego na tym, że
PreloadMediaPeriod
nie może zachowywać strumieni po ponownym wczytaniu. - Zastosuj prawidłową wartość
TrackSelectionResult
do okresu odtwarzania podczas ponownego wyboru utworu. - Renderowanie z wcześniejszym włączeniem należy rozpocząć dopiero po zakończeniu okresu odtwarzania podczas przechodzenia między elementami multimedialnymi (#1017).
- Dodaj brakujący typ zwracany do reguły
-keepclasseswithmembers
ProPard dlaDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Rozwiązanie problemu polegającego na tym, że
- Transformer:
- Dodaj obejście zgłoszonego wyjątku, ponieważ element
MediaMuxer
nie obsługuje wykluczonych sygnatur czasowych prezentacji przed interfejsem API 30.
- Dodaj obejście zgłoszonego wyjątku, ponieważ element
- Wybór ścieżki:
DefaultTrackSelector
: wolę ścieżki wideo z „rozsądną” liczbą klatek (>=10 kl./s) niż te z mniejszą lub nieskonfigurowaną liczbą klatek. Dzięki temu odtwarzacz wybiera „prawdziwą” ścieżkę wideo w pliku MP4 wyodrębnionym ze zdjęć ruchomych, które mogą zawierać 2 ścieżki HEVC, z których jedna ma wyższą rozdzielczość, ale bardzo małą liczbę klatek (#1051).
- Moduły wyodrębniania:
- Rozwiązano problem, który powodował, że dopełnienie nie było pomijane podczas odczytu fragmentów plików WAV o nietypowych rozmiarach (#1117).
- MP3: wypełniaj pole
Format.averageBitrate
z ramek metadanych, takich jakXING
iVBRI
. - MPEG-TS: wycofywanie zmiany, która ma na celu wyrenderowanie ostatniej klatki przez przekazanie ostatniej jednostki dostępu do strumienia do kolejki próbki (#7909). Wynika to z zmiany, która powoduje nowe problemy ze strumieniami HLS typu I-frame tylko ze strumieniami HLS (#1150) i strumieniami HLS H.262 (#1126).
- Dźwięk:
- Zezwól na przywracanie mechanizmu renderowania przez wyłączenie obciążenia, jeśli nie uda się zainicjować ścieżki audio w trybie przeładowywania.
- 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óre powoduje, że strumienie H265 z 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 robi tego automatycznie zgodnie z wymaganiami interfejsu API (#1169). (#966).
- Rozwiązaliśmy problem polegający na tym, że obsługa informacji o kolorach HDR powoduje nieprawidłowe działanie kodeka i uniemożliwia adaptacyjne przełączanie formatu na ścieżkach wideo SDR (#1158).
- Tekst:
- WebVTT: zapobiega tworzeniu fałszywych dodatkowych instancji
CuesWithTiming
bezpośrednio z rzęduWebvttParser.parse
(#1177).
- WebVTT: zapobiega tworzeniu fałszywych dodatkowych instancji
- DRM:
- Obejście problemu
NoSuchMethodError
, który może być wywoływany przez platformęMediaDrm
zamiastResourceBusyException
lubNotProvisionedException
na niektórych urządzeniach z Androidem 14 (#1145).
- Obejście problemu
- Efekt:
- Ulepszono mapowanie tonów PQ na SDR dzięki konwertowaniu przestrzeni kolorów.
- Sesja:
- Interfejs:
- Jeśli
Locale
nie może rozpoznać wyświetlanej nazwy, dodaj nazwę języka ścieżki audio (#988).
- Jeśli
- Rozszerzenie DASH:
- Wypełnij wszystkie elementy
Label
z pliku manifestu w elemencieFormat.labels
(#1054).
- Wypełnij wszystkie elementy
- Rozszerzenie RTSP:
- Pomiń puste wartości informacji o sesji (tagi i) 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 w zależności lokalnej, mogą go ponownie włączyć.
Wersja 1.3.0
6 marca 2024 roku
Aplikacja 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. Zawsze było to udokumentowane, ale do tej pory nie udało się tego wprowadzić. - Normalizuj typy MIME ustawione przez kod aplikacji lub odczytywane z multimediów, aby zapisywać je w całości małymi literami.
- Zdefiniuj reklamy, używając w polu
AdPlaybackState
pełnej wartościMediaItem
zamiast pojedynczegoUri
. - Zwiększ
minSdk
do 19 (Android KitKat). Jest on spójny ze wszystkimi pozostałymi bibliotekami AndroidaX i jest wymagany do uaktualnienia do najnowszych wersji zależności AndroidX. - Jeśli co najmniej 1 z nich nie ma wartości null (#964), wypełnij pola
artworkUri
iartworkData
w poluMediaMetadata.Builder.populate(MediaMetadata)
.
- 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 z określoną pozycją początkową przed odtworzeniem treści.PreloadMediaSource
przygotowuje źródło multimediów do odbioruTimeline
, przygotowuje okres do buforowania w danej pozycji początkowej oraz wybiera ścieżki i wczytuje dane multimediów z tego okresu. Aplikacje kontrolują postęp wstępnego wczytywania, implementującPreloadMediaSource.PreloadControl
i konfigurując wstępnie wczytane źródło jako odtwarzacz do odtwarzania. - Dodaj właściwość
ExoPlayer.setImageOutput
, która zezwala aplikacjom na ustawienieImageRenderer.ImageOutput
. DefaultRenderersFactory
domyślnie udostępnia graczowiImageRenderer
z wartościami nullImageOutput
iImageDecoder.Factory.DEFAULT
.- emituj zdarzenie
Player.Listener.onPositionDiscontinuity
, gdy cisza jest pominięta (#765). - Dodaj 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ą
PreloadMediaSource
. - Zaimplementuj
HttpEngineDataSource
(HttpDataSource
) za pomocą interfejsu API HttpEngine. - Zapobiegaj podklasyfikacji
CompositeSequenceableLoader
. Ten komponent został wcześniej rozszerzany, ale nigdy nie został dodany do podklasy w bibliotece. Dostosowanie można dostosować, pakując instancję za pomocą wzorca dekoratora i wdrażając niestandardowy parametrCompositeSequenceableLoaderFactory
. - Rozwiązaliśmy problem polegający na tym, że powtarzanie tej samej godziny powoduje wyczyszczenie metadanych z tego elementu (#1007).
- Zmień nazwy metod
experimentalSetSubtitleParserFactory
wBundledChunkExtractor.Factory
iDefaultHlsExtractorFactory
nasetSubtitleParserFactory
i nie zezwalaj na przekazywanienull
. Użyj nowych metodexperimentalParseSubtitlesDuringExtraction(boolean)
, aby kontrolować analizowanie zachowania. - Dodano obsługę dostosowywania elementu
SubtitleParser.Factory
używanego podczas wyodrębniania. Można to osiągnąć za pomocą funkcjiMediaSource.Factory.setSubtitleParserFactory()
. - Dodaj prefiks źródła do wszystkich pól
Format.id
wygenerowanych zMergingMediaSource
. Pomaga to określić, które źródło wygenerowałoFormat
(#883). - Popraw wyrażenie regularne używane do weryfikacji nazw kluczy niestandardowych danych klienta Common Media Client Data (CMCD), modyfikując je tak, aby sprawdzały tylko łącznik (#1028).
- Zatrzymaj podwójne kodowanie parametrów zapytania CMCD (#1075).
- Dodaj zasady
- Transformer:
- Dodano obsługę spłaszczenia filmów w zwolnionym tempie H.265/HEVC SEF.
- Zwiększ szybkość transmiksowania, zwłaszcza w przypadku opcji „usuwanie filmu”.
- Dodaj interfejs API, aby mieć pewność, że plik wyjściowy rozpoczyna się od klatki wideo. Dzięki temu dane wyjściowe operacji przycinania mogą być bardziej zgodne z implementacjami odtwarzacza, które nie pokazują pierwszej klatki filmu aż do sygnatury czasowej prezentacji (#829).
- Dodaj obsługę optymalizacji operacji przycinania pojedynczego zasobu w formacie MP4.
- Dodaj obsługę, aby klatka wideo miała w pliku wyjściowym pierwszą sygnaturę czasową. Poprawia pliki wyjściowe rozpoczynające się od czarnej ramki w odtwarzaczach opartych na iOS (#829).
- Wybór ścieżki:
- Dodaj
DefaultTrackSelector.selectImageTrack
, aby włączyć wybór ścieżki obrazu. - Dodaj
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
, aby określić, czy chcesz wybrać ścieżkę obrazu, jeśli dostępna jest zarówno ścieżka graficzna, jak i wideo. Wartością domyślną jestfalse
, co oznacza, że wybór ścieżki wideo jest priorytetem.
- Dodaj
- Moduły wyodrębniania:
- Dodaj dodatkową analizę AV1C do wyodrębniania MP4, aby pobrać wartości
ColorInfo.colorSpace
,ColorInfo.colorTransfer
iColorInfo.colorRange
(#692). - MP3: użyj wyszukiwania ze stałą szybkością transmisji bitów (CBR) w przypadku plików z nagłówkiem
Info
(odpowiednik CBR nagłówkaXing
). Wcześniej używaliśmy tabeli wyszukiwania z nagłówkaInfo
, ale wyniki wyszukiwania są mniej dokładne niż w przypadku zignorowania jej i założenia, że plik to CBR. - MPEG2-TS: dodaj obsługę DTS, DTS-LBR i DTS:X Profile2 (#275).
- Wyodrębnianie typów audio z deskryptorów zadań i mapowanie ich na flagi ról, co umożliwia użytkownikom podejmowanie bardziej świadomych decyzji dotyczących ś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ą wstrzykiwać niestandardowyVideoFrameProcessor.Factory
, mogą utworzyć instancjęCompositingVideoSinkProvider
, która korzysta z niestandardowego elementuVideoFrameProcessor.Factory
, i przekazać dostawcę ujścia wideo doMediaCodecVideoRenderer
.
- Zmień konstruktor
- Tekst:
- Popraw serializację wskazówek bitmapy, aby naprawić błąd
Tried to marshall a Parcel that contained Binder objects
podczas korzystania zDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignoruj wartość
rowLock
. Zgodnie ze specyfikacją CEA-708-E S-2023 obie funkcjerowLock
icolumnLock
powinny być traktowane jako prawdziwe niezależnie od wartości w strumieniu (obsługa parametrucolumnLock
nie jest zaimplementowana, więc w praktyce przyjmuje się, że zawsze ma wartość fałsz).
- Popraw serializację wskazówek bitmapy, aby naprawić błąd
- Obraz:
- Dodano obsługę miniatur DASH. Obrazy siatki są przycinane, a pojedyncze miniatury są wyświetlane
ImageOutput
w czasie zbliżonym do czasu prezentacji.
- Dodano obsługę miniatur DASH. Obrazy siatki są przycinane, a pojedyncze miniatury są wyświetlane
- DRM:
- Domyślnie odtwarzaj niezaszyfrowane próbki „czystych potencjalnych klientów” od razu w treściach DRM, nawet jeśli klucze późniejszych zaszyfrowanych próbek nie są jeszcze gotowe. Może to spowodować zatrzymanie odtwarzania w trakcie odtwarzania, jeśli klucze nadal nie będą gotowe, gdy w miejscu odtwarzania będą odtwarzane zaszyfrowane próbki (ale wcześniej odtwarzanie w ogóle się nie rozpoczęło). To zachowanie można wyłączyć za pomocą metody
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
lubDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Domyślnie odtwarzaj niezaszyfrowane próbki „czystych potencjalnych klientów” od razu w treściach DRM, nawet jeśli klucze późniejszych zaszyfrowanych próbek nie są jeszcze gotowe. Może to spowodować zatrzymanie odtwarzania w trakcie odtwarzania, jeśli klucze nadal nie będą gotowe, gdy w miejscu odtwarzania będą odtwarzane zaszyfrowane próbki (ale wcześniej odtwarzanie w ogóle się nie rozpoczęło). To zachowanie można wyłączyć za pomocą metody
- Rozszerzenie IMA:
- Rozwiązanie problemu, który powodował, że nie można było odtwarzać reklam DASH i HLS bez odpowiedniego rozszerzenia pliku.
- Sesja:
- Wyłącz wykrywanie dwukrotnego kliknięcia w przypadku aplikacji na telewizory (#962).
- Rozwiązanie problemu polegającego na tym, że funkcja
MediaItem.RequestMetadata
z samymi dodatkami niezerowymi nie była przesyłana między kontrolerami multimediów a sesjami. - Dodaj do
MediaLibrarySession.Builder
konstruktor, który wymaga tylkoContext
zamiastMediaLibraryService
.
- Rozszerzenie HLS:
- Ogranicz
HlsMediaPeriod
, aby uzyskać widoczność pakietów. Ten typ nie powinien zależeć od źródła spoza pakietu HLS. - Rozwiąż powoduje efektywniejsze rozpoczynanie segmentu (#1031).
- Ogranicz
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Dekoder MIDI: ignoruj komunikaty o zdarzeniach SysEx (#710).
- Narzędzia testowe:
- Nie wstrzymuj odtwarzania w
TestPlayerRunHelper.playUntilPosition
. Test zachowuje odtwarzanie w stanie odtwarzania, ale zawiesza postęp do czasu, aż będzie w stanie dodać asercje i kolejne działania.
- Nie wstrzymuj odtwarzania w
- Aplikacja w wersji demonstracyjnej:
- Dodaj krótki moduł demonstracyjny, aby zademonstrować użycie elementu
PreloadMediaSource
w przypadku użycia krótkich treści.
- Dodaj krótki moduł demonstracyjny, aby zademonstrować użycie elementu
Wersja 1.3.0-rc01
22 lutego 2024 r.
Używaj wersji stabilnej 1.3.0.
Wersja 1.3.0-beta01
7 lutego 2024 r.
Używaj wersji stabilnej 1.3.0.
Wersja 1.3.0-alfa01
15 stycznia 2024 r.
Używaj wersji stabilnej 1.3.0.
Wersja 1.2.0
Wersja 1.2.1
Styczeń 9, 2024
- ExoPlayer:
- Rozwiąż problem polegający na tym, że ręczne wyszukiwanie wykraczające poza zakres
LiveConfiguration.min/maxOffset
powoduje ponowne dostosowywanie przesunięcia domin/maxOffset
. - Rozwiązano problem z nieprawidłowym układem kanałów OPUS i VORBIS na 3, 5, 6, 7 i 8 kanałach (#8396).
- Rozwiązanie problemu polegającego na tym, że wybór utworu po przesunięciu na zero w transmisji na żywo uniemożliwiał nieprawidłowe rozpoczęcie transmisji od pozycji domyślnej (#9347).
- Rozwiąż problem, który powodował, że nowe wystąpienia parametru
CmcdData.Factory
otrzymywały wartości ujemne dla parametrubufferedDurationUs
ze źródeł fragmentarycznych, czego wynikiem byłIllegalArgumentException
(#888).
- Rozwiąż problem polegający na tym, że ręczne wyszukiwanie wykraczające poza zakres
- Transformer:
- Obejmij problem, który powoduje wystąpienie błędu przez koder w czasie konfiguracji z powodu ustawienia wysokiej szybkości działania.
- Moduły wyodrębniania:
- Oznacz dodatkowe (nieodtwarzane) ścieżki HEVC na zdjęciach ruchomych JPEG jako
ROLE_FLAG_ALTERNATE
, aby nie były automatycznie wybierane do odtwarzania ze względu na ich wyższą rozdzielczość. - Naprawianie nieprawidłowego wykrywania klatek kluczowych w przypadku strumieni TS H264 (#864).
- Popraw szacowany czas trwania strumieni TS dłuższych niż 47 721 sekund (#855).
- Oznacz dodatkowe (nieodtwarzane) ścieżki HEVC na zdjęciach ruchomych JPEG jako
- Dźwięk:
- Poprawiono obsługę EOS dla elementu
SilenceSkippingAudioProcessor
przy wielokrotnym wywołaniu (#712).
- Poprawiono obsługę EOS dla elementu
- Film:
- Dodaj obejście problemu z urządzeniem na urządzeniu Galaxy Tab S7 FE, Chromecast z Google TV i Lenovo M10 FHD Plus, które powoduje oznaczenie strumieni AVC 60 kl./s jako nieobsługiwanego (#693).
- Metadane:
- Poprawiono błąd, w którym pole
MediaMetadata
było wypełniane tylko z komentarzy Vorbis wielkimi literami (#876). - Przechwytuj
OutOfMemoryError
podczas analizowania bardzo dużych klatek ID3, co oznacza, że odtwarzanie może być kontynuowane bez informacji o tagu, zamiast zakończyć się niepowodzeniem.
- Poprawiono błąd, w którym pole
- DRM:
- Rozszerz obejście fałszywie adresu URL licencji ClearKey
https://default.url
do interfejsu API na poziomie 33 lub wyższym (wcześniej było to rozwiązanie stosowane dokładnie tylko w interfejsie API 33) (#837). - Naprawa
ERROR_DRM_SESSION_NOT_OPENED
przy przechodzeniu z zaszyfrowanej treści na usunięcie treści bez platformy z odtwarzaczem. Błąd wynikał z nieprawidłowego użycia bezpiecznego dekodera do odtwarzania wyraźnych treści.
- Rozszerz obejście fałszywie adresu URL licencji ClearKey
- Sesja:
- Umieść niestandardowe klucze i wartości w zakresie
MediaMetadataCompat
wMediaMetadata.extras
, aMediaMetadata.extras
doMediaMetadataCompat
(#756, #802). - Napraw przesyłanie obrazu
notifyChildrenChanged
w przypadku starszych kontrolerów (#644). - Poprawiono błąd polegający na tym, że ustawienie negatywnego czasu wyłączenia licznika czasu powiadomienia
setWhen
powodowało awarię na niektórych urządzeniach (#903). - Napraw błąd
IllegalStateException
, jeśli kontroler powiadomień o multimediach nie został dokończony w chwili wysłania prośby o pierwszą aktualizację powiadomienia (#917).
- Umieść niestandardowe klucze i wartości w zakresie
- Interfejs:
- Rozwiązanie problemu polegającego na tym, że przyciski przewijania do przodu i do tyłu były niewidoczne w przypadku użycia interfejsu Material Design w elemencie bottomSheetDialogFragment (#511).
- Rozwiąż problem z niewłaściwie wyrównanymi liczbami w przycisku szybkiego przewijania w elemencie
PlayerControlView
(nr 547).
- Rozszerzenie DASH:
- Przeanalizuj „f800” jako liczbę kanałów Dolby wynoszącą 5 w pliku manifestu DASH (#688).
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Rozszerzenie Cast:
- Ponownie przeprowadź proces tworzenia obiektu
Timeline
, aby nie dopuścić do awarii aplikacji w przypadku niepowodzenia wczytywania multimediów na urządzeniu przesyłającym (#708).
- Ponownie przeprowadź proces tworzenia obiektu
Wersja 1.2.0
15 listopada 2023 r.
- Wspólna biblioteka:
- Dodaj parametr
@Nullable Throwable
do metod w interfejsieLog.Logger
. Parametrmessage
w tych metodach nie zawiera już żadnych informacji o elementachThrowable
przekazywanych do metodLog.{d,i,w,e}()
, więc w razie potrzeby implementacje będą musiały dołączać te informacje ręcznie (np. z użyciemLogger.appendThrowableString(String, Throwable)
). - Rozwiązanie problemu ze zgodnością z Kotlinem, który polegał na tym, że ogólne parametry typu z wartością null i typy elementów tablicy z wartością null nie są wykrywane jako null. Przykładami są parametry metody
TrackSelectorResult
iSimpleDecoder
(#6792). - Zmień domyślny interfejs i działanie powiadomień w
Util.shouldShowPlayButton
, by wyświetlać przycisk odtwarzania, gdy odtwarzanie jest tymczasowo wyłączone (np. z powodu chwilowej utraty ostrości dźwięku). Starszą wersję można zachować, używając instrukcjiPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
lubMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Uaktualnij
androidx.annotation:annotation-experimental
do1.3.1
, by naprawić problem https://issuetracker.google.com/251172715. - Przenieś aplikację
ExoPlayer.setAudioAttributes
do interfejsuPlayer
.
- Dodaj parametr
- ExoPlayer:
- Rozwiązanie problemów z wyszukiwaniem w strumieniach AC4 spowodowanych nieprawidłowym identyfikacją próbek tylko do dekodowania (#11000).
- Dodaj blokowanie odtwarzania na nieodpowiednich urządzeniach wyjściowych audio (np. we wbudowanym głośniku w urządzeniach z Wear OS), gdy ta funkcja jest włączona w
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Przyczyna wstrzymania odtwarzania zostanie zaktualizowana jakoPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
, jeśli próba odtwarzania zostanie podjęta, gdy odpowiednie wyjścia audio nie będą dostępne lub jeśli wszystkie odpowiednie wyjścia zostaną odłączone podczas odtwarzania. Przyczyna pominięcia zostanie usunięta po podłączeniu odpowiedniego wyjścia. - Dodaj
MediaSource.canUpdateMediaItem
iMediaSource.updateMediaItem
, aby zaakceptowaćMediaItem
aktualizacje po ich utworzeniu wPlayer.replaceMediaItem(s)
. - Zezwalaj na aktualizacje
MediaItem
we wszystkich klasachMediaSource
udostępnianych przez bibliotekę za pomocąPlayer.replaceMediaItem(s)
(#33, #9978). - Zmień nazwę
MimeTypes.TEXT_EXOPLAYER_CUES
naMimeTypes.APPLICATION_MEDIA3_CUES
. - Dodaj do
TrackOutput
plikPngExtractor
, który wysyła i odczytuje cały plik PNG, jako jeden przykładowy plik. - Ulepsz metodę
SequenceableLoader.continueLoading(long)
w interfejsieSequenceableLoader
doSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
zawiera dodatkowe parametry, m.in.playbackSpeed
ilastRebufferRealtimeMs
, oprócz obecnego parametruplaybackPositionUs
. - Ulepsz metodę
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
w interfejsieChunkSource
doChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Dodaj do rejestrowania Common Media Client Data (CMCD) dodatkowe pola: brak buforowania (
bs
), termin (dl
), szybkość odtwarzania (pr
) i uruchomienie (su
) (#8699). - Dodaj Luma i głębię kolorów chroma do wartości
ColorInfo
(#491). - Dodaj kolejne pola do rejestrowania CMCD: żądanie następnego obiektu (
nor
) i żądanie następnego zakresu (nrr
) (#8699). - Dodaj funkcje umożliwiające przesyłanie danych CMCD za pomocą parametrów zapytania (#553).
- Napraw
ConcurrentModificationException
wExperimentalBandwidthMeter
(#612). - Dodaj parametr
MediaPeriodId
do parametruCompositeMediaSource.getMediaTimeForChildMediaTime
. - Obsługują funkcję
ClippingMediaSource
(i inne źródła z przesunięciem przedziału czasu i okresu) w elemencieConcatenatingMediaSource2
(#11226). - Zmień
BaseRenderer.onStreamChanged()
, aby otrzymywał też argumentMediaPeriodId
.
- Transformer:
- Analizuj dane EXIF o obrotach pod kątem zdjęć wejściowych.
- Usuń typ adnotacji
TransformationRequest.HdrMode
i powiązane z nim stałe. Użyj zamiast niego parametruComposition.HdrMode
i powiązanych z nim stałych. - Aby rozwiązać problemy z rotacją, uprość atrybut
OverlaySettings
. - Zmieniono parametry
frameRate
idurationUs
w przypadkuSampleConsumer.queueInputBitmap
naTimestampIterator
.
- Wybór ścieżki:
- Dodaj element
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
, aby jednoznacznie zezwolić na nie płynną adaptację lub go zabronić. Domyślnie ustawiona jest wartośćtrue
.
- Dodaj element
- Moduły wyodrębniania:
- MPEG-TS: upewnij się, że ostatnia klatka jest renderowana, przekazując ostatnią jednostkę dostępu do strumienia do kolejki próbki (#7909).
- Popraw literówkę przy określaniu
rotationDegrees
. ZmienionoprojectionPosePitch
naprojectionPoseRoll
(#461). - Odejmij założenie, że instancje
Extractor
można zbadać bezpośrednio za pomocą metodyinstanceof
. Jeśli chcesz mieć dostęp w czasie działania do szczegółów implementacji obiektuExtractor
, musisz najpierw wywołać metodęExtractor.getUnderlyingInstance
. - Dodaj
BmpExtractor
. - Dodaj
WebpExtractor
. - Dodaj
HeifExtractor
. - Dodaj obsługę klasycznej wersji QuickTime do pliku
Mp4Extractor
.
- Dźwięk:
- Dodaj obsługę 24-/32-bitowego typu big-endian PCM w formatach MP4 i Matroska oraz analizuj kodowanie PCM dla
lpcm
w formacie MP4. - Dodano obsługę wyodrębniania dźwięku z Vorbis w formacie MP4.
- Dodaj atrybut
AudioSink.getFormatOffloadSupport(Format)
, który pobiera poziom odciążenia, który umożliwia ujście dla formatu za pomocąDefaultAudioOffloadSupportProvider
. Zwraca nowyAudioOffloadSupport
, który zawieraisFormatSupported
,isGaplessSupported
iisSpeedChangeSupported
. - Dodaj
AudioSink.setOffloadMode()
, za pomocą którego skonfigurowana jest konfiguracja odciążania w ujściem audio. Wartość domyślna toAudioSink.OFFLOAD_MODE_DISABLED
. - Odciążanie można włączyć za pomocą funkcji
setAudioOffloadPreference
w narzędziuTrackSelectionParameters
. Jeśli ustawienie jest włączone, urządzenie będzie obsługiwać odrzucanie formatu, a wybrana ścieżka to pojedyncza ścieżka dźwiękowa. - Jeśli
audioOffloadModePreference
ma wartośćAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
wybierze tylko ścieżkę audio i tylko wtedy, gdy jej format jest obsługiwany w przenoszeniu. Jeśli nie obsługujemy żadnej ścieżki audio, nie zostanie wybrana żadna ścieżka audio. - Wyłączenie obsługi braku przerw w odtwarzaniu na poziomie 33 przed interfejsem API 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ść nieoznaczoną jako
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Dodano obsługę metadanych Opus bez luk w odtwarzaniu.
- Zezwalaj na przywracanie mechanizmu renderowania przez wyłączenie przeciążenia w przypadku niepowodzenia przy pierwszym zapisie (#627).
- W przypadku odtwarzania z wyłączonym dźwiękiem włącz domyślnie harmonogram odciążania.
- Usuń
ExoPlayer.experimentalSetOffloadSchedulingEnabled
iAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - Zmieniono nazwę
onExperimentalSleepingForOffloadChanged
naonSleepingForOffloadChanged
, aonExperimentalOffloadedPlayback
naonOffloadedPlayback
. - Przenieś interfejsy i definicje związane z trybem odciążania dźwięku
TrackSelectionParameters
do wewnętrznej klasyAudioOffloadPreferences
. - Dodaj wywołania zwrotne (
onAudioTrackInitialized
ionAudioTrackReleased
) do metodAnalyticsListener
,AudioRendererEventListener
iAudioSink.Listener
. - Rozwiązano problem z niedostatecznym przepływem danych w buforze audio DTS Express (#650).
- Naprawa błędu, który powodował, że kontrola możliwości E-AC3-JOC powoduje błąd
IllegalArgumentException
(#677).
- Dodaj obsługę 24-/32-bitowego typu big-endian PCM w formatach MP4 i Matroska oraz analizuj kodowanie PCM dla
- Film:
- Zezwól przeglądarce
MediaCodecVideoRenderer
na używanie niestandardowego elementuVideoFrameProcessor.Factory
. - Naprawa błędu polegającego na tym, że nie można było wyrenderować pierwszej klatki, gdy strumień audio rozpoczyna się od ujemnych sygnatur czasowych (#291).
- Zezwól przeglądarce
- Tekst:
- Usuń
ExoplayerCuesDecoder
. Ścieżki tekstowe z atrybutemsampleMimeType = application/x-media3-cues
są teraz obsługiwane bezpośrednio przez usługęTextRenderer
bez konieczności użycia instancjiSubtitleDecoder
.
- Usuń
- Metadane:
- Funkcja
MetadataDecoder.decode
nie będzie już wywoływana w przypadku przykładów „tylko do dekodowania”, ponieważ implementacja i tak musi zwracać wartość null.
- Funkcja
- Efekt:
- Dodaj dane wejściowe bitmapy
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
według sygnatury czasowej. - Zmień
VideoFrameProcessor.registerInputStream()
na nieblokujący. Aplikacje muszą implementowaćVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Zmieniono parametry
frameRate
idurationUs
w przypadkuVideoFrameProcessor.queueInputBitmap
naTimestampIterator
.
- Dodaj dane wejściowe bitmapy
- Rozszerzenie IMA:
- Poprawka błędu, który powodował, że transmisja na żywo DASH z wieloma przedziałami czasu, która nie jest pierwszym elementem playlisty, może zgłaszać wyjątek (#571).
- Zwolnij StreamManagera, zanim zadzwonisz do:
AdsLoader.destroy()
- Uaktualnij pakiet IMA SDK do wersji 3.31.0.
- Sesja:
- Ustaw działanie usługi powiadomień na pierwszym planie na
FOREGROUND_SERVICE_IMMEDIATE
w:DefaultMediaNotificationProvider
(#167). - Używaj tylko interfejsu
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
powyżej interfejsu API 31, aby uniknąć problemów z wycofanym interfejsem API na urządzeniach Samsung (nr 167). - Używaj kontrolera powiadomień o multimediach jako serwera proxy, aby ustawiać dostępne polecenia i niestandardowy układ służący do wypełniania powiadomienia i sesji na platformie.
- Konwertuj zdarzenia przycisku multimediów odbierane przez usługę
MediaSessionService.onStartCommand()
w Media3, zamiast przekierowywać je do sesji na platformie i z powrotem do Media3. Dzięki temu element wywołujący jest zawsze kontrolerem powiadomień multimedialnych, a aplikacje mogą łatwo rozpoznawać wywołania pochodzące z powiadomień w taki sam sposób na wszystkich obsługiwanych poziomach API. - Napraw błąd, który sprawia, że interfejs
MediaController.getCurrentPosition()
nie jest awansowany po połączeniu ze starszą wersją systemuMediaSessionCompat
. - Dla wygody dodaj:
MediaLibrarySession.getSubscribedControllers(mediaId)
. - Zastąp
MediaLibrarySession.Callback.onSubscribe()
, aby potwierdzić dostępność identyfikatora nadrzędnego, który subskrybuje kontroler. Jeśli subskrypcja się powiedzie, subskrypcja zostanie zaakceptowana inotifyChildrenChanged()
zostanie natychmiast wywołana w celu przekazania informacji do przeglądarki (#561). - Dodaj moduł demonstracyjny sesji dla systemu operacyjnego Automotive i włącz demonstrację sesji w Androidzie Auto.
- Nie ustawiaj kolejki sesji platformy, gdy kontroler powiadomień o multimediach nie ma dostępu do
COMMAND_GET_TIMELINE
. Gdy Android Auto jako kontroler klienta odczytuje dane z sesji platformy, przyciskqueue
w interfejsie Androida Auto nie jest wyświetlany (nr 339). - Zamiast
SimpleBitmapLoader
używaj domyślnie polaDataSourceBitmapLoader
(#271, #327). - Dodaj
MediaSession.Callback.onMediaButtonEvent(Intent)
, który pozwoli aplikacjom na zastępowanie domyślnej obsługi zdarzeń przycisku multimediów.
- Ustaw działanie usługi powiadomień na pierwszym planie na
- Interfejs:
- Dodaj implementację
Player.Listener
na urządzeniach z Wear OS, które obsługują blokowanie odtwarzania z powoduPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
.W tym celu uruchom 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 konfigurowanym czasie oczekiwania (domyślnie wynosi 5 minut).
- Dodaj implementację
- Pobrane pliki:
- Zadeklaruj typ usługi na pierwszym planie typu „synchronizacja danych” na potrzeby
DownloadService
, aby zapewnić zgodność z Androidem 14. Podczas korzystania z tej usługi aplikacja musi też dodaćdataSync
jakoforegroundServiceType
w pliku manifestu oraz 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, podając odstęp obliczony na podstawie czasu rozpoczęcia ostatniego wczytywania, a nie czasu ostatniego wczytywania (#663).
- Rozszerzenie DASH:
- Zezwalaj na używanie wielu takich samych identyfikatorów DASH w adresie URL szablonu segmentu.
- Dodaj eksperymentalną obsługę analizy napisów podczas wyodrębniania. Lepsza obsługa scalania nakładających się napisów, w tym rozwiązanie migotania podczas przechodzenia między segmentami napisów. Aby to zrobić, użyj parametru
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Rozszerzenie RTSP:
- Napraw warunek wyścigu, który może powodować występowanie błędu
IndexOutOfBoundsException
przy powrocie do TCP lub zawieszanie odtwarzania w niektórych sytuacjach. - Sprawdź stan w konfiguracji RTSP po zwróceniu stanu wczytywania
RtspMediaPeriod
(#577). - Ignoruj niestandardowe metody żądań Rtsp w nagłówku publicznym odpowiedzi w opcjach (#613).
- Używaj wartości limitu czasu na konfigurację protokołu RTSP w przedziale czasu wysyłania żądań dotyczących opcji utrzymywania aktywności RTSP (#662).
- Napraw warunek wyścigu, który może powodować występowanie błędu
- Rozszerzenia dekodera (FFmpeg, VP9, AV1, MIDI itp.):
- Opublikuj moduł dekodera MIDI, który obsługuje odtwarzanie standardowych plików MIDI przy użyciu biblioteki Jsyn do syntezy dźwięku.
- Dodaj
DecoderOutputBuffer.shouldBeSkipped
, aby bezpośrednio oznaczyć bufory danych wyjściowych, których nie trzeba prezentować. Jest to preferowane rozwiązanie do zasobówC.BUFFER_FLAG_DECODE_ONLY
, które zostaną wycofane. - Dodaj
Decoder.setOutputStartTimeUs
iSimpleDecoder.isAtLeastOutputStartTimeUs
, aby umożliwić dekoderom pomijanie próbek tylko do dekodowania przed czasem rozpoczęcia. Używaj go zamiast właściwościBuffer.isDecodeOnly
, które zostaną wycofane. - Naprawiono błąd publikowania artefaktu dekodera MIDI w repozytorium Maven. Nazwa artefaktu to
media3-exoplayer-midi
(#734).
- Rozszerzenie BeyondCorp:
- Napraw błąd, który powodował, że wyłączenie platformy mogło spowodować pojawienie się błędu
ArithmeticException
w kodzie Leanback (#617).
- Napraw błąd, który powodował, że wyłączenie platformy mogło spowodować pojawienie się błędu
- Narzędzia testowe:
- Zadbaj o zgodność
TestExoPlayerBuilder
iFakeClock
z testami interfejsu Espresso i testami interfejsu Compose. Naprawiliśmy błąd polegający na tym, że odtwarzanie przesuwa się niedeterminalnie podczas interakcji z widokiem Espresso lub Compose.
- Zadbaj o zgodność
- Usuń wycofane symbole:
- Usuń
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
iTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UżyjComposition.Builder.setHdrMode(int)
i przekażComposition
zamiast tego doTransformer.start(Composition, String)
. - Usuń wycofaną metodę
DownloadNotificationHelper.buildProgressNotification
. Użyj niewycofywanej metody, która przyjmuje parametrnotMetRequirements
.
- Usuń
Wersja 1.2.0-rc01
1 listopada 2023 roku
Używaj wersji stabilnej 1.2.0.
Wersja 1.2.0-beta01
19 października 2023 r.
Używaj wersji stabilnej 1.2.0.
Wersja 1.2.0-alfa02
29 września 2023 r.
Używaj wersji stabilnej 1.2.0.
Wersja 1.2.0-alfa01
17 sierpnia 2023 r.
Używaj 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 elemencie
PlaybackStatsListener
, który powodował, że po wyczyszczeniu playlisty tworzone są fałszywePlaybackStats
. - Dodaj do rejestrowania Common Media Client Data (CMCD) dodatkowe pola: format strumieniowania (sf), typ strumienia (st), wersja (v), górny szybkość transmisji bitów (tb), czas trwania obiektu (d), zmierzoną przepustowość (mtp) i typ obiektu (#8699).
- Naprawiono błąd w elemencie
- Dźwięk:
- Poprawiono błąd, który powodował, że usługa
Player.getState()
nigdy nie była uaktualniana doSTATE_ENDED
podczas odtwarzania bardzo krótkich plików (#538).
- Poprawiono błąd, który powodował, że usługa
- Obciążenie dźwiękiem:
- Dołącz strony nagłówka identyfikatora Ogg na początku i nagłówki komentarzy do strumienia bitów, aby zmniejszyć obciążenie odtwarzania Opus zgodnie ze standardem RFC 7845.
- Film:
- H.265/HEVC: naprawiono analizowanie krótko- i długoterminowych informacji referencyjnych dotyczących obrazów w SPS.
- Tekst:
- CEA-608: zmień zasady obcinania wskazówek tak, by uwzględniały tylko widoczny tekst. Dotychczasowe wcięcie i przesunięcie tabulatora były uwzględniane przy ograniczaniu długości wstawienia do 32 znaków (co było technicznie poprawne w specyfikacji) (#11019).
- Rozszerzenie IMA:
- Uaktualnij pakiet IMA SDK do wersji 3.30.3.
- Sesja:
- Dodaj układ niestandardowy do stanu kontrolera i udostępnij obiekt pobierający, który zapewnia do niego dostęp. W przypadku zmiany układu niestandardowego wywoływana jest właściwość
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ąAcceptedResultBuilder
, aby mieć pewność, że po zakończeniu połączenia ten układ będzie dostępny dla kontrolera. - Naprawiono przypadki, w których
MediaLibraryServiceLegacyStub
wysyłał błąd do interfejsuResult
, który nie obsługiwał tej czynności, co spowodowało błądUnsupportedOperationException
(78). - Rozwiąż problem ze sposobem, w jaki
PlayerWrapper
tworzyVolumeProviderCompat
, wskazując typvolumeControlType
za pomocą zarówno starszych poleceń (COMMAND_ADJUST_DEVICE_VOLUME
iCOMMAND_SET_DEVICE_VOLUME
), jak i nowych poleceń (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
iCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Dodaj układ niestandardowy do stanu kontrolera i udostępnij obiekt pobierający, który zapewnia do niego dostęp. W przypadku zmiany układu niestandardowego wywoływana jest właściwość
Wersja 1.1.0
5 lipca 2023 r.
- Wspólna biblioteka:
- Dodaj przyczynę pominięć w przypadku nieodpowiedniej trasy audio i odtwarzaj w przypadku gotowej zmiany jako przyczyna zbyt długiego wstrzymania odtwarzania. (#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 przeciążone metody, które pozwalają użytkownikom określać flagi głośności:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Dodaj element
Builder
do elementuDeviceInfo
i wycofaj istniejący konstruktor. - Dodaj
DeviceInfo.routingControllerId
, aby określić identyfikator kontrolera routingu na potrzeby odtwarzania zdalnego. - Dodaj
Player.replaceMediaItem(s)
jako skrót do dodawania i usuwania elementów na tej samej pozycji (#8046).
- ExoPlayer:
- Zezwól ExoPlayer na sterowanie metodami głośności urządzenia tylko po uzyskaniu wyraźnej zgody.
ExoPlayer.Builder.setDeviceVolumeControlEnabled
umożliwia 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 pozwoli filtrować dostępne typy ścieżek z tabeliMediaSource
. - Dodano obsługę uwzględniania danych klienta Common Media Client Data (CMCD) w żądaniach wychodzących adaptacyjnych formatów strumieniowania DASH, HLS i SmoothStream. Te pola
br
,bl
,cid
,rtp
isid
zostały uwzględnione (#8699). Struktura interfejsów API i metody API:- 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ć zarejestrowane klucze. - Zastąp
CmcdConfiguration.RequestConfig.getCustomData()
, aby włączyć logowanie niestandardowych kluczy.
- Logowanie CMCD jest domyślnie wyłączone. Aby je włączyć, użyj
- Dodaj do pliku manifestu głównej wersji demonstracyjnej dodatkowe działanie, aby ułatwić uruchamianie aplikacji demonstracyjnej z użyciem niestandardowego pliku
*.exolist.json
(#439). - Dodaj
ExoPlayer.setVideoEffects()
za użycieEffect
podczas odtwarzania filmu. - Zaktualizuj
SampleQueue
, aby przechowywaćsourceId
jakolong
, a nieint
. Spowoduje to zmianę podpisów metod publicznychSampleQueue.sourceId
iSampleQueue.peekSourceId
. - Dodaj do metod
LoadControl
shouldStartPlayback
ionTracksSelected
parametry, które pozwolą powiązać te metody z odpowiednimi właściwościamiMediaPeriod
. - Zmień podpis obiektu
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
, dodając parametr osi czasu zawierający okresy z identyfikatorami UID używanymi jako klucze na mapie. Jest to wymagane, aby uniknąć problemów z równoczesnością transmisji na żywo obejmujących kilka okresów. - Wycofaj
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
iBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. Zamiast tego można wywołać wariant metod bez parametrumediaTimeOffsetUs
. Pamiętaj, że nawet w przypadku wycofanych wersji przesunięcie nie będzie już dodawane do wartościstartTimeUs
iendTimeUs
obiektówMediaLoadData
wysyłanych przez dyspozytora. - Zmień nazwę
ExoTrackSelection.blacklist
naexcludeTrack
iisBlacklisted
naisTrackExcluded
. - Rozwiąż problem z niespójnością działania funkcji
ExoPlayer.setMediaItem(s)
iaddMediaItem(s)
w przypadku wywołania pustej playlisty.
- Zezwól ExoPlayer na sterowanie metodami głośności urządzenia tylko po uzyskaniu wyraźnej zgody.
- Transformer:
- Usuń
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Zamiast nich użyjExoPlayerAssetLoader.Factory(MediaSource.Factory)
iTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Usuń
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Naprawa błędu, który uniemożliwiał transformację (co prowadziło do przekroczenia limitu czasu miksera), jeśli sygnalizowany był koniec strumienia wideo w momencie, gdy klatka wejściowa oczekiwała na przetworzenie.
- Aby zwiększyć obsługę, wysyłaj zapytania o kodeki za pomocą
MediaCodecList
zamiast korzystać z narzędzifindDecoder/EncoderForFormat
. - Usuń konfigurację klatki B z
DefaultEncoderFactory
, ponieważ nie działa na niektórych urządzeniach.
- Usuń
- Wybór ścieżki:
- Dodaj element
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, który jest domyślnie wyłączony. Gdy ta opcja jest włączona,DefaultTrackSelector
aktywuje nowy wybór ścieżki w przypadku zmiany możliwości mechanizmu renderowania.
- Dodaj element
- Moduły wyodrębniania:
- Dźwięk:
- Naprawa błędu, który powodował, że niektóre odtworzenia kończyły się niepowodzeniem, gdy włączone jest tunelowanie, a plik
AudioProcessors
jest aktywny (np. w przypadku przycinania bez przerw (#10847). - Herbaty Opus w pakietach Ogg w ramach odtwarzania bezpośredniego (przeciążenia).
- Dzięki harmonogramowi przeciążenia możesz oszacować bieżącą pozycję podczas snu.
- Dodaj
Renderer.release()
iAudioSink.release()
, aby zwolnić zasoby na koniec cyklu życia gracza. - Słuchaj zmian w funkcjach audio w aplikacji
DefaultAudioSink
. Dodaj w konstruktorze elementuDefaultAudioSink
wymagany parametrcontext
, za pomocą któregoDefaultAudioSink
zarejestruje się jako odbiornikAudioCapabilitiesReceiver
i zaktualizuje swoją właściwośćaudioCapabilities
, gdy pojawi się informacja o zmianie możliwości. - Promuj zmiany możliwości audio za pomocą nowego zdarzenia
onAudioCapabilitiesChanged
w interfejsieAudioSink.Listener
i nowego interfejsuRendererCapabilities.Listener
, który uruchamia zdarzeniaonRendererCapabilitiesChanged
. - Dodaj
ChannelMixingAudioProcessor
, aby zastosować skalowanie/miksowanie do kanałów audio. - Dodaj nową wartość int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
doDecoderDiscardReasons
, aby odrzucić dekoder dźwięku, gdy po zmianie możliwości audio możliwe jest korzystanie z trybu omijania. - Dodano obsługę odtwarzania bezpośredniego w przypadku DTS Express i DTS:X (#335).
- Naprawa błędu, który powodował, że niektóre odtworzenia kończyły się niepowodzeniem, gdy włączone jest tunelowanie, a plik
- Film:
- Ustaw w
MediaCodecVideoRenderer
raportowanieVideoSize
o szerokości i wysokości 0, gdy mechanizm renderowania jest wyłączony. Po zmianie elementuPlayer.getVideoSize()
parametrPlayer.Listener.onVideoSizeChanged
jest odpowiednio wywoływany. Po tej zmianie rozmiar filmu w systemie ExoPlayer (MediaCodecVideoRenderer
) będzie miał szerokość i wysokość 0, jeśli systemPlayer.getCurrentTracks
nie obsługuje wideo lub rozmiar obsługiwanej ścieżki wideo nie został jeszcze określony.
- Ustaw w
- DRM:
- Ogranicz widoczność kilku metod używanych tylko do użytku wewnętrznego w
DefaultDrmSession
, które nie powinny być wywoływane spoza pakietu DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Ogranicz widoczność kilku metod używanych tylko do użytku wewnętrznego w
- Muxer:
- Dodaj nową bibliotekę Muxer, której można używać do tworzenia pliku kontenera MP4.
- Rozszerzenie IMA:
- Włącz transmisje DASH na żywo z wielu okresów na potrzeby DAI. Pamiętaj, że obecna implementacja nie obsługuje jeszcze przewijania w transmisjach na żywo (#10912).
- Popraw błąd polegający na wstawieniu w transmisjach na żywo nowej grupy reklam, ponieważ obliczona pozycja treści na kolejnych osiach czasu nieco się różni.
- 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ć w aplikacjach implementowanie wznawiania odtwarzania za pomocą zdarzeń przycisku multimediów wysyłanych np. przez zestaw słuchawkowy Bluetooth (#167). - Dodaj domyślną implementację do elementu
MediaSession.Callback.onAddMediaItems
, aby umożliwić przekazywanie żądanej wartościMediaItems
do elementuPlayer
, jeśli zawiera on tagLocalConfiguration
(np. identyfikator URI) (#282). - Domyślnie w Androidzie 12 i starszych wersjach z Androidem 12 i starszymi przyciskami poleceń „przewiń do poprzedniego” i „przewiń do następnego” w kompaktowym widoku powiadomień o multimediach są one domyślnie dodawane.
- Dodaj domyślną implementację do elementu
MediaSession.Callback.onAddMediaItems
, aby umożliwić przekazywanie żądanej wartościMediaItems
do elementuPlayer
, jeśli zawiera on tagLocalConfiguration
(np. identyfikator URI) (#282). - Domyślnie w Androidzie 12 i starszych wersjach z Androidem 12 i starszymi przyciskami poleceń „przewiń do poprzedniego” i „przewiń do następnego” w kompaktowym widoku powiadomień o multimediach są one domyślnie dodawane.
- Dodaj metodę pomocniczą
- Interfejs:
- Dodaj metody używane
shouldShowPlayButton
ihandlePlayPauseButtonAction
, aby pisać niestandardowe elementy interfejsu za pomocą przycisku odtwarzania/wstrzymywania.
- Dodaj metody używane
- Rozszerzenie RTSP:
- Rozszerzenie DASH:
- Usuń przesunięcie czasu odtwarzania multimediów z
MediaLoadData.startTimeMs
iMediaLoadData.endTimeMs
w przypadku wielookresowych transmisji DASH. - Naprawiliśmy błąd, który powodował, że ponowne przygotowywanie źródła multimediów Dashi w internecie z wieloma przedziałami czasu spowodowało wygenerowanie parametru
IndexOutOfBoundsException
(#10838).
- Usuń przesunięcie czasu odtwarzania multimediów z
- Rozszerzenie HLS:
- Dodaj
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
, aby ustawić czas oczekiwania wątku wczytywania na zainicjowanieTimestampAdjuster
. Jeśli inicjowanie nie zakończy się przed upływem limitu czasu oczekiwania, zostanie zgłoszonyPlaybackException
, aby uniknąć nieskończonego wstrzymania odtwarzania. Limit czasu jest domyślnie ustawiony na zero (#323).
- Dodaj
- Narzędzia testowe:
- Sprawdź niewrażliwość wielkości liter w schemacie URI w pliku
DataSourceContractTest
.
- Sprawdź niewrażliwość wielkości liter w schemacie URI w pliku
- Usuń wycofane symbole:
- Usuń konstruktory
DefaultAudioSink
, użyj zamiast tego elementuDefaultAudioSink.Builder
. - Usuń typ
HlsMasterPlaylist
, zamiast tego użyj elementuHlsMultivariantPlaylist
. - Usuń
Player.stop(boolean)
. Użyj zamiast niejPlayer.stop()
iPlayer.clearMediaItems()
(jeślireset
totrue
). - Usuń 2 wycofane konstruktory
SimpleCache
. Użyj niewycofanego konstruktora, który zamiast tego używa konstruktoraDatabaseProvider
, aby zwiększyć wydajność. - Usuń konstruktor
DefaultBandwidthMeter
, zamiast tego użyjDefaultBandwidthMeter.Builder
. - Usuń konstruktory
DefaultDrmSessionManager
, zamiast tego użyjDefaultDrmSessionManager.Builder
. - Usuń 2 wycofane konstruktory
HttpDataSource.InvalidResponseCodeException
. Użyj niewycofanego konstruktora, który akceptuje dodatkowe pola(cause
,responseBody
), aby usprawnić logowanie błędów. - Usuń zasady
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
iDownloadHelper.forSmoothStreaming
, a zamiast nich użyj elementuDownloadHelper.forMediaItem
. - Usuń wycofany konstruktor
DownloadService
, użyj niewycofanego konstruktora, który zawiera opcję podawania parametruchannelDescriptionResourceId
. - Usuń wycofane stałe ciągi znaków dla zestawów znaków (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
iUTF16LE_NAME
). Użyj zamiast nich Kotlin Charsets z pakietukotlin.text
,java.nio.charset.StandardCharsets
lubcom.google.common.base.Charsets
. - Usuń wycofany konstruktor
WorkManagerScheduler
. Użyj niewycofanego konstruktora, który zawiera opcję podania parametruContext
. - Usuń wycofane metody
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
icreateSampleFormat
, które były używane do utworzenia instancji klasyFormat
. Do tworzenia instancjiFormat
zamiast tego użyj poleceniaFormat.Builder
. - Usuń wycofane metody
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
icopyWithVideoSize
. Użyj zamiast tego metodFormat.buildUpon()
i setter. - Usuń wycofaną zasadę
ExoPlayer.retry()
. Zamiast niej użyj parametruprepare()
. - Usuń wycofany konstruktor
DefaultTrackSelector
z zerowym argumentem, a zamiast niego użyjDefaultTrackSelector(Context)
. - Usuń wycofany konstruktor
OfflineLicenseHelper
, użyj zamiast niegoOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Usuń wycofany konstruktor
DownloadManager
. Użyj konstruktora, który przyjmujeExecutor
. - Usuń wycofane konstruktory
Cue
. Zamiast nich użyjCue.Builder
. - Usuń wycofany konstruktor
OfflineLicenseHelper
, użyj zamiast niegoOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Usuń 4 wycofane metody
AnalyticsListener
:onDecoderEnabled
użyj zamiast niegoonAudioEnabled
lubonVideoEnabled
.onDecoderInitialized
, użyj zamiast niegoonAudioDecoderInitialized
lubonVideoDecoderInitialized
.onDecoderInputFormatChanged
, użyj zamiast niegoonAudioInputFormatChanged
lubonVideoInputFormatChanged
.onDecoderDisabled
użyj zamiast niegoonAudioDisabled
lubonVideoDisabled
.
- Usuń wycofane funkcje
Player.Listener.onSeekProcessed
iAnalyticsListener.onSeekProcessed
. Zamiast nich użyj właściwościonPositionDiscontinuity
z parametremDISCONTINUITY_REASON_SEEK
. - Usuń regułę
ExoPlayer.setHandleWakeLock(boolean)
, użyj zamiast niej elementusetWakeMode(int)
. - Usuń wycofywaną właściwość
DefaultLoadControl.Builder.createDefaultLoadControl()
, użyj w zamian parametrubuild()
. - Usuń wycofaną zasadę
MediaItem.PlaybackProperties
. Zamiast niej użyj parametruMediaItem.LocalConfiguration
. Wycofane poleMediaItem.playbackProperties
jest teraz typuMediaItem.LocalConfiguration
.
- Usuń konstruktory
Wersja 1.1.0-rc01
21 czerwca 2023 r.
Używaj wersji stabilnej 1.1.0.
Wersja 1.1.0-beta01
7 czerwca 2023 r.
Używaj wersji stabilnej 1.1.0.
Wersja 1.1.0-alfa01
10 maja 2023 r.
Używaj wersji stabilnej 1.1.0.
Wersja 1.0.0
Wersja 1.0.2
18 maja 2023 r.
Aplikacja androidx.media3:media3-*:1.0.2
została zwolniona.
Wersja 1.0.2 zawiera te zatwierdzenia.
Ta wersja jest powiązana z wersją ExoPlayer 2.18.7.
Ta wersja zawiera następujące zmiany od wersji 1.0.1:
- Biblioteka główna:
- Dodaj atrybut
Buffer.isLastSample()
, który wskazuje, czy elementBuffer
zawiera flagęC.BUFFER_FLAG_LAST_SAMPLE
. - Rozwiązanie problemu polegającego na tym, że ostatnia klatka mogła nie zostać wyrenderowana, jeśli ostatnia próbka z ramkami została usunięta z kolejki bez odczytania próbki z końca strumienia. (#11079).
- Dodaj atrybut
- Moduły wyodrębniania:
- Naprawa analizowania składni H.265 SPS w plikach MPEG-TS, ponownie wykorzystując logikę analizy używaną 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ą systemuMediaSessionCompat
, która aktualizuje swoje działania. - Popraw błąd, który uniemożliwiał usłudze
MediaLibraryService
zwracanie wartości null w przypadku wywołania interfejsu systemowegoCallback.onGetLibraryRoot
z opisemparams.isRecent == true
w interfejsie API 30 (#355). - Napraw wyciek pamięci w systemie
MediaSessionService
lubMediaLibraryService
(#346). - Napraw błąd, w wyniku którego połączenie
Timeline
i aktualizacji pozycji w funkcjiMediaSession
mogło powodować, żeMediaController
zwrócił(a)IllegalStateException
.
- Rozwiązanie problemu polegającego na tym, że
Wersja 1.0.1
18 kwietnia 2023 r.
Aplikacja 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 główna:
- Przy przewijaniu do pozycji domyślnej resetujesz zastąpienie docelowej transmisji na żywo (#11051).
- Naprawiono błąd polegający na tym, że puste strumienie próbek w multimediach mogły powodować zatrzymanie odtwarzania.
- Sesja:
- Poprawiono błąd, który powodował, że wiele identycznych elementów kolejki opublikowanych przez starszą wersję
MediaSessionCompat
spowodowało wyjątek w reguleMediaController
(#290). - Dodaj brakujące przekierowanie
MediaSession.broadcastCustomCommand
do starszej wersjiMediaControllerCompat.Callback.onSessionEvent
(#293). - Naprawiono błąd, który powodował, że wywołanie metody
MediaSession.setPlayer
nie aktualizuje dostępnych poleceń. - Rozwiązanie problemu polegającego na tym, że
TrackSelectionOverride
instancje wysłane z elementuMediaController
są ignorowane, jeśli odwołują się do grupy z identyfikatoremFormat.metadata
(#296). - Rozwiąż problem, który powodował, że aby uzyskać dostęp do metadanych za pomocą starszej wersji
MediaSessionCompat
, musisz mieć dostęp doPlayer.COMMAND_GET_CURRENT_MEDIA_ITEM
. - Rozwiązano problem, który powodował, że wystąpienia
MediaSession
w wątku w tle powodowały awarie, gdy jest używana w zasadzieMediaSessionService
(#318). - Rozwiązaliśmy problem polegający na tym, że odbiornik przycisku multimediów był zadeklarowany przez bibliotekę, ale aplikacja tego nie zadeklarowała (#314).
- Poprawiono błąd, który powodował, że wiele identycznych elementów kolejki opublikowanych przez starszą wersję
- DASH:
- Napraw obsługę pustych osi czasu segmentów (#11014).
- RTSP:
- Spróbuj użyć protokołu TCP, jeśli konfiguracja protokołu RTSP z UDP nie powiedzie się i wystąpi błąd RTSP 461 supportedTransport (#11069).
Wersja 1.0.0
22 marca 2023 r.
Aplikacja androidx.media3:media3-*:1.0.0
została zwolniona.
Wersja 1.0.0 zawiera te zatwierdzenia.
Ta wersja jest powiązana z wersją ExoPlayer 2.18.5.
Nie wprowadzono żadnych zmian od wersji 1.0.0-rc02.
Wersja 1.0.0-rc02
2 marca 2023 r.
Aplikacja 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 główna:
- Pobrane pliki:
- Zadbaj o to, aby maksymalna różnica czasu rozpoczęcia 2 segmentów była możliwa do skonfigurowania w klasach
SegmentDownloader
i podklasach (#248).
- Zadbaj o to, aby maksymalna różnica czasu rozpoczęcia 2 segmentów była możliwa do skonfigurowania w klasach
- Dźwięk:
- Film:
- Zmapuj format HEVC HDR10 na
HEVCProfileMain10HDR10
zamiastHEVCProfileMain10
. - Dodaj obejście problemu z urządzeniem Chromecast z Google TV i Lenovo M10 FHD Plus, które powoduje oznaczenie strumieni AVC 60 kl./s jako nieobsługiwanego (#10898).
- Napraw problemy z wydajnością wyświetlania klatek podczas odtwarzania multimediów z liczbą klatek znacznie większą niż częstotliwość odświeżania ekranu.
- Zmapuj format HEVC HDR10 na
- Obsada:
- Popraw tymczasowy
STATE_IDLE
podczas przechodzenia między elementami multimedialnymi (#245).
- Popraw tymczasowy
- RTSP:
- Przechwytuje wyjątek IllegalArgumentException zgłoszony podczas analizowania nieprawidłowych wiadomości z opisu odpowiedzi RTSP (#10971).
- Sesja:
- Poprawiono błąd, który powodował, że przycisk odtwarzania/wstrzymywania powiadomień nie aktualizował się na podstawie stanu odtwarzacza (#192).
- Rozszerzenie IMA:
- Naprawiliśmy błąd, który uniemożliwiał strumieniowanie z dynamicznym wstawianiem reklam bez reklam, ponieważ pierwsze zdarzenie
LOADED
(i w przypadku pozostałych reklam) nie zostało odebrane.
- Naprawiliśmy błąd, który uniemożliwiał strumieniowanie z dynamicznym wstawianiem reklam bez reklam, ponieważ pierwsze zdarzenie
Wersja 1.0.0-rc01
16 lutego 2023 r.
Aplikacja androidx.media3:media3-*:1.0.0-rc01
została zwolniona.
Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Ta wersja jest powiązana z wersją ExoPlayer 2.18.3.
- Biblioteka główna:
- Zmodyfikuj logikę kolejności dekodera w mechanizmie renderowania, aby zachować preferencje
MediaCodecSelector
, nawet jeśli dekoder zgłosi, że może nie być w stanie odtworzyć multimediów z wydajnością. Na przykład w przypadku selektora domyślnego dekoder sprzętowy z tylko funkcjonalną obsługą będzie preferowany od dekodera programowego, który w pełni obsługuje ten format (#10604). - Dodaj obiekt
ExoPlayer.Builder.setPlaybackLooper
, który ustawi istniejący wątek odtwarzania dla nowej instancji ExoPlayer. - Zezwalaj na wyczyszczenie pomocników menedżera pobierania (#10776).
- Dodaj do
BasePlayer.seekTo
parametr, aby wskazać polecenie używane do przewijania. - Używaj motywu podczas wczytywania elementów rysowalnych w interfejsie API 21 i nowszych (#220).
- Dodawanie elementu
ConcatenatingMediaSource2
, który umożliwia łączenie wielu elementów multimedialnych w jednym oknie (#247).
- Zmodyfikuj logikę kolejności dekodera w mechanizmie renderowania, aby zachować preferencje
- Moduły wyodrębniania:
- Jeśli podczas analizowania atomów Traak w tabeli przykładowej (stbl) brakuje wymaganego opisu (stsd), zamiast elementu
NullPointerException
użyj wywołaniaParserException
. - Prawidłowo pomijaj próbki podczas przechodzenia bezpośrednio do ramki synchronizacji w fMP4 (#10941).
- Jeśli podczas analizowania atomów Traak w tabeli przykładowej (stbl) brakuje wymaganego opisu (stsd), zamiast elementu
- Dźwięk:
- Użyj szybkości transmisji skompresowanego formatu audio do obliczenia minimalnego rozmiaru bufora w przypadku odtwarzania bezpośredniego (przekazywania) w przypadku funkcji
AudioTrack
.
- Użyj szybkości transmisji skompresowanego formatu audio do obliczenia minimalnego rozmiaru bufora w przypadku odtwarzania bezpośredniego (przekazywania) w przypadku funkcji
- Tekst:
- Popraw atrybut
TextRenderer
, przekazując nieprawidłowy indeks (ujemny) doSubtitle.getEventTime
, jeśli plik z napisami nie zawiera żadnych wskazówek. - SubRip: dodaj obsługę plików UTF-16, jeśli zaczynają się od znacznika kolejności bajtów.
- Popraw atrybut
- Metadane:
- Analizuj wiele wartości oddzielonych null z ramek ID3, zgodnie z zasadami ID3 w wersji 2.4.
- Dodaj
MediaMetadata.mediaType
, aby wskazać typ treści lub typ folderu opisany w metadanych. - Dodaj
MediaMetadata.isBrowsable
jako zamiennikMediaMetadata.folderType
. Ten typ folderu zostanie wycofany w następnej wersji.
- DASH:
- Dodaj pełną analizę zestawów do adaptacji obrazów, w tym liczbę kafelków (#3752).
- Interfejs:
- Napraw wycofywaną właściwość
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
, aby mieć pewność, że zmiany dotyczące widoczności są przekazywane do zarejestrowanego detektora (#229). - Popraw kolejność elementów sterujących odtwarzacza środkowego w układzie
PlayerView
w układzie od prawej do lewej (nr 227).
- Napraw wycofywaną właściwość
- Sesja:
- Dodaj abstrakcję
SimpleBasePlayer
, by 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 mediów na platformie (#219). - Dodaj sesję multimediów jako argument
getMediaButtons()
elementuDefaultMediaNotificationProvider
i użyj stałych list, aby zwiększyć przejrzystość (#216). - Dodaj detektor wywołania zwrotnego
onSetMediaItems
, aby zapewnić sposoby modyfikowania i ustawiania listyMediaItem
, początkowego indeksu i pozycji według sesji przed ustawieniem dla odtwarzacza (#156). - Unikaj wykrywania dwukrotnego kliknięcia w przypadku zdarzeń przycisków multimediów innych niż Bluetooth (#233).
- Zwiększ działanie
QueueTimeline
w przypadku podejrzanego stanu starszej sesji (#241).
- Dodaj abstrakcję
- Metadane:
- Analizuj wiele wartości oddzielonych null z ramek ID3, zgodnie z zasadami ID3 w wersji 2.4.
- Dodaj
MediaMetadata.mediaType
, aby wskazać typ treści lub typ folderu opisany w metadanych. - 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:
- Aby uniknąć problemów z podziałem na wątki, usuń odbiornik zdarzenia
ImaServerSideAdInsertionMediaSource
w wątku aplikacji. - Dodaj właściwość
focusSkipButtonWhenAvailable
do elementuImaServerSideAdInsertionMediaSource.AdsLoader.Builder
, aby zażądać zaznaczenia przycisku pominięcia na urządzeniach telewizyjnych i domyślnie ustawić dla niego wartość „true” (prawda). - Dodaj do elementu
ImaServerSideAdInsertionMediaSource.AdsLoader
metodęfocusSkipButton()
, aby automatycznie żądać zaznaczenia przycisku pominięcia. - Uaktualnij pakiet IMA SDK do wersji 3.29.0.
- Aby uniknąć problemów z podziałem na wątki, usuń odbiornik zdarzenia
- Aplikacja w wersji demonstracyjnej:
- Poproś o zgodę na wysyłanie powiadomień o pobieraniu w czasie działania (#10884).
Wersja 1.0.0-beta03
22 listopada 2022 r.
Aplikacja 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 główna:
- Dodaj
ExoPlayer.isTunnelingEnabled
, aby sprawdzić, czy w przypadku obecnie wybranych ścieżek włączone jest tunelowanie (#2518). - Dodaj
WrappingMediaSource
, aby uprościć zawijanie pojedynczych elementówMediaSource
(#7279). - Odrzuć wsteczny bufor, zanim odtwarzanie zatrzyma się z powodu niewystarczającej ilości pamięci.
- Zamknij blok Tracking „doSomeWork”, gdy włączone jest odciążanie.
- Rozwiąż problem ze śledzeniem sesji z szybkim wyszukiwaniem w elemencie
PlaybackStatsListener
(nr 180). - Wyślij brakujące wywołanie zwrotne funkcji
onMediaItemTransition
, gdy dzwonisz pod numerseekToNext
lubseekToPrevious
w przypadku playlisty z jednym elementem (#10667). - Dodaj właściwość
Player.getSurfaceSize
, która zwraca rozmiar powierzchni, na której jest renderowany film. - Naprawiono błąd, który powodował, że usunięcie odbiorników w trakcie publikowania odtwarzacza mogło powodować błąd
IllegalStateException
(#10758).
- Dodaj
- Kompilacja:
- Aby uniknąć błędów kompilacji, wymuś minimalną wartość
compileSdkVersion
(#10684). - Unikaj publikowania bloku, gdy znajduje się w innej kompilacji Gradle.
- Aby uniknąć błędów kompilacji, wymuś minimalną wartość
- Wybór ścieżki:
- Jeśli wyświetlanie nie obsługuje Dolby Vision, wybieraj inne ścieżki. (#8944).
- Pobrane pliki:
- Napraw potencjalną pętlę nieskończoną w elemencie
ProgressiveDownloader
spowodowaną równoczesnym pobieraniem i odtwarzaniem z tym samym tagiemPriorityTaskManager
(#10570). - Natychmiastowe powiadomienie o pobieraniu (#183).
- Ogranicz liczbę usunięć równoległego pobierania do 1, aby uniknąć nadmiernego tworzenia wątków (#10458).
- Napraw potencjalną pętlę nieskończoną w elemencie
- Film:
- Jeśli wyświetlacz nie obsługuje innego dekodera Dolby Vision, wypróbuj alternatywny dekoder. (#9794).
- Dźwięk:
- Użyj zasady
SingleThreadExecutor
do zwolnieniaAudioTrack
instancji, aby uniknąć błędów zabraknięcia pamięci podczas jednoczesnego udostępniania wielu graczy (#10057). - Dodaje
AudioOffloadListener.onExperimentalOffloadedPlayback
dla stanu odciążenia AudioTrack. (#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 8- i 12-kanałowy dźwięk na maski kanałów 7.1 i 7.1.4 zależnie od wszystkich wersji Androida (#10701).
- Użyj zasady
- Metadane:
- W
MetadataRenderer
można teraz skonfigurować renderowanie metadanych, gdy tylko będą dostępne. Utwórz instancję z funkcjąMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
, aby określić, czy mechanizm renderowania będzie wydawał metadane wcześniej, czy synchronizował się z pozycją odtwarzacza.
- W
- DRM:
- Obejście błędu w implementacji ClearKey na Androidzie 13, który zwraca niepusty, ale nieprawidłowy adres URL licencji.
- Naprawiono błąd
setMediaDrmSession failed: session not opened
podczas przełączania między schematami DRM w playliście (np. Widevine na ClearKey).
- Tekst:
- CEA-608: sprawdź, czy polecenia przełączania usługi w polu 2 są obsługiwane prawidłowo (#10666).
- DASH:
- Analizuj
EventStream.presentationTimeOffset
z plików manifestu (#10460).
- Analizuj
- Interfejs:
- Użyj bieżących zastąpień odtwarzacza jako gotowych ustawień w sekcji
TrackSelectionDialogBuilder
(#10429).
- Użyj bieżących zastąpień odtwarzacza jako gotowych ustawień w sekcji
- Sesja:
- Sprawdź, czy polecenia są zawsze wykonywane w prawidłowej kolejności, nawet jeśli niektóre wymagają asynchronicznego rozwiązania problemu (#85).
- Dodaj
DefaultMediaNotificationProvider.Builder
do utworzeniaDefaultMediaNotificationProvider
instancji. Kreator może skonfigurować identyfikator powiadomień, identyfikator kanału powiadomień oraz nazwę kanału powiadomień używaną przez dostawcę. Dodaj też metodęDefaultMediaNotificationProvider.setSmallIcon(int)
, aby ustawić małą ikonę powiadomień. (#104). - Upewnij się, że polecenia wysłane przed
MediaController.release()
nie są odrzucane (#99). SimpleBitmapLoader
może wczytać bitmapę z identyfikatorów URIfile://
(#108).- Napraw asercję, która uniemożliwia usłudze
MediaController
wyszukiwanie reklamy w danym okresie (#122). - Po zakończeniu odtwarzania wskaźnik
MediaSessionService
zatrzymuje się na pierwszym planie i wyświetla się powiadomienie z prośbą o ponowne rozpoczęcie 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 interfejsie API 26 i API 27 (w interfejsach API w wersji 28 i nowszych) plakietka jest automatycznie ukryta (nr 131). - Naprawa błędu, który powodował, że drugie połączenie łączące ze starszą wersją MediaSession z Media3 MediaController powoduje zdarzenie IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Dodaj czas oczekiwania na wczytanie informacji o reklamie, by uwzględnić przypadki, gdy pakiet IMA SDK utknie przy wczytywaniu reklamy (#10510).
- Zapobiegaj pomijaniu reklam w trakcie filmu przy przewijaniu do końca treści (#10685).
- Prawidłowo oblicz czas trwania okna w przypadku transmisji na żywo z reklamami wstawionymi po stronie serwera, np. IMA DAI (#10764).
- Rozszerzenie FFmpeg:
- Dodaj nowe wymagane flagi, aby połączyć biblioteki FFmpeg z pakietem NDK w wersji 23.1.7779620 lub nowszym (#9933).
- Rozszerzenie AV1:
- Zaktualizuj wersję CMake, aby uniknąć niezgodności z najnowszymi wersjami Android Studio (#9933).
- Rozszerzenie Cast:
- Zaimplementuj
getDeviceInfo()
, aby móc rozpoznać parametrCastPlayer
podczas sterowania odtwarzaniem za pomocą przyciskuMediaController
(#142).
- Zaimplementuj
- Transformer:
- Dodaj licznik czasu watchdoga muxer, aby wykrywać, że generowanie próbki wyjściowej jest zbyt wolne.
- Usuń wycofane symbole:
- Usuń
Transformer.Builder.setOutputMimeType(String)
. Ta funkcja została usunięta. Jeśli używany jest domyślny mikser, typem MIME będzie zawsze MP4.
- Usuń
Wersja 1.0.0-beta02
21 lipca 2022 r.
Aplikacja androidx.media3:media3-*:1.0.0-beta02
została zwolniona.
Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Ta wersja jest powiązana z wersją ExoPlayer 2.18.1.
- Biblioteka główna:
- Upewnij się, że zmiana pola
ShuffleOrder
za pomocąExoPlayer.setShuffleOrder
spowoduje wywołanie metodyPlayer.Listener#onTimelineChanged
z parametremreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - W przypadku multimediów progresywnych uwzględnij tylko wybrane ścieżki w pozycji buforowanej (#10361).
- Zezwalaj na niestandardowy rejestrator na potrzeby wszystkich danych wyjściowych dziennika ExoPlayer (#9752).
- Popraw implementację parametru
setDataSourceFactory
w usłudzeDefaultMediaSourceFactory
, która w niektórych przypadkach nie działała (#116).
- Upewnij się, że zmiana pola
- Moduły wyodrębniania:
- DASH:
- Analizuj adres URL licencji ClearKey z plików manifestu (#10246).
- Interfejs:
- Upewnij się, że TalkBack informuje o aktualnie aktywnej opcji prędkości w menu elementów sterujących odtwarzaniem (#10298).
- RTSP:
- Dodaj obsługę pofragmentowanych pakietów VP8 (#110).
- Rozszerzenie BeyondCorp:
- Posłuchaj zmian w elemencie
playWhenReady
w usłudzeLeanbackAdapter
(10420).
- Posłuchaj zmian w elemencie
- Obsada:
Wersja 1.0.0-beta01
16 czerwca 2022 r.
Aplikacja 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 główna:
- Włącz obsługę diagnostyki platformy Androida w
MediaMetricsManager
. ExoPlayer przekazuje na platformę zdarzenia odtwarzania i dane o wydajności. Pomaga to dostarczać informacji o wydajności systemu i debugowaniu na urządzeniu. Te dane mogą też być zbierane 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 dla odtwarzacza ExoPlayer za pomocą parametruExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Napraw błąd, który powoduje zbyt częste resetowanie ścieżek podczas korzystania z funkcji
MergingMediaSource
, np. ładowanie napisów z innego urządzenia i zmianę wybranego w trakcie odtwarzania napisów (#10248). - Przestań wykrywać typ sieci 5G-NSA w interfejsach API 29 i 30. Odtworzenia będą odtwarzane w sieci 4G.
- Nie zezwalaj na przekazywanie instrukcji
null
do interfejsówMediaSource.Factory.setDrmSessionManagerProvider
iMediaSource.Factory.setLoadErrorHandlingPolicy
. W razie potrzeby instancjeDefaultDrmSessionManagerProvider
iDefaultLoadErrorHandlingPolicy
można przekazywać wprost. - Dodaj element
MediaItem.RequestMetadata
, aby wskazać metadane potrzebne do odtwarzania multimediów, gdy dokładny elementLocalConfiguration
nie jest znany. Usuń też tagMediaMetadata.mediaUrl
, ponieważ jest on teraz uwzględniony w źródleRequestMetadata
. - Dodaj
Player.Command.COMMAND_SET_MEDIA_ITEM
, aby umożliwić graczom ustawienie jednego elementu.
- Włącz obsługę diagnostyki platformy Androida w
- Wybór ścieżki:
- Przenieś klasę
TrackSelectionOverrides
naTrackSelectionParameters
i awansujTrackSelectionOverride
do klasy 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 „cofnięcie” nazwy metodyPlayer.Listener.onTracksChanged
, ale z innymi typami parametrów. - Zmień
DefaultTrackSelector.buildUponParameters
iDefaultTrackSelector.Parameters.buildUpon
, aby zwracały wartościDefaultTrackSelector.Parameters.Builder
zamiast wycofanej wersjiDefaultTrackSelector.ParametersBuilder
. - Dodaj wartość
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
, która jest domyślnie włączona. Gdy ta opcja jest włączona,DefaultTrackSelector
preferuje ścieżki audio, których liczba kanałów nie przekracza możliwości wyjściowych urządzenia. Na urządzeniach mobilnychDefaultTrackSelector
będzie preferować dźwięk stereo/mono niż wielokanałowy, chyba że format wielokanałowy może być przestrzenny (Android 12L i nowszy) lub dźwięk przestrzenny Dolby. Dodatkowo na urządzeniach, które obsługują przestrzenność dźwięku,DefaultTrackSelector
będzie sprawdzać zmiany we właściwościach Przestrzenny i w przypadku tych opcji wybierać nową ścieżkę. Ograniczenia te nie dotyczą urządzeń obsługującychtelevision
tryb interfejsu. Preferowany będzie format z największą liczbą kanałów. Aby można było włączyć tę funkcję, instancjaDefaultTrackSelector
musi być skonstruowana przy użyciuContext
.
- Przenieś klasę
- Film:
- Zmień nazwę społeczności
DummySurface
naPlaceholderSurface
. - Dodaj obsługę AV1 do
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Zmień nazwę społeczności
- Dźwięk:
- Użyj dekodera dźwięku LG AC3 do wyświetlania reklam o niestandardowym typie MIME.
- Zmień zwracany typ kodu
AudioAttributes.getAudioAttributesV21()
zandroid.media.AudioAttributes
na nową klasę otokiAudioAttributesV21
, aby zapobiec powolnej weryfikacji ART w interfejsie API < 21. - Zapytanie o platformę (interfejs API 29 lub nowszy) lub przyjmowanie liczby kanałów kodowania audio na potrzeby przekazywania audio, gdy liczba kanałów w formacie audio jest nieskonfigurowana, co ma miejsce w przypadku przygotowywania bez fragmentów HLS (10204).
- Skonfiguruj
AudioTrack
z maską kanałuAudioFormat.CHANNEL_OUT_7POINT1POINT4
, jeśli dekoder odtwarza 12-kanałowy dźwięk PCM (#10322.
- DRM
- Upewnij się, że sesja DRM jest zawsze poprawnie zaktualizowana przy wyszukiwaniu natychmiast po zmianie formatu (10274).
- Tekst:
- Zmień
Player.getCurrentCues()
, aby zwracał wartośćCueGroup
zamiastList<Cue>
. - SSA: obsługuje ustawienie stylu
OutlineColour
, gdyBorderStyle == 3
(tj.OutlineColour
ustawia tło wstawienia) (#8435). - CEA-708: analizowanie danych w wiele bloków usługi i ignorowanie bloków niepowiązanych z wybranym numerem usługi.
- Usuń atrybut
RawCcExtractor
, który był używany tylko do obsługi formatu napisów wewnętrznych Google.
- Zmień
- Moduły wyodrębniania:
- Interfejs:
- Popraw dostarczanie zdarzeń do ustawień
OnClickListener
ustawionych naPlayerView
w tym przypadku w przypadku wartościuseController=false
(#9605). Napraw też dostarczanie zdarzeń doOnLongClickListener
we wszystkich konfiguracjach widoku. - Rozwiązanie problemu: nieprawidłowe traktowanie sekwencji zdarzeń kliknięcia, które wykraczają poza zakres
PlayerView
przedACTION_UP
, jako kliknięcia (#9861). - Rozwiązano problem z ułatwieniami dostępu w usłudze
PlayerView
polegający na tym, że dotknięcie może powodować przełączanie odtwarzania, a nie ukrywanie elementów sterujących (#8627). - Przeredaguj wartości
TrackSelectionView
iTrackSelectionDialogBuilder
, aby działały z interfejsemPlayer
, a nieExoPlayer
. Dzięki temu widoków danych można używać w innych implementacjachPlayer
i usuwać zależność między modułem interfejsu a modułem ExoPlayer. To rewolucyjna zmiana. - Nie pokazuj wymuszonych ścieżek tekstowych w selektorze ścieżek
PlayerView
i pozostaw wybraną odpowiednią ścieżkę tekstu wymuszonego, jeśli wybrana jest opcja „Brak” (#9432).
- Popraw dostarczanie zdarzeń do ustawień
- DASH:
- Przeanalizuj liczbę kanałów z elementów DTS
AudioChannelConfiguration
. Umożliwia to ponowne włączenie przekazywania dźwięku w przypadku strumieni DTS (#10159). - Nie zezwalaj na przekazywanie instrukcji
null
do instancjiDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. InstancjeDefaultCompositeSequenceableLoaderFactory
mogą być przekazywane w sposób jednoznaczny, jeśli jest to konieczne.
- Przeanalizuj liczbę kanałów z elementów DTS
- HLS:
- Jeśli atrybut CODECS playlisty nie zawiera kodeka audio (#10065), użyj go, jeśli chodzi o przygotowanie szczegółowe.
- Nie zezwalaj na przekazywanie instrukcji
null
do interfejsówHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
iHlsMediaSource.Factory.setPlaylistTrackerFactory
. Wystąpienia właściwościDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
lub odwołania do elementuDefaultHlsPlaylistTracker.FACTORY
można przekazywać w sposób jawny, jeśli jest to konieczne.
- Płynne strumieniowanie:
- Nie zezwalaj na przekazywanie instrukcji
null
do instancjiSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Jeśli jest to wymagane, instancjeDefaultCompositeSequenceableLoaderFactory
mogą być przekazywane wprost.
- Nie zezwalaj na przekazywanie instrukcji
- RTSP:
- Dodaj czytnik RTP na potrzeby H263 (#63).
- Dodaj czytnik RTP na potrzeby MPEG4 (#35).
- Dodaj czytnik RTP na potrzeby HEVC (#36).
- Dodaj czytnik RTP na AMR. Obecnie obsługiwane są tylko jednokanałowe, nieprzeplatane strumienie AMR. Złożony ładunek AMR RTP nie jest obsługiwany. (#46)
- Dodaj czytnik RTP na potrzeby VP8 (#47).
- Dodaj czytnik RTP na potrzeby WAV (#56).
- Poprawiono nagłówek podstawowej autoryzacji RTSP. (#9544).
- Przestań sprawdzać obowiązkowe pola SDP, ponieważ ExoPlayer ich nie potrzebuje (#10049).
- Podczas analizowania czasu protokołu RTSP Zgłoszono wyjątek (#10165).
- Dodaj czytnik RTP na potrzeby VP9 (#47).
- Dodaj czytnik RTP dla OPUS (#53).
- Źródła danych:
- Zmień nazwę społeczności
DummyDataSource
naPlaceholderDataSource
. - Obejście problemu z obsługą OkHttp.
- Zmień nazwę społeczności
- Sesja:
- Aby umożliwić asynchroniczne rozpoznawanie żądań, zastąp
MediaSession.MediaItemFiller
wartościąMediaSession.Callback.onAddMediaItems
. - obsługiwać 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ą metodMediaController.setMediaItem
iMediaSession.Callback.onAddMediaItems
. - Przekierowuj starsze wywołania
MediaController
do odtwarzania multimediów doMediaSession.Callback.onAddMediaItems
zamiastonSetMediaUri
. - Aby dostosować powiadomienia, dodaj
MediaNotification.Provider
iDefaultMediaNotificationProvider
. - Aby pobrać obrazy grafiki, dodaj
BitmapLoader
iSimpleBitmapLoader
. - Dodaj
MediaSession.setCustomLayout()
, aby zapewnić wsteczną zgodność ze starszą sesją. - Dodaj
MediaSession.setSessionExtras()
, aby zapewnić spójność funkcji ze starszą sesją. - Zmień nazwę
MediaSession.MediaSessionCallback
naMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
naMediaLibrarySession.Callback
iMediaSession.Builder.setSessionCallback
nasetCallback
. - Popraw NPE w usłudze
MediaControllerImplLegacy
(nr 59). - Aktualizowanie informacji o pozycji sesji na osi czasu(#51).
- Napraw NPE w
MediaControllerImplBase
po zwolnieniu kontrolera (#74).
- Aby umożliwić asynchroniczne rozpoznawanie żądań, zastąp
- Odtwarzanie reklam / IMA:
- Zmniejsz częstotliwość odpytywania reklam z częstotliwości co 100 ms do 200 ms, aby zachować zgodność z rekomendacjami rady Media Rating Council (MRC).
- Rozszerzenie FFmpeg:
- Zaktualizuj wersję CMake do
3.21.0+
, aby uniknąć błędu CMake, który spowodował błąd synchronizacji Gradle w AndroidStudio (#9933).
- Zaktualizuj wersję CMake do
- 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ćExoPlayer.getCurrentTrackGroups
iExoPlayer.getCurrentTrackSelections
, ale te metody są nadal wycofane. - Usuń stałe
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
iDEFAULT_TRACK_SELECTOR_PARAMETERS
. W miarę możliwości używaj polagetDefaultTrackSelectorParameters(Context)
. W innych przypadkach używaj polaDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Usuń konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Użyj w zamian zasadyDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Usuń
Transformer.Builder.setContext
. Zamiast tego wartośćContext
powinna być przekazywana do konstruktoraTransformer.Builder
.
- Usuń
Wersja 1.0.0-alfa03
14 marca 2022 r.
Aplikacja androidx.media3:media3-*:1.0.0-alpha03
została zwolniona.
Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Odpowiada to wersji ExoPlayer 2.17.1.
- Dźwięk:
- Naprawiono błąd podczas sprawdzania funkcji dźwięku Dolby Atmos (E-AC3-JOC) w HLS.
- Moduły wyodrębniania:
- FMP4: rozwiąż problem, który powodował, że metadane próbki emsg były wyświetlane w niewłaściwej kolejności w przypadku strumieni zawierających atomy emsg w wersjach v0 i v1 (#9996).
- Tekst:
- Popraw interakcję elementów
SingleSampleMediaSource.Factory.setTrackId
iMediaItem.SubtitleConfiguration.Builder.setId
, aby nadać priorytet poluSubtitleConfiguration
, a jeśli nie jest ustawiona, użyj wartościFactory
(#10016).
- Popraw interakcję elementów
- Odtwarzanie reklam:
- Naprawianie niedokładności w dźwięku między okresami reklam w transmisjach HLS SSAI na żywo.
Wersja 1.0.0-alfa02
2 marca 2022 r.
Aplikacja androidx.media3:media3-*:1.0.0-alpha02
została zwolniona.
Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Odpowiada to wersji ExoPlayer 2.17.0.
- Biblioteka podstawowa:
- Dodaj chronioną metodę
DefaultRenderersFactory.getCodecAdapterFactory()
, aby podklasyDefaultRenderersFactory
, które zastępująbuildVideoRenderers()
lubbuildAudioRenderers()
, miały dostęp do fabryki adapterów kodeków i przekazywały je doMediaCodecRenderer
utworzonych przez siebie instancji. - Propaguj pola nagłówka ICY
name
igenre
odpowiednio do pólMediaMetadata.station
iMediaMetadata.genre
, aby docierały do aplikacji przezPlayer.Listener.onMediaMetadataChanged()
(#9677). - Usuń puste klucze z
DefaultHttpDataSource#getResponseHeaders
. - Przejdź w tryb uśpienia i spróbuj ponownie, jeśli nie uda się utworzyć instancji
MediaCodec
. Jest to rozwiązanie problemu występującego na niektórych urządzeniach podczas przełączania platformy z bezpiecznego kodeka na inny kodek (#8696). - Dodaj
MediaCodecAdapter.getMetrics()
, aby umożliwić użytkownikom pobieranie danych z usługiMediaCodec
. (#9766). - Napraw rozdzielczość 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 ustawiają szybkości na prośbę użytkownika (#9329).
- Zmień nazwę społeczności
DecoderCounters#inputBufferCount
naqueuedInputBufferCount
. - Ustaw numer
SimpleExoPlayer.renderers
jako prywatny. Mechanizmy renderowania są dostępne na stronieExoPlayer.getRenderer
. - Zaktualizowano niektóre wartości stałe
AnalyticsListener.EventFlags
, aby pasowały do wartości w elemenciePlayer.EventFlags
. - Podziel encję
AnalyticsCollector
na interfejs i domyślną implementację, aby umożliwić jej pomijanie przez R8, gdy aplikacja jej nie potrzebuje.
- Dodaj chronioną metodę
- Wybór ścieżki:
- Obsługują flagi preferowanych ról wideo przy wyborze ścieżki (#9402).
- Zaktualizuj mechanizmy wyboru ścieżki wideo, aby uwzględnić preferowane typy MIME i flagi roli podczas wybierania wielu ścieżek wideo do adaptacji (#9519).
- Zaktualizuj logikę wyboru ścieżki wideo i audio, aby wybierać tylko formaty na potrzeby wybierania adaptacyjnego, które mają ten sam poziom obsługi dekodera i sprzętu (#9565).
- Jeśli podstawowe dekodery z akceleracją sprzętową obsługują wiele kodeków, zaktualizuj zasady wyboru ścieżki wideo, aby preferować bardziej wydajne kodeki (#4835).
- Preferuj ustawienia treści audio (np. „domyślną” ścieżkę audio lub ścieżkę pasującą do języka lokalnego systemu) zamiast ograniczeń technicznych (np. preferowany typ MIME lub maksymalną liczbę kanałów).
- Rozwiąż problem z wyborem utworu, który powodował, że zastąpienie jednej grupy ścieżek nie wyłączało innych grup ścieżek tego samego typu (#9675).
- Napraw problem z wyborem ścieżki, w wyniku którego kombinacja zastąpień z pustą i niepustych ścieżek nie jest prawidłowo stosowana (#9649).
- Zabroń zduplikowanych identyfikatorów
TrackGroup
w elemencieTrackGroupArray
. ElementyTrackGroup
zawsze można odróżnić przez ustawienie w konstruktorzeTrackGroup
elementuid
. Rozwiązuje to problem z awarią, która występowała przy wznawianiu odtwarzania po włączeniu odtwarzania w tle aplikacji z aktywnym zastąpieniem ścieżki (#9718). - Popraw logikę w
AdaptiveTrackSelection
, aby umożliwić wzrost jakości przy wystarczającej przepustowości sieci nawet wtedy, gdy odtwarzanie jest bardzo blisko krawędzi transmisji na żywo (#9784).
- Film:
- W razie potrzeby napraw logikę zastępczą dekodera Dolby Vision, aby używać zgodnego dekodera H264/H265.
- Dźwięk:
- W razie potrzeby napraw logikę kreacji zastępczej dekodera Dolby Atmos (E-AC3-JOC), aby w razie potrzeby używać zgodnego dekodera E-AC3.
- Zmień interfejsy API
AudioCapabilities
tak, aby wymagały jawnego przekazywania metodyAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
zamiastnull
. - Zezwól na dostosowanie obliczania rozmiaru bufora
AudioTrack
przez wstawienie typuAudioTrackBufferSizeProvider
doDefaultAudioSink
. (#8891). - Jeśli żądany rozmiar bufora przekracza 1 MB, spróbuj ponownie utworzyć element
AudioTrack
. (#9712).
- Moduły wyodrębniania:
- Tekst:
- Dodaj pole
MediaItem.SubtitleConfiguration.id
, które zostanie przekazane do polaFormat.id
ścieżki napisów utworzonej w konfiguracji (#9673). - Dodaj podstawową obsługę napisów WebVTT w kontenerach Matroska (#9886).
- Zablokuj usłudze
Cea708Decoder
możliwość odczytu więcej niż zadeklarowany rozmiar bloku usług.
- Dodaj pole
- DRM:
- Usuń
playbackLooper
z kontaDrmSessionManager.(pre)acquireSession
. Gdy aplikacja używa elementuDrmSessionManager
w niestandardowym elemencieMediaSource
, zamiast tego doDrmSessionManager.setPlayer
musi być przekazywanyplaybackLooper
.
- Usuń
- Odtwarzanie reklam / IMA:
- Dodano obsługę dynamicznego wstawiania reklam (DAI) IMA (#8213).
- Dodaj metodę do elementu
AdPlaybackState
, by umożliwić zresetowanie grupy reklam i ponowne jej odtworzenie (#9615). - Wymuszanie odtwarzania podczas odtwarzania reklamy na poziomie 1,0 (#9018).
- Rozwiąż problem polegający na tym, że nie udało się załadować grupy reklam, która spowodowała natychmiastowy reset odtwarzania (#9929).
- Interfejs:
- DASH:
- Dodaj do pliku
Representation
(#9579) przeanalizowane podstawowe i dodatkowe właściwości. - obsługują rolę śledzenia
forced-subtitle
(#9727). - Przestań interpretować rolę ścieżki
main
jakoC.SELECTION_FLAG_DEFAULT
. - Napraw podstawową logikę wykluczania adresów URL w plikach manifestu, które nie deklarują przestrzeni nazw DVB (#9856).
- Obsługa względnych adresów URL
MPD.Location
(#9939).
- Dodaj do pliku
- HLS:
- Prawidłowo wypełnij pole
Format.label
w przypadku strumieni HLS tylko z dźwiękiem (#9608). - Aby skrócić czas uruchamiania, domyślnie użyj przygotowań bez fragmentów. Jeśli Twoje nagrania zawierają ścieżki z napisami, które nie są zadeklarowane na playliście reklamy nadrzędnej, dodaj je do playlisty reklamy nadrzędnej, by można było je odtwarzać, lub wyłącz opcję
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Obsługuj dokładne przewijanie klatek kluczowych w HLS (#2882).
- Prawidłowo wypełnij pole
- RTSP:
- Podaj interfejs API klienta, aby zastąpić identyfikator
SocketFactory
używany do każdego połączenia z serwerem (#9606). - Jeśli występują obie metody uwierzytelniania DIGEST zamiast PODSTAWOWEJ (#9800).
- Obsługa, gdy czas wczytywania ścieżki RTSP jest niedostępny (#9775).
- Ignoruj nieprawidłowe wartości nagłówka RTP-Info (#9619).
- Podaj interfejs API klienta, aby zastąpić identyfikator
- Transformer:
- Zwiększ wymaganą minimalną wersję interfejsu API do 21.
TransformationException
służy teraz do opisywania błędów, które występują podczas przekształcania.- Dodaj
TransformationRequest
, aby określić opcje przekształcania. - Zezwalaj na rejestrowanie wielu detektorów.
- Naprawianie zawieszania się Transformera, gdy dane wyjściowe kodeka są częściowo odczytywane.
- Popraw potencjalny NPE w
Transformer.getProgress
podczas zwalniania rzutów modyfikujących. - Dodaj aplikację demonstracyjną do stosowania przekształceń.
- Rozszerzenie MediaSession:
- Domyślnie
MediaSessionConnector
usuwa teraz 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
korzystała z funkcji bin utils, a nie GNU (#9933).
- Spraw, aby funkcja
- Zgodność z Androidem 12:
- Uaktualnij rozszerzenie Cast, by korzystało z wtyczki
com.google.android.gms:play-services-cast-framework:20.1.0
. Wcześniejsze wersje systemuplay-services-cast-framework
nie są zgodne z aplikacjami kierowanymi na Androida 12 i będą powodować awarię z błędemIllegalArgumentException
podczas tworzenia komponentówPendingIntent
(#9528).
- Uaktualnij rozszerzenie Cast, by korzystało z wtyczki
- Usuń wycofane symbole:
- Usuń
Player.EventListener
. Użyj w zamian zasadyPlayer.Listener
. - Usuń
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
iMediaSourceFactory#setDrmUserAgent
. Użyj w zamian zasadyMediaSourceFactory#setDrmSessionManagerProvider
. - Usuń
MediaSourceFactory#setStreamKeys
. Użyj w zamian zasadyMediaItem.Builder#setStreamKeys
. - Usuń
MediaSourceFactory#createMediaSource(Uri)
. Użyj w zamian zasadyMediaSourceFactory#createMediaSource(MediaItem)
. - Usuń
setTag
zDashMediaSource
,HlsMediaSource
iSsMediaSource
. Użyj w zamian zasadyMediaItem.Builder#setTag
. - Usuń
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. UżyjMediaItem.Builder#setLiveConfiguration
iMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, aby zastąpić plik manifestu, lubDashMediaSource#setFallbackTargetLiveOffsetMs
, aby podać wartość zastępczą. - Usuń
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Nie można już zrezygnować z egzekwowania wątku. - Usuń użytkowników
ActionFile
iActionFileUpgradeUtil
. Użyj ExoPlayera w wersji 2.16.1 lub wcześniejszej, aby scalić pliki działańActionFileUpgradeUtil
wDefaultDownloadIndex
. - Usuń
ProgressiveMediaSource#setExtractorsFactory
. Użyj konstruktoraProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - Usuń
ProgressiveMediaSource.Factory#setTag
iProgressiveMediaSource.Factory#setCustomCacheKey
. Zamiast niej używaj znacznikówMediaItem.Builder#setTag
iMediaItem.Builder#setCustomCacheKey
. - Usuń konstruktora
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
iDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Zamiast nich użyj konstruktoraDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
iDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Usuń wszystkie publiczne konstruktory
CronetDataSource
. Użyj w zamian zasadyCronetDataSource.Factory
.
- Usuń
- Zmień
IntDefs
tylko na@Target(TYPE_USE)
. Może to zakłócić kompilację 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
opakowaniu)@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-alfa01
27 października 2021 roku
Aplikacja androidx.media3:media3-*:1.0.0-alpha01
została zwolniona.
Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Media3 to nowe miejsce na biblioteki obsługi multimediów, w tym ExoPlayer. Pierwsza wersja alfa zawiera wczesne, funkcjonalne implementacje bibliotek do implementowania przypadków użycia multimediów, w tym:
- ExoPlayer – odtwarzacz multimedialny na poziomie aplikacji na Androida, który można łatwo dostosować i rozszerzyć.
- Funkcjonalność sesji multimedialnej – eksponowanie i sterowanie odtwarzaniem. Ten nowy moduł sesji używa tego samego interfejsu
Player
co ExoPlayer. - Komponenty UI do tworzenia interfejsów odtwarzania multimediów.
- funkcje dodawania modułów z innych bibliotek do wykorzystania z ExoPlayer, np. wstawiania reklam za pomocą pakietu IMA SDK.
Więcej informacji znajdziesz w artykule o projekcie Media3 na GitHubie.
Komponent ExoPlayer był wcześniej hostowany w osobnym projekcie ExoPlayer na GitHubie. W Media3 nazwa pakietu to androidx.media3.exoplayer
. Planujemy nadal utrzymywać i publikować projekt ExoPlayer na GitHubie 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
. Pozwala to na bezpośrednią integrację odtwarzaczy z sesjami multimediów bez konieczności używania adaptera/klasy oprogramowania sprzęgającego.