Medya3
Son Güncelleme | Kararlı Sürüm | Sürüm Adayı | Beta Sürümü | Alfa Sürümü |
---|---|---|---|---|
20 Aralık 2024 | 1.5.1 | - | - | 1.6.0-alpha01 |
Bağımlılıkları beyan etme
Media3'e bağımlı eklemek için projenize Google Maven deposunu eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu okuyun.
Uygulamanızın veya modülünüzün build.gradle
dosyasına ihtiyacınız olan yapıların bağımlılıklarını ekleyin:
Groovy
dependencies { def media3_version = "1.5.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.5.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Bağımlılıklar hakkında daha fazla bilgi için Derleme Bağımlılıkları Ekleme başlıklı makaleyi inceleyin.
Geri bildirim
Geri bildiriminiz Jetpack'in iyileştirilmesine yardımcı olur. Sorulara, bilinen sorunlara ve özellik isteklerine yanıt bulmak ve yeni sorunlar bildirmek için Media3 sorun izleyicisini kullanabilirsiniz.
1.6.0 sürümü
Sürüm 1.6.0-alpha01
20 Aralık 2024
androidx.media3:media3-*:1.6.0-alpha01
yayınlanır.
1.6.0-alpha01 sürümü bu taahhütleri içerir.
- Ortak Kitaplık:
Format.toBundle(boolean excludeMetadata)
yöntemini kaldırın, bunun yerineFormat.toBundle()
yöntemini kullanın.androidx.media
içindeki eşdeğer sınıfları değiştirmek içinAudioManagerCompat
veAudioFocusRequestCompat
ekleyin.
- ExoPlayer:
- Video parçasını seçerken dili göz önünde bulundurun. Varsayılan olarak, varsa seçili ses parçasının diliyle eşleşen bir "ana" video parçası seçin. Videonun uygunsuz dil tercihleri
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
ile ifade edilebilir. DefaultTrackSelector.selectVideoTrack()
yöntemineselectedAudioLanguage
parametresini ekleyin.MediaSourceEventListener.onLoadStarted
ve ilgiliMediaSourceEventListener.EventDispatcher
yöntemlerineretryCount
parametresini ekleyin.- Oynatma listesi öğelerinin veya çok dönemli DASH akışlarındaki süreleri gerçek içerikle eşleşmeyen dönemlerin, öğenin sonunda kare donmasına neden olabileceği hatayı düzeltme (#1698).
DefaultLoadControl
'dekibufferForPlaybackMs
vebufferForPlaybackAfterRebufferMs
için varsayılan değerleri sırasıyla 1.000 ve 2.000 ms olarak azaltın.MediaExtractor
platformuna eşdeğer özellikler sunan yeni bir sınıf olanMediaExtractorCompat
'ü ekleyin.BasePreloadManager.Listener
öğesini üst düzey birPreloadManagerListener
'e taşıyın.RenderersFactory.createSecondaryRenderer
, ön ısıtma için ikincil oluşturucular sağlamak üzere uygulanabilir. Ön ısıtma, oynatma sırasında medya öğeleri arasında daha hızlı geçiş yapılmasını sağlar.- DASH, HLS ve SmoothStreaming adaptif akış biçimlerinde manifest istekleri için
CmcdData
göndermeyi etkinleştirin (#1951). MediaCodecRenderer.onReadyToInitializeCodec
bölümünde başlatılacak codec'inMediaCodecInfo
değerini sağlayın (#1963).- Reklam grupları ekleyerek
AdPlaybackStates
'un büyümesine izin vermek içinAdsMediaSource
değerini değiştirin. Geçersiz değişiklikler algılanır ve istisna atılır.
- Video parçasını seçerken dili göz önünde bulundurun. Varsayılan olarak, varsa seçili ses parçasının diliyle eşleşen bir "ana" video parçası seçin. Videonun uygunsuz dil tercihleri
- Dönüştürücü:
VideoFrameProcessor.registerInputStream
veVideoFrameProcessor.Listener.onInputStreamRegistered
parametreleriniFormat
kullanacak şekilde güncelleyin.- Alternatif geriye dönük uyumlu biçimlere dönüştürme desteği eklendi.
DefaultEncoderFactory
kullanırken HDR statik meta verileri oluşturun.
- Ayıklayıcılar:
- AVI: Akış başlığının, paket sayısı yerine bayt sayısını depoladığı sabit bit hızı sıkıştırılmış ses içeren dosyaların işlenmesi düzeltildi.
- Ses:
onAudioPositionAdvancing
işlevinin, oynatma devam ettiğinde çağrılması için düzeltin (daha önce oynatma duraklatıldığında çağrılıyordu).
- Video:
MediaCodecVideoRenderer
'ü,Surface
olmadığında oluşturucunun yalnızcaVideoFrameReleaseControl.getFrameReleaseAction
FRAME_RELEASE_TRY_AGAIN_LATER
olmadığında ilk kareleri atlayacağı şekilde düzeltin.
- Metin:
MediaItem.Builder.setSubtitleConfigurations
ile yapılandırılmış tüm altyazı dosyalarını yüklemeyi durdurun ve bunun yerine parça seçimiyle seçilirse yalnızca bir altyazı dosyası yükleyin (#1721).
- Etki:
OverlaySettings
işlevleriStaticOverlaySettings
'a taşındı.OverlaySettings
, dinamik yer paylaşımı ayarlarına izin vermek için alt sınıfa ayrılabilir.
- Birleştiriciler:
- Çok uzun bir tam nitelikli ad kullanmaktan kaçınmak için
MuxerException
,Muxer
arayüzünden kaldırıldı.
- Çok uzun bir tam nitelikli ad kullanmaktan kaçınmak için
- Oturum:
- "MediaButtonReceiver.shouldStartForegroundService" yöntemine parametre olarak "Context" değerini ekleyin (#1887).
- Kullanıcı Arayüzü:
PlayerSurface
Composable'ımedia3-ui-compose
modülüne ekleyin.PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
sınıflarını ve bunlara karşılık gelenrememberPlayPauseButtonState
,rememberNextButtonState
,rememberPreviousButtonState
,rememberRepeatButtonState
,rememberShuffleButtonState
bileşenlerimedia3-ui-compose
modülüne ekleyin.
- HLS Uzantısı:
HlsInterstitialsAdsLoader
için ilk sürümü ekleyin. Reklam yükleyici, bir HLS medya oynatma listesinin HLS geçiş reklamlarını okur ve bunlarıAdsMediaSource
'a iletilenAdPlaybackState
ile eşler. Bu ilk sürüm yalnızcaX-ASSET-URI
özelliklerine sahip HLS seç-izle akışlarını destekler.HlsInterstitialsAdsLoader.AdsMediaSourceFactory
ekleyin. Uygulamalar,HlsInterstitialsAdsLoader
öğesini kullanıpAdsMediaSource
örnekleri kolay ve güvenli bir şekilde oluşturmak için bu API'yi kullanabilir.
- DASH Uzantısı:
- DASH için AC-4 4. Seviye biçim desteği ekleyin (#1898).
- Kod Çözücü Uzantılar (FFmpeg, VP9, AV1 vb.):
- MPEG-H sesin kodunu çözmek için yerel MPEG-H kod çözücü modülünü kullanan MPEG-H kod çözücü modülünü ekleyin (#1826).
- Demo uygulama:
PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
öğelerini kullanarakdemo-compose
'eMinimalControls
(PlayPauseButton
,NextButton
,PreviousButton
) veExtraControls
(RepeatButton
,ShuffleButton
) Birleştirilebilir Kullanıcı Arayüzü öğeleri ekleyin.
- Desteği sonlandırılan sembolleri kaldırın:
- Desteği sonlandırılan
AudioMixer.create()
yöntemini kaldırın. Bunun yerineDefaultAudioMixer.Factory().create()
kullanın. - Aşağıdaki desteği sonlandırılmış
Transformer.Builder
yöntemlerini kaldırın:setTransformationRequest()
yerinesetAudioMimeType()
,setVideoMimeType()
vesetHdrMode()
'i kullanın.setAudioProcessors()
, ses işleyiciyi birEditedMediaItem.Builder.setEffects()
olarak ayarlayın ve bunun yerineTransformer.start()
'ye iletin.setVideoEffects()
, video efektini birEditedMediaItem.Builder.setEffects()
içinde ayarlayın ve bunun yerineTransformer.start()
'ye iletin.setRemoveAudio()
,Transformer.start()
'a iletilenEditedMediaItem
öğesinden sesi kaldırmak içinEditedMediaItem.Builder.setRemoveAudio()
'u kullanın.setRemoveVideo()
, videoyuTransformer.start()
'a iletilenEditedMediaItem
'den kaldırmak içinEditedMediaItem.Builder.setRemoveVideo()
'u kullanın.setFlattenForSlowMotion()
,Transformer.start()
'a iletilenEditedMediaItem
öğesini düzleştirmek içinEditedMediaItem.Builder.setFlattenForSlowMotion()
'u kullanın.setListener()
yerineaddListener()
,removeListener()
veyaremoveAllListeners()
'i kullanın.
- Aşağıdaki desteği sonlandırılmış
Transformer.Listener
yöntemlerini kaldırın:onTransformationCompleted(MediaItem)
yerineonCompleted(Composition, ExportResult)
'ü kullanın.onTransformationCompleted(MediaItem, TransformationResult)
yerineonCompleted(Composition, ExportResult)
'ü kullanın.onTransformationError(MediaItem, Exception)
yerineonError(Composition, ExportResult, ExportException)
'ü kullanın.onTransformationError(MediaItem, TransformationException)
yerineonError(Composition, ExportResult, ExportException)
'ü kullanın.onTransformationError(MediaItem, TransformationResult, TransformationException)
, bunun yerineonError(Composition, ExportResult, ExportException)
'u kullanın.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
, bunun yerineonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
'u kullanın.
- Desteği sonlandırılan
TransformationResult
sınıfını kaldırın. Bunun yerineExportResult
kullanın. - Desteği sonlandırılan
TransformationException
sınıfını kaldırın. Bunun yerineExportException
kullanın. - Desteği sonlandırılan
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
öğesini kaldırın. Bunun yerineTransformer.PROGRESS_STATE_NOT_STARTED
kullanın. - Desteği sonlandırılan
Transformer.setListener()
öğesini kaldırın. Bunun yerineTransformer.addListener()
,Transformer.removeListener()
veyaTransformer.removeAllListeners()
kullanın. - Desteği sonlandırılan
Transformer.startTransformation()
öğesini kaldırın. Bunun yerineTransformer.start(MediaItem, String)
kullanın. - Desteği sonlandırılan
SingleFrameGlShaderProgram
öğesini kaldırın. Bunun yerineBaseGlShaderProgram
kullanın. Transformer.flattenForSlowMotion
öğesini kaldırın. Bunun yerineEditedMediaItem.flattenForSlowMotion
kullanın.
- Desteği sonlandırılan
Sürüm 1.5
Sürüm 1.5.1
19 Aralık 2024
androidx.media3:media3-*:1.5.1
yayınlanır.
1.5.1 sürümü bu taahhütleri içerir.
- ExoPlayer:
- Bu platform API'sinde bildirilen codec zaman aşımı sorunlarını (#1641) önlemek için MediaCodec'te eşzamansız şifre çözme kullanımını devre dışı bırakın.
- Ayıklayıcılar:
- MP3:
VBRI
çerçevesinin içindekiler tablosu, dosyadaki tüm MP3 verilerini kapsamıyorsa oynatmayı erken durdurmayın (#1904).
- MP3:
- Video:
onOutputFormatChanged
işlenirken sağlandığındaMediaCodecAdapter
tarafından sağlanan piksel en boy oranı değerlerinin kullanılmasının geri alınması (#1371).
- Metin:
ReplacingCuesResolver.discardCuesBeforeTimeUs
zamanında etkin olan (daha önce başlatılmış ancak henüz sona ermemiş) işaretin yanlışlıkla atılmasına neden olan hata düzeltildi (#1939).timeUs
- Meta veriler:
- Vorbis yorumlarından disk/parça numarasını ve türünü
MediaMetadata
içine aktarın (#1958).
- Vorbis yorumlarından disk/parça numarasını ve türünü
1.5.0 sürümü
27 Kasım 2024
androidx.media3:media3-*:1.5.0
yayınlanır.
1.5.0 sürümü bu taahhütleri içerir.
- Ortak Kitaplık:
- Tam tutarlılık ve dinleyicinin işlenmesini sağlarken küçük ayarlamalarla başka bir oynatıcıya yönlendirmeye olanak tanıyan
ForwardingSimpleBasePlayer
ekleyin (#1183). SimpleBasePlayer.State.playlist
yerinegetPlaylist()
yöntemini kullanın.- Oynatma listesi yapısı oluşturmak yerine doğrudan bir
Timeline
ve mevcutTracks
veMetadata
belirtmek içinSimpleBasePlayer.State.Builder.setPlaylist()
için geçersiz kılma ekleyin. minSdk
değerini 21'e (Android Lollipop) yükseltin. Bu, diğer tüm AndroidX kitaplıklarıyla uyumludur.- Ortak kitaplığın üzerine inşa edilmiş Kotlin'e özel işlevler sağlayan
androidx.media3:media3-common-ktx
yapısını ekleyin media3-common-ktx
kitaplığına,Player.Events
'u dinlemek için bir coroutine döndürmek üzerePlayer.listen
askıya alma uzantı işlevini ekleyin.- Çalışma zamanında sınıf doğrulama hatalarını önlemek için tasarlanmış, manuel olarak satır dışı bırakılmış iç sınıflardan
@DoNotInline
ek açıklamalarını kaldırın. R8'in son sürümleri artık çalışma zamanındaki hataları önlemek için bu tür satır dışı çağrıları otomatik olarak satır dışına çıkarır (bu nedenle manuel satır dışı çıkarma işlemi artık gerekli değildir). Kitaplığın tüm Gradle kullanıcıları,compileSdk = 35
nedeniyle, Android Gradle eklentisinin bu işlemi yapan bir R8 sürümünü kullanan bir sürümünü zaten kullanıyor olmalıdır. Gradle dışında bir derleme sistemi kullanan kitaplık kullanıcılarının, çalışma zamanında sınıf doğrulama hatalarını önlemek için R8 eşdeğeri küçültme/karartma adımlarının benzer bir otomatik satır dışı bırakma işlemi gerçekleştirdiğinden emin olmaları gerekir. Bu değişiklik diğer AndroidX kitaplıklarında zaten yapılmıştır.
- Tam tutarlılık ve dinleyicinin işlenmesini sağlarken küçük ayarlamalarla başka bir oynatıcıya yönlendirmeye olanak tanıyan
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()
artık her medya öğesi için çağrılabilir. Daha önce ilk için çağrılmadı. Bunu etkinleştirmek içinMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
simgesini kullanın.- Hata oluştuğunda
PreloadMediaSource.PreloadControl
uygulamalarının işlem yapmasına izin vermek içinPreloadMediaSource.PreloadControl.onPreloadError
ekleyin. - Ön yükleme etkinliklerini uygulamalara dağıtmak için
BasePreloadManager.Listener
ekleyin. - SNTP istemci zaman aşımının değiştirilmesine izin verin ve zaman aşımı durumunda alternatif adresleri yeniden deneyin (#1540).
- Alan her zaman sıfır olduğu için
MediaCodecAdapter.Configuration.flags
değerini kaldırın. - Kullanıcının, Wear OS API 35 ve sonraki sürümlerde (cihazın bu özelliği desteklediğini belirttiği durumlarda) oynatma için yerleşik hoparlörü seçmesine izin verin.
- Ses odak işleme etkinleştirilene kadar
Context.getSystemService(Context.AUDIO_SERVICE)
numaralı telefona yapılan engelleme çağrısını erteleyin. Bu, ses odak işleme etkinleştirilmemişse engelleme çağrısının yapılmamasını sağlar (#1616). - Yükleme başarısız olduğunda arabelleğe alınan süreye bakılmaksızın oynatmaya izin verin (#1571).
- Ayrı ayrı oluşturma araçları oynatmanın hazır olmasına izin verdiğinde
AnalyticsListener.onRendererReadyChanged()
ekleyin. MediaCodec
, asenkron modda çalıştırıldığındaMediaCodec.CryptoException
bazen "beklenmeyen çalışma zamanı hatası" olarak raporlanıyordu (API 31 ve sonraki sürümlerde varsayılan davranış). Bu sorun düzeltildi.PreloadMediaSource.PreloadControl.onContinueLoadingRequested()
ilebufferedPositionUs
yerinebufferedDurationUs
gönderin. AyrıcaDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
,DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
olarak değiştirilir. Ardından uygulamaların, varsayılan başlangıç konumundan belirli bir süreyi temsil eden bir değer iletmesi gerekir. Bu durumda, ilgili medya kaynağının konum yerine bu IntDef ile önceden yüklenmesi gerekir.- Tüm yöntem çağrılarını başka bir oluşturma aracına yönlendiren
ForwardingRenderer
uygulamasını ekleyin (1703). - Oynatma listesindeki bir sonraki öğe için oynatma listesi ön yükleme özelliğini ekleyin. Uygulamalar,
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
işlevini uygun şekilde çağırarak önceden yüklemeyi etkinleştirebilir. Önceden yükleme varsayılan olarak devre dışıdır. Etkinleştirildiğinde ve oynatma işlemini etkilememesi içinDefaultLoadControl
, ön yüklemenin yalnızca oynatıcı oynatma için yüklenmediği durumlarda başlatılmasını ve devam etmesini kısıtlar. Uygulamalar,LoadControl.shouldContinuePreloading()
'ü uygun şekilde uygulayarak (ör.DefaultLoadControl
'te bu yöntemi geçersiz kıldığında) bu davranışı değiştirebilir.LoadControl
'nin varsayılan uygulaması, bir uygulamaLoadControl
'nin özel bir uygulamasını kullanıyorsa ön yüklemeyi devre dışı bırakır. - Alt sınıf dinleyicilerinin etkinliklerinin çağrılmasına izin vermek için
MediaSourceEventListener.EventDispatcher.dispatchEvent()
yöntemini ekleyin (1736). DefaultPreloadManager
veExoPlayer
örneklerini tutarlı bir şekilde paylaşılan yapılandırmalarla oluşturanDefaultPreloadManager.Builder
öğesini ekleyin.DefaultLoadControl
uygulaması akış türleriniExoTrackSelection[]
'ten alabileceğindenRenderer[]
parametresiniLoadControl.onTracksSelected()
'ten kaldırın.DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
desteği sonlandırıldı ve geçersiz kılma işlemlerini önlemek için yöntem nihai olarak işaretlendi. Bunun yerine yeniDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
kullanılmalıdır.MergingMediaSource
'te ikincil kaynaklardan gelenMediaSourceEventListener
etkinliklerini bildirme. Bu işlem, yan taraftan yüklenen altyazılar (MediaItem.LocalConfiguration.subtitleConfigurations
ile eklenen altyazılar) için yükleme başlangıcı/hata/iptal/tamamlanma etkinliklerinin raporlanmasına neden olur. Bu etkinlikler,AnalyticsListener
tarafından yayınlanan yinelenen yükleme etkinlikleri olarak görünebilir.- Altyazı ve meta veri hatalarının oynatmayı tamamen durdurmasını önler.
Bunun yerine, sorunlu parça devre dışı bırakılır ve kalan parçaların oynatılması devam eder (#1722).
- Yeni altyazı işleme sürecinde (ayrıştırma sırasında), ilişkili ayrıştırma (ör. geçersiz altyazı verileri) ve yükleme hataları (ör. HTTP 404)
onLoadError
geri çağırma işlevleri aracılığıyla yayınlanır. - Eski altyazı işleme sürecinde (oluşturma sırasında), yalnızca ilişkili yükleme hataları
onLoadError
geri çağırma işlevleri aracılığıyla yayınlanırken ayrıştırma hataları sessizce yoksayılır (bu, önceden var olan bir davranıştır).
- Yeni altyazı işleme sürecinde (ayrıştırma sırasında), ilişkili ayrıştırma (ör. geçersiz altyazı verileri) ve yükleme hataları (ör. HTTP 404)
- Oynatma listesi öğelerinin veya çok dönemli DASH akışlarındaki süreleri gerçek içerikle eşleşmeyen dönemlerin, öğenin sonunda kare donmasına neden olabileceği hatayı düzeltme (#1698).
- Son güncellemeden sonra geçen maksimum süreyi ayarlamak için
SntpClient
öğesine bir ayarlayıcı ekleyin. Bu sürenin sonunda istemci yeniden başlatılır (#1794).
- Dönüştürücü:
Surface
aracılığıyla video verilerinin Transformer'a sıraya eklenmesini destekleyenSurfaceAssetLoader
öğesini ekleyin.ImageAssetLoader
,IllegalStateException
atma yerineAssetLoader.onError
aracılığıyla desteklenmeyen girişi bildirir.- Resim dışa aktarma işlemi için
MediaItem.Builder.setImageDurationMs
kullanarak resim süresini ayarlamayı zorunlu kılın. - EditedMediaItems ses dizilerindeki boşluklar için dışa aktarma desteği eklendi.
- Parça Seçimi:
DefaultTrackSelector
: Diğer faktörler eşit olduğunda kanal tabanlı ses yerine nesne tabanlı sesi tercih edin.
- Ayıklayıcılar:
Mp4Extractor
veFragmentedMp4Extractor
'nin, sonraki örnekler tarafından referans olarak kullanılmayan H264 örneklerini tanımlamasına izin verin.AmrExtractor
'te dizin tabanlı aramayı etkinleştirme seçeneği ekleyin.- Geçerli kareler arasında 128 KB'den uzun MP3 dosyalarını "geçersiz" yerine "kesilmiş" olarak değerlendirin. Bu, MP3 baytlarının uzunluğunu belirten başka bir meta verisi olmayan ve sonunda MP3 olmayan veriler içeren dosyaların artık
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563) hatasıyla başarısız olmak yerine MP3 verilerinin sonunda oynatmayı durduracağı anlamına geliyor. - MP4 dosyalarındaki düzenleme listelerini işlerken anahtar kare dışı medya başlangıç konumları için önizleme örneği işlemeyi düzeltin (#1659).
Mp4Extractor
veFragmentedMp4Extractor
bölümündekimdhd
kutusundaki medya süresinden yararlanarak kare hızı hesaplaması iyileştirildi (#1531).- MP4 düzenleme listelerinde
media_time
öğesinin yanlış ölçeklendirilmesi düzeltildi.segment_duration
, film zaman ölçeği kullanılarak zaten doğru şekilde ölçeklendirilmişkenmedia_time
, MP4 biçim standardında (#1792) belirtildiği gibi parça zaman ölçeği kullanılarak doğru şekilde ölçeklendirilir. - Düzenleme listesi ile MP4 için
endIndices
hesaplamasında sıra dışı kareleri ele alın (#1797). -1
değerlerini işlemek için MP4 dosyalarınınmdhd
kutusunda medya süresi ayrıştırmasını düzeltin (#1819).- H.263 video için MP4 dosyalarında
h263
kutusunu tanımlama desteği eklendi (#1821). - AC-4 4. Katman ISO temel medya dosyası biçimi desteği eklendi (#1265).
- Veri Kaynağı:
HttpEngineDataSource
'ü, API düzeyi 34 yerine S uzantısı 7 sürümünden itibaren kullanıma izin verecek şekilde güncelleyin (#1262).DataSourceContractTest
:DataSource.getUri()
'un çözümlenmiş URI'yi (belgelerde belirtildiği gibi) döndürdüğünü doğrulayın. Bu, istenen URI'den farklıysa testler yeniDataSourceContractTest.TestResource.Builder.setResolvedUri()
yöntemini kullanarak bunu belirtebilir.DataSourceContractTest
:DataSource.getUri()
vegetResponseHeaders()
'nin,open()
'a yapılan bir çağrının başarısız olmasından ("bulunamadı" kaynağı nedeniyle) sonra ve sonraki birclose()
çağrısından önce "açık" değerini döndürdüğünü doğrulayın.DataSourceContractTest.getNotFoundResources()
'ü geçersiz kılmak, test alt sınıflarının birden fazla "bulunamadı" kaynağı sağlamasına ve beklenen tüm üstbilgileri sağlamasına olanak tanır. Bu sayede HTTP 404 (başlıklarla) ile "sunucu bulunamadı" (başlık yok) arasında ayrım yapılabilir.
- Ses:
- Medyada varsa codec'te CTA-2075 ses seviyesi meta verilerini otomatik olarak yapılandırın.
- Sarma sırasında sesin kademeli olarak azaldığından emin olun.
- Arama sırasında oluşabilecek pop seslerini düzeltme
- Sonic'in zaman uzatma/ton değiştirme algoritması için kesme hatası birikmesini düzeltin.
SpeedChangingAudioProcessor
'te çıkış karelerinin atlanmasına neden olan hata düzeltildi.
- Video:
MediaCodecVideoRenderer
, oluşturulmayan veya diğer örnekler tarafından referans olarak kullanılmayan örneklerin kodunu çözmez.- API 35 ve sonraki sürümlerde
MediaCodecAdapter
artıkconfigure
içinde birnull
Surface
alabilir ve codec bunu destekliyorsa (MediaCodecInfo.detachedSurfaceSupported
) daha önce ayarlanmış birSurface
'yi kaldırmak için yeni bir yöntemdetachOutputSurface
çağırır. onOutputFormatChanged
işlenirken sağlanmışsaMediaCodecAdapter
tarafından sağlanan piksel en boy oranı değerlerini kullanın (#1371).- Galaxy Tab S7 FE'de 60 fps güvenli H264 akışlarının desteklenmiyor olarak işaretlenmesine neden olan cihaz sorunu için geçici çözüm eklendi (#1619).
- Son örnekten sonra yayın sonu sinyali döndürmeden takılan codec'ler için geçici çözüm ekleyin.
- Metin:
- Özel bir
VoiceSpan
ekleyin ve WebVTT ses aralıkları için doldurun (#1632). - HLS'de çok büyük altyazı zaman damgalarına (mikrosaniye olarak gösterildiğinde ve
90,000
MPEG zaman tabanıyla çarpıldığında 64 bitlik birlong
'yi aşan) sahip WebVTT'nin gösterildiğinden emin olun (#1763). - Dolby Vision içeriklerinde CEA-608 altyazı desteği (#1820).
- CEA-608 altyazılar etkinleştirildiğinde DASH çok dönemli akışlarda oynatma işleminin takılmasını düzeltin (#1863).
- Özel bir
- Meta veriler:
- icy veya vnd.dvb.ait içeriği içeren parçalara
C.TRACK_TYPE_METADATA
türünü atayın.
- icy veya vnd.dvb.ait içeriği içeren parçalara
- Resim:
- Glide veya Coil gibi harici resim yükleme kitaplıklarıyla basitleştirilmiş entegrasyon için
ExternallyLoadedImageDecoder
ekleyin.
- Glide veya Coil gibi harici resim yükleme kitaplıklarıyla basitleştirilmiş entegrasyon için
- Veri Kaynağı:
FileDescriptor
'den okumak için kullanılabilecek yeni birDataSource
olanFileDescriptorDataSource
'ü ekleyin (#3757).
- Etki:
- Küçük
SurfaceTexture
ölçeklendirmesi içinDefaultVideoFrameProcessor
geçici çözümü ekleyin.SurfaceTexture
, kırpılmış bir arabelleğin kenarında 1 piksellik bir kenar boşluğu kesen küçük bir ölçeklendirme içerebilir. Bu durum artık çıktının beklenen değere daha yakın olması için ele alınmaktadır. - Hızlandırma
DefaultVideoFrameProcessor.queueInputBitmap()
. Sonuç olarak,Transformer
ile resimleri videoya aktarma işlemi daha hızlıdır.
- Küçük
- IMA uzantısı:
- Oynatma listesinin temizlenmesinin
ImaServerSideAdInsertionMediaSource
'daArrayIndexOutOfBoundsException
'ye neden olabileceği hata düzeltildi. - Sunucu tarafına önceden yerleştirilmiş DAI akışlarının, son orta reklamdan sonra oynatıldığında
ArrayIndexOutOfBoundsException
hatasına neden olabileceği hatayı düzeltme (#1741).
- Oynatma listesinin temizlenmesinin
- Oturum:
- Uygulamaların bu yöntemi geçersiz kılarak oynatmaya devam etmek için gelen bir oynatma komutunu bastırmasına izin vermek üzere
MediaButtonReceiver.shouldStartForegroundService(Intent)
ekleyin. Varsayılan olarak hizmet her zaman başlatılır ve sistem birForegroundServiceDidNotStartInTimeException
ile hizmeti kilitlemeden oynatma durdurulamaz (#1528). - Eski bir hizmete bağlanıldığında
MediaBrowser
'ten gönderilen özel komutların yönteminMediaBrowserServiceCompat
varyantı yerineMediaSessionCompat.Callback
varyantına gönderilmesine neden olan hata düzeltildi. Bu durum,MediaBrowser
'ün eski hizmet tarafından geri gönderilen gerçek döndürülen değeri almasını engelledi (#1474). - Medya düğmesi intent'leri için yayın alıcısını ayarlarken belirli üreticilerin cihazları tarafından oluşturulan
IllegalArgumentException
değerini işleyin (#1730). - Medya öğeleri için komut düğmeleri ekleyin. Bu işlem,
Custom browse actions
olarak bilinen eski kitaplığaMediaBrowserCompat
ile Media3 API'yi ekler. Media3 ile medya öğeleri için komut düğmelerinin hemMediaBrowser
hem deMediaController
için kullanılabileceğini unutmayın. AAOS'un özel Göz atma işlemleri başlıklı makaleyi inceleyin. - Media3 denetleyicisinin bazen
play()
isteğinde bulunduktan sonra oturum uygulamasının ön plan hizmetini başlatmasına izin vermediği hata düzeltildi. CommandButton.Builder.setIconUri
'ü yalnızca içerik Uri'lerini kabul edecek şekilde kısıtlayın.- Eski bir
MediaBrowserCompat
'e bağlanırken Media3 tarayıcısının bağlantı ipuçlarını ilkMediaBrowserCompat
'e iletin. Hizmet,onGetRoot()
çağrısına yapılan ilk çağrıda kök ipucu olarak iletilen bağlantı ipuçlarını alabilir. - Eski bir tarayıcı hizmetine bağlı bir
MediaBrowser
'nin, tarayıcı birparentid
'a abone olduktan sonra hizmet tarafından gönderilen hatayı almamasına neden olan hata düzeltildi. - Eski bir
MediaBrowserService
'e bağlı bir Media3 tarayıcısının, bir üst öğeye abone olurkenparentId
'un çocuklarını iki kez istememesi için birlikte çalışabilirlik davranışını iyileştirin.
- Uygulamaların bu yöntemi geçersiz kılarak oynatmaya devam etmek için gelen bir oynatma komutunu bastırmasına izin vermek üzere
- Kullanıcı Arayüzü:
- XML tabanlı paylaşılan geçişlerle ilgili sorunlar nedeniyle
PlayerView
-in-Compose-AndroidView
geçici çözümünde, videoyu uzatılmış/kırpılmış olarak oluşturun.AndroidView
içindePlayerView
kullanan uygulamaların etkinleştirmek içinPlayerView.setEnableComposeSurfaceSyncWorkaround
'yi çağırması gerekir (#1237, #1594). - Tam ekran düğmesinin simgesinin isteğe bağlı olarak güncellenmesine (ör. tıklama etkileşimine tepki olarak değil, bant dışı olarak) izin vermek için
setFullscreenButtonState
öğesiniPlayerView
öğesine ekleyin (#1590, #184). - Uygulama tanımlı metin parçası seçim tercihleri varsa metin seçiminde "Yok" seçeneğinin çalışmadığı hata düzeltildi.
- XML tabanlı paylaşılan geçişlerle ilgili sorunlar nedeniyle
- DASH Uzantısı:
- Bir segmentin ortasından başlayan dönemler için destek ekleyin (#1440).
- Sorunsuz Yayın Uzantısı:
- Metin parçaları içeren SmoothStreaming yayınlarını oynatırken
Bad magic number for Bundle
hatası düzeltildi (#1779).
- Metin parçaları içeren SmoothStreaming yayınlarını oynatırken
- RTSP Uzantısı:
- Kod Çözücü Uzantılar (FFmpeg, VP9, AV1 vb.):
- Ses sentezlemek için libiamf yerel kitaplığını kullanan IAMF parçaları içeren MP4 dosyalarının oynatılmasına destek sağlayan IAMF kod çözücü modülünü ekleyin.
- Oynatma, stereo düzenin yanı sıra isteğe bağlı kafa hareketi izleme özelliği etkinleştirildiğinde uzamsallaştırmayla 5.1 olarak etkinleştirilir ancak binaural oynatma desteği şu anda kullanılamamaktadır.
- Android 15'te kod çözücü uzantıları için 16 KB sayfa desteği ekleyin (#1685).
- Ses sentezlemek için libiamf yerel kitaplığını kullanan IAMF parçaları içeren MP4 dosyalarının oynatılmasına destek sağlayan IAMF kod çözücü modülünü ekleyin.
- Cast Uzantısı:
- CastSession bağlantısı kesildikten sonra zaman çizelgesini temizlemeyi durdurur. Bu sayede gönderen uygulama, bağlantı kesildikten sonra oynatmayı yerel olarak devam ettirebilir.
- Bir
Context
sağlandığında CastPlayer'ınDeviceInfo
değerini doldurun. Bu,MediaSession
öğesinin birRoutingSession
öğesine bağlanmasını sağlar. Bu, Çıkış Değiştirici'nin (#1056) entegrasyonu için gereklidir.
- Test Yardımcı Programları:
DataSourceContractTest
artık aşağıdakileri doğrulamak için testler içerir:- Giriş akışı
read position
güncellendi. - Çıkış arabelleği
offset
doğru şekilde uygulanır.
- Giriş akışı
- Demo uygulama
- Demo kısa video uygulamasındaki bellek sızıntısını giderin (#1839).
- Desteği sonlandırılan sembolleri kaldırın:
- Desteği sonlandırılan
Player.hasPrevious
,Player.hasPreviousWindow()
öğelerini kaldırın. Bunun yerinePlayer.hasPreviousMediaItem()
politikasını kullanın. - Desteği sonlandırılan
Player.previous()
yöntemini kaldırın. Bunun yerinePlayer.seekToPreviousMediaItem()
kullanın. - Desteği sonlandırılan
DrmSessionEventListener.onDrmSessionAcquired
yöntemini kaldırın. - Desteği sonlandırılan
DefaultEncoderFactory
kurucularını kaldırın. Bunun yerineDefaultEncoderFactory.Builder
kullanın.
- Desteği sonlandırılan
Sürüm 1.5.0-rc02
19 Kasım 2024
1.5.0 kararlı sürümünü kullanın.
Sürüm 1.5.0-rc01
13 Kasım 2024
1.5.0 kararlı sürümünü kullanın.
Sürüm 1.5.0-beta01
30 Ekim 2024
1.5.0 kararlı sürümünü kullanın.
Sürüm 1.5.0-alpha01
10 Eylül 2024
1.5.0 kararlı sürümünü kullanın.
1.4.0 sürümü
Sürüm 1.4.1
27 Ağustos 2024
androidx.media3:media3-*:1.4.1
yayınlanır.
1.4.1 sürümü bu taahhütleri içerir.
- ExoPlayer:
- Ayıklayıcılar:
- MP3:
Info
çerçevesindeki uzunluk alanına göre MP3 olmayan son verileri doğru şekilde yoksayarakSearched too many bytes
hatasını düzeltin (#1480).
- MP3:
- Metin:
- TTML:
tts:fontSize
yüzde değerlerinin,tts:fontSize
yüzde değerlerine sahip üst düğümlerden doğru şekilde devralınmasını sağlamak için bu değerlerin işlenmesi düzeltildi. - İstenilen çıkış başlangıç zamanının
Subtitle
'deki son etkinlik zamanından büyük veya eşit olması durumunun yanlış ele alınması nedeniyleLegacySubtitleUtil
'tekiIndexOutOfBoundsException
hatası düzeltildi (#1516).
- TTML:
- DRM:
- L1 Widevine içeriği oynatan API 31 ve sonraki sürümlerin cihazlarında
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
hatasını düzeltin. Bu hata, çerçeveMediaDrm.requiresSecureDecoder
yönteminin eksik uygulanmasından kaynaklanır (#1603).
- L1 Widevine içeriği oynatan API 31 ve sonraki sürümlerin cihazlarında
- Etki:
GlObjectsProvider
'arelease()
yöntemi ekleyin.
- Oturum:
KEYCODE_HEADSETHOOK
simgesine iki kez dokunma işlemini, belgelendiği gibi "sonrakiye git" işlemine dönüştürün (#1493).KEYCODE_HEADSETHOOK
değerini,MediaButtonReceiver
içinde "play" komutu olarak işleyin. Böylece,ForegroundServiceDidNotStartInTimeException
değerini atlayıp atlamamaya karar verebilirsiniz (#1581).
- RTSP Uzantısı:
- SDP ayrıştırmasında geçersiz medya açıklamalarını atlama (#1087).
1.4.0 sürümü
25 Temmuz 2024
androidx.media3:media3-*:1.4.0
yayınlanır.
1.4.0 sürümü bu taahhütleri içerir.
- Ortak Kitaplık:
- İşlemsiz olduğu varsayılan arama çağrılarını yoksaymak yerine korumalı
BasePlayer.seekTo()
veSimpleBasePlayer.handleSeek()
yöntemlerine yönlendirin. Bu yöntemleri özel bir oynatıcıda uyguluyorsanız bu ek çağrılarımediaItemIndex == C.INDEX_UNSET
ile işlemeniz gerekebilir. - Geliştirilmiş Java 8 şekerleme kaldırma özelliğine yönelik derleme bağımlılığını kaldırın (#1312).
MediaItem.Builder.setImageDurationMs()
parametresine iletilen sürenin, resim olmayanMediaItem
için yoksayıldığından emin olun (belgelerde belirtildiği gibi).Format
örnekleri hakkında uygulama tarafından sağlanan özel bilgileri depolamak içinFormat.customData
ekleyin.
- İşlemsiz olduğu varsayılan arama çağrılarını yoksaymak yerine korumalı
- ExoPlayer:
- Birden fazla kaynağın ön yüklemesini,
rankingData
tarafından tanımlanan önceliklere göre koordine edenBasePreloadManager
öğesini ekleyin. Bu sınıfı genişleterek özelleştirme yapabilirsiniz. Kaynakların medya örneklerini belleğe ön yüklemek içinPreloadMediaSource
kullanan ve kullanıcı arayüzündeki bir öğenin dizesini belirten bir tam sayırankingData
kullananDefaultPreloadManager
ekleyin. LoadControl
uygulamalarının birden fazla oyuncuyu desteklemesini sağlamak içinLoadControl
yöntemlerinin çoğunaPlayerId
ekleyin.Buffer.isDecodeOnly()
veC.BUFFER_FLAG_DECODE_ONLY
öğelerini kaldırın. Oluşturucular ve kod çözücüler, zaman damgasına göre arabellekleri atlamaya karar vereceğinden bu işareti ayarlamaya gerek yoktur. ÖzelRenderer
uygulamaları, bir örneğin gösterilip gösterilmeyeceğine karar vermek için arabellek süresinin en azBaseRenderer.getLastResetPositionUs()
olup olmadığını kontrol etmelidir. ÖzelSimpleDecoder
uygulamaları, gerekirseisAtLeastOutputStartTimeUs()
değerini kontrol edebilir veya diğer arabellekleri atlamak içinDecoderOutputBuffer.shouldBeSkipped
ile işaretleyebilir.- Belirtilen
rankingData
ile birMediaSource
'yi önceden yüklememeyi belirtmek içinTargetPreloadStatusControl.getTargetPreloadStatus(T)
tarafından döndürülen boş değere izin verin. remove(MediaSource)
'üBasePreloadManager
'a ekleyin.- Önyükleme yöneticisi örneğini korurken tüm bekletme kaynaklarını serbest bırakmak için
reset()
öğesiniBasePreloadManager
öğesine ekleyin. PriorityTaskManager
'de kullanılan öncelik değerini ve API 35'ten itibaren MediaCodec önemini tanımlamak içinExoPlayer.setPriority()
(veBuilder.setPriority()
) ekleyin.- Son yeniden arabelleğe alma süresinin güncellenmesiyle ilgili sorunu düzeltin. Bu sorun, CMCD'de yanlış
bs
(arabellek açlığı) anahtarına neden oluyordu (#1124). - Kaynağın sonuna kadar yüklendiğini belirtmek için
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
ekleyin. Bu sayedeDefaultPreloadManager
ve özelPreloadMediaSource.PreloadControl
uygulamaları, sonraki kaynağı önceden yükleyebilir veya başka işlemler yapabilir. - Öğelerin sonunda sessiz bölümleri atlama işleminin oynatma istisnası tetiklemesine yol açan hata düzeltildi.
- Önceden yükleme süresini silmek için
clear
öğesiniPreloadMediaSource
'e ekleyin. - Daha yüksek öncelikli görevler için codec kaynakları yeniden kullanıldığında kullanılan yeni hata kodu
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
ekleyin. - İlk içerik medya hazırlığı tamamlanmadan önce
AdsMediaSource
'ün videodan önce gösterilen reklamları yüklemesine izin verin (#1358). - Orijinal dönem manifestten kaldırıldıktan sonra çok dönemli bir DASH canlı yayını yeniden hazırlanırken oynatma işleminin
STATE_ENDED
'e taşınmasına neden olan hata düzeltildi. PreloadMediaSource.PreloadControl
'teonTimelineRefreshed()
'üonSourcePrepared()
,onPrepared()
'yionTracksSelected()
olarak yeniden adlandırın.DefaultPreloadManager.Stage
içindeki IntDefs'leri de uygun şekilde yeniden adlandırın.- Çalışmayı CPU uyanma döngüleriyle daha iyi uyumlu hale getirmek ve uyanma işlemini oluşturucuların ilerleyebileceği zamana ertelemek için dinamik planlama için deneysel destek ekleyin.
ExoPlayer örneğinizi ayarlarken
experimentalSetDynamicSchedulingEnabled()
simgesini kullanarak bu özelliği etkinleştirebilirsiniz. Renderer.getDurationToProgressUs()
ekleyin. BirRenderer
, ExoPlayer'a oynatmanın, oluşturma işleminin ilerlemesi için ilerlemesi gereken süreyi döndürmek üzere bu yöntemi uygulayabilir.ExoPlayer
,experimentalSetDynamicSchedulingEnabled()
ile ayarlanırsaExoPlayer
, iş görevini planlama zamanını hesaplarken bu yöntemi çağırır.- Giriş ve çıkış arabellekleri
MediaCodecRenderer
tarafından kullanılabilir olduğunda uyarı almak içinMediaCodecAdapter#OnBufferAvailableListener
ekleyin.MediaCodecRenderer
bu geri çağırma çağrılarını aldığındaExoPlayer
'e sinyal gönderir veExoPlayer
,experimentalSetDynamicSchedulingEnabled()
ile ayarlanmışsa oluşturucular ilerleme kaydedebileceğinden çalışma döngüsünü planlar.ExoPlayer
- Ayrı parametreler yerine
LoadControl
yöntemleri için veri sınıfını kullanın. Exoplayer.release()
işlevinin çağrılıp çağrılmadığını kontrol etmek içinExoPlayer.isReleased()
ekleyin.seekToPrevious()
'nin önceki öğeye bakacağı maksimum konumu yapılandırmak içinExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
ekleyin (#1425).- Oynatıcı duraklatıldığında tam veya geçici odak kaybının raporlanmaması (#1436) gibi bazı ses odak tutarsızlıkları düzeltildi.
- İlk hazırlık adımı sonrasında ek parçalar bildiren ayıklayıcılar nedeniyle oluşabilecek
IndexOutOfBoundsException
sorununu düzeltin (#1476). ExoPlayer.setVideoEffect()
içindekiEffects
, zaman damgalarını oluşturucu ofseti kaldırılmış şekilde alır (#1098).- Başka bir oynatma listesi öğesinde ileriye doğru okuma yapılırken ortaya çıkan oynatıcı hatasını ele alırken olası
IllegalArgumentException
hatasını düzeltin (#1483).
- Birden fazla kaynağın ön yüklemesini,
- Dönüştürücü:
- Çıkış dosyasındaki ilgili parçanın nasıl oluşturulduğunu belirten
audioConversionProcess
vevideoConversionProcess
öğeleriniExportResult
içine ekleyin. - Kırpma optimizasyonu H.264 düzeyindeki kontrolleri gevşetin.
- SDR ve HDR giriş medyaları arasında sırayla geçiş yapma desteği eklendi.
- Beste düzeyinde ses efektleri desteği eklendi.
- Ultra HDR resimleri HDR videolara kodlama desteği eklendi.
DefaultAudioMixer
'ün sıfırlanıp yeniden kullanıldıktan sonra doğru bayt miktarını döndürmemesi sorunu düzeltildi.- PCM girişi işlenirken ses kanallarının sayısının stereo ile sınırlandığı bir kod çözücü hatası için geçici çözüm.
ExoPlayerAssetLoader
içinde parça seçerken yalnızca oynatma için geçerli olduklarından ses kanalı sayısı kısıtlamalarını yoksayabilirsiniz.androidx.media3.transformer.Muxer
arayüzünüandroidx.media3.muxer.Muxer
ile değiştirin veandroidx.media3.transformer.Muxer
'ü kaldırın.- İçerik URI şemalarından HEIC resim yükleme sorununu düzeltin. (#1373).
- AV senkronizasyonunu iyileştirmek için
AudioGraphInput
bölümünde ses parçası süresini ayarlayın. ExportResult.processedInputs
alanını kaldırın. Bu alanı codec ayrıntıları için kullanıyorsanız bunun yerineDefaultDecoderFactory.listener
kullanın. Codec istisnası olması durumunda codec ayrıntılarıExportException.codecInfo
'te yer alır.
- Çıkış dosyasındaki ilgili parçanın nasıl oluşturulduğunu belirten
- Ayıklayıcılar:
- MPEG-TS: Bir yayının son erişim birimini örnek kuyruğuna aktararak son karenin oluşturulmasını sağlayarak değişikliği ileriye dönük olarak uygulayın (#7909). Yalnızca I-kare HLS akışlarında(#1150) ve H.262 HLS akışlarında (#1126) ortaya çıkan sorunları çözmek için düzeltmeler dahil edildi.
- MP3: Temel akış tarafından bildirilen boyut yerine
Info
çerçevesindeki veri boyutunu tercih edin (ör. dosya boyutu veya HTTPContent-Length
başlığı). Bu, oynatılamayan fragman verilerini (ör. albüm kapağı) sabit bit hızı arama hesaplamalarından hariç tutarak aramaları daha doğru hale getirir (#1376). - MP3: Sabit bit hızı arama için ortalama bit hızını hesaplamak üzere
Info
karesindeki kare sayısını ve diğer verileri (varsa) kullanın. Bu,Info
karesinden sonraki karenin bit hızından (ör.PCUT
karesi) ekstrapolasyon yapmak yerine yapılır. Bu işlem, yapay olarak küçük olabilir (#1376). - AVI kapsayıcılarında PCM ses biçimi ayıklama sorunu düzeltildi.
- Ses:
- Geçiş oynatma için DTS:X Profil 2 kodlama özelliklerini düzeltin (#1299).
- Aktarılan oynatma için
AudioTrack.stop()
çağrısı yapılmadan önceDefaultAudioSink
'te akış tamamlama izleme alanını sıfırlayın. BöyleceAudioTrack.StreamEventCallback#onPresentationEnded
, bekleyen tüm verilerin ne zaman oynatıldığını doğru şekilde tanımlayabilir. SilenceSkippingAudioProcessor
'te farklı ses biçimleri arasındaki geçişlerin (ör. stereodan monoya) işlemcinin istisna atmasına neden olabileceği hata düzeltildi (#1352).- ExoPlayer'ın ana çalışma döngüsünü MediaCodecAudioRenderer'ın ilerleme kaydedebileceği zamana dinamik olarak planlaması için
MediaCodecAudioRenderer.getDurationToProgressUs()
'ü uygulayın.
- Video:
- Oynatma sırasında yüzey değiştirirken
Listener.onRenderedFirstFrame()
'ün çok erken gelmesi sorunu düzeltildi. - Dolby Vision'un gerektiğinde uyumlu bir AV1 kod çözücüsü kullanması için kod çözücü yedek mantığını düzeltin (#1389).
- Oynatma sırasında video oluşturma aracının etkinleştirilmesinden kaynaklanabilecek codec istisnası düzeltildi.
- Oynatma sırasında yüzey değiştirirken
- Metin:
- Bir arama konumundan önce başlayan altyazıları atlama sorunu düzeltildi. Bu sorun yalnızca Media3 1.4.0-alpha01 sürümünde ortaya çıktı.
- Varsayılan altyazı ayrıştırma davranışını, oluşturma yerine ayıklama sırasında gerçekleşecek şekilde değiştirin (ayıklama ve oluşturma arasındaki fark için ExoPlayer'ın mimari şemasına bakın).
- Bu değişiklik,
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
veTextRenderer.experimentalSetLegacyDecodingEnabled(true)
'in ikisi de çağrılarak geçersiz kılınabilir. Bu bileşenlerin birExoPlayer
örneğine nasıl bağlanacağı hakkında bilgi edinmek için özelleştirmeyle ilgili belgelere göz atın. Bu yöntemler (ve eski altyazı kod çözmeyle ilgili tüm destek) gelecekteki bir sürümde kaldırılacaktır. - Özel
SubtitleDecoder
uygulamaları olan uygulamaların,SubtitleParser
(veSubtitleDecoderFactory
yerineSubtitleParser.Factory
) uygulamak için bunları güncellemesi gerekir.
- Bu değişiklik,
- PGS:
0
değerini gerçek renk değeri yerine renk dizini olarak çözmek için satır uzunluğunu kod çözme işlemini düzeltin (#1367). - CEA-708:
rowLock
değerini yoksay. CEA-708-E S-2023 spesifikasyonunda, akıştaki değerlerden bağımsız olarakrowLock
vecolumnLock
değerlerinin her ikisinin de doğru olduğu varsayılır (columnLock
desteği uygulanmadığından her zaman yanlış olduğu varsayılır).- Bu değişiklik başlangıçta
1.3.0-alpha01
sürüm notlarına dahil edilmişti ancak1.3.0-rc01
sürümünden önce yanlışlıkla geri alındı. Bu sorun düzeltildi ve değişiklik tekrar uygulandı.
- Bu değişiklik başlangıçta
- CEA-708: ExoPlayer'ın "kalem konumunu ayarla" komutunu basit bir şekilde ele almasından dolayı yinelenen yeni satırların eklenmesini önleyin (#1315).
- WebVTT altyazı örneğinde işaret yoksa (ör. DASH yayınının bir parçası olarak)
IllegalArgumentException
'tenLegacySubtitleUtil
'e bir düzeltme yapın (#1516).
- Meta veriler:
- MP4 ile ID3 sıralama etiketlerinin eşlenmesi düzeltildi. Daha önce MP4'teki "albüm sıralaması" (
soal
), "sanatçı sıralaması" (soar
) ve "albüm sanatçısı sıralaması" (soaa
) etiketleri yanlışlıklaTSO2
,TSOA
veTSOP
ID3 etiketleriyle eşleniyordu (#1302). - Değer bir bayttan uzun olduğunda MP4 (/iTunes) sayısal
gnre
(tür) vetmpo
(tempo) etiketlerinin okunması düzeltildi. - ID3
TCON
çerçevesiniMediaMetadata.genre
'a aktarın (#1305).
- MP4 ile ID3 sıralama etiketlerinin eşlenmesi düzeltildi. Daha önce MP4'teki "albüm sıralaması" (
- Resim:
- Kare olmayan DASH küçük resim ızgaraları için destek ekleyin (#1300).
- API 34 ve sonraki sürümler için AVIF desteği eklendi.
- Daha önce ayarlanmış bir
ImageOutput
değerini temizlemek içinExoPlayer.setImageOutput()
parametresi olaraknull
değerine izin verin.
- Veri Kaynağı:
package
'ın mevcut uygulamanın paketinden farklı olduğuandroid.resource://package/id
ham kaynak URI'leri için destek uygulayın. Bu yöntemin daha önce çalıştığının belirtilmediği halde, başka bir paketteki kaynaklara ada göre erişmekten daha verimli bir yöntemdir.DataSpec
yapıcılarındaurl
değerinin null olmadığından emin olun. Bu parametre zaten boş olmayan olarak ek açıklamaya sahipti.ByteArrayDataSource
'ün, URI'yi oluşturma sırasında sabit kodlanmış olarak kullanmak yerineopen()
sırasında bir bayt dizisi olarak çözmesine izin verin (#1405).
- DRM:
DefaultDrmSessionManagerProvider
üzerindeLoadErrorHandlingPolicy
ayarlamaya izin verin (#1271).
- Etki:
SpeedChangeEffect
'de aynıEditedMediaItem
veyaComposition
içinde birden fazla hız değişikliğini destekler.- Ultra HDR bitmap girişinden HLG ve PQ çıkışı desteği.
- ExoPlayer.setVideoEffect ve Transformer'ın Debug SurfaceView'ında HLG yüzey çıkışını iyileştiren EGL_GL_COLORSPACE_BT2020_HLG_EXT desteği eklendi.
setOverlayFrameAnchor()
içinde uygulanan x ve y değerlerini çevirerek yer paylaşımı matrisi uygulamasını dokümanlarla tutarlı olacak şekilde güncelleyin.OverlaySettings.Builder.setOverlayFrameAnchor()
kullanıyorsanız x ve y değerlerini-1
ile çarparak tersine çevirin.TimestampWrapper
'ünExoPlayer#setVideoEffects
ile birlikte kullanıldığında kilitlenmesine yol açan hata düzeltildi (#821).- Varsayılan SDR renk çalışma alanını doğrusal renklerden elektrik BT 709 SDR videosuna değiştirin. Ayrıca orijinal renk alanını korumak için üçüncü bir seçenek de sunun.
- EditedMediaItemSequences için belirsiz z-sırasının tanımlanmasına izin verin (#1055).
- Farklı HDR içerik parçalarında tutarlı bir parlaklık aralığı kullanın (HLG aralığı kullanılır).
- HDR içeriklerde Ultra HDR (bit eşleme) yer paylaşımları için destek ekleme.
- API 26'dan önce
SeparableConvolution
efektlerinin kullanılmasına izin verin. - Yer paylaşımının ve çerçevenin dinamik aralığı eşleşmesi gerektiğinden kullanılmayan
OverlaySettings.useHdr
öğesini kaldırın. TextOverlay
için HDR desteği ekleyin. Metin yer paylaşımının parlaklığıOverlaySettings.Builder.setHdrLuminanceMultiplier()
ile ayarlanabilir.
- IMA uzantısı:
- Uygulamaların DAI reklam akışlarını oynatması için gereken API'yi kararlı sürüme geçirin.
- Reklam etiketi parametrelerinin çalışma zamanında değiştirilmesine olanak tanıyan
replaceAdTagParameters(Map <String, String>)
öğesiniImaServerSideAdInsertionMediaSource.AdLoader
içine ekleyin. - Reklam oynatma sırasında bir oynatıcı hatası oluştuğunda
VideoAdPlayer.VideoAdPlayerCallback.onError()
işlevinin çağrılmadığı hata düzeltildi (#1334). data://
reklam etiketi URI'leri kullanılırken ortaya çıkanNullPointerException
hatasını düzeltmek için IMA SDK sürümünü 3.33.0'a yükseltin (#700).
- Oturum:
CommandButton.enabled
değerinin varsayılan değerinitrue
olarak değiştirin ve ilişkili komut mevcut olsa bile değerin kontrolörler için yanlış olarak kalmasını sağlayın.- Özel simge kaynakları yerine kullanılacak
CommandButton
için simge sabitleri ekleyin. - Uygulamaların, hizmetin
onTaskRemoved()
'te durdurulup durdurulmayacağını sorgulamasına izin vermek içinMediaSessionService.isPlaybackOngoing()
değerini ekleyin (#1219). - Tüm oturumların oynatılmasını duraklatmayı kolaylaştıran
MediaSessionService.pauseAllPlayersAndStopSelf()
'ü ekleyin veMediaSessionService
'nin yaşam döngüsünü sonlandırmak içinstopSelf()
'ı çağırın. - Oynatma devam ediyorsa hizmeti ön planda çalıştıran veya aksi takdirde durduran güvenli bir varsayılan uygulama sağlamak için
MediaSessionService.onTaskRemoved(Intent)
değerini geçersiz kılın. - Platform oturumu meta verilerine süreyi ayarlayarak canlı yayınların medya bildirimindeki ilerleme çubuğunu gizleme (#1256).
- Meta veri özelliklerini seçerken media1'de olduğu gibi aynı tercih edilen sırayı ve mantığı kullanmak için
MediaMetadata
dönüşümünüMediaDescriptionCompat
ile uyumlu hale getirin. - Media3 denetleyicisine önemli olmayan hataların gönderilmesine izin veren
MediaSession.sendError()
öğesini ekleyin. Bildirim denetleyicisi kullanıldığında (MediaSession.getMediaNotificationControllerInfo()
bölümüne bakın), özel hata, platform oturumununPlaybackState
değerini belirli hata bilgileriyle hata durumuna güncellemek için kullanılır (#543). - Belirli bir kumandadaki bir dizi oyuncu etkileşimi sona erdiğinde oturumları bilgilendirmek için
MediaSession.Callback.onPlayerInteractionFinished()
ekleyin. - Hata ve mümkünse hatanın nasıl çözüleceği hakkında daha fazla bilgi sağlamak için
SessionError
ekleyin ve hata kodu yerineSessionResult
veLibraryResult
içinde kullanın. - Medya oturumu yayınlayan uygulamalarla etkileşimleri test etmek için kullanılabilecek media3 denetleyici test uygulamasının kodunu yayınlayın.
- media3'ün
MediaSession[Builder].setSessionExtras()
özelliğine iletilen ekstraları media1 denetleyicisininPlaybackStateCompat.getExtras()
özelliğine iletin. - Önemli ve önemsiz hataları platform oturumuyla eşleyin. Bir
PlaybackException
,PlaybackStateCompat
'un kritik hata durumuyla eşlenir. Medya bildirim denetleyicisineMediaSession.sendError(ControllerInfo, SessionError)
ile gönderilen birSessionError
,PlaybackStateCompat
'de kritik olmayan bir hatayla eşlenir. Bu, hata kodu ve mesajın ayarlandığı ancak platform oturumunun durumununSTATE_ERROR
'tan farklı kaldığı anlamına gelir. - Genel oturum etkinliğini geçersiz kılmak için oturum etkinliğinin kontrol cihazı başına ayarlanmasına izin verin. Oturum etkinliği,
AcceptedResultBuilder.setSessionActivivty(PendingIntent)
ileConnectionResult
oluşturarak bağlantı sırasında bir kontrolör için tanımlanabilir. Bağlantı kurulduktan sonra oturum etkinliğiMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
ile güncellenebilir. MediaLibrarySession.Callback
'e yapılan çağrıların hata kopyalama işlemi iyileştirildi. Hata çoğaltma özelliği artık hata türünü seçmek veya varsayılan olarak etkin olan hata çoğaltmayı devre dışı bırakmak içinMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
kullanılarak yapılandırılabilir.
- Kullanıcı Arayüzü:
ExoPlayer
'a bağlıykenPlayerView
'e resim görüntüleme desteği ekleyin (#1144).- XML özellikleri aracılığıyla
PlayerControlView
'teki çeşitli simgelerin özelleştirmesini ekleyin. Böylece, genel geçersiz kılma yerine (#1200)PlayerView
örneği başına farklı çizilebilir öğelere izin verebilirsiniz. - API 34'te bir Oluştur
AndroidView
içindeSurfaceView
kullanıldığında videonun uzatılmasına/kırpılmasına neden olan platform hatasını giderme (#1237).
- İndirilenler:
DownloadHelper
'ün, yayınlanmamışRenderer
örneklerini sızdırmadığından emin olun. Bu durum, uygulamanınIllegalStateException: Too many receivers, total of 1000, registered for pid
ile kilitlenmesine neden olabilir (#1224).
- Cronet Uzantısı:
CronetDataSource
'teSocketTimeoutException
sorununu düzeltin. Cronet'in bazı sürümlerinde geri çağırma işlevi tarafından sağlanan istek her zaman aynı değildir. Bu durum, geri çağırma işleminin tamamlanmamasına ve isteğin zaman aşımına uğramasına neden olur (https://issuetracker.google.com/328442628).
- HLS Uzantısı:
- Kesintiyi bekleyen bekleyen EMSG örneklerinin,
HlsSampleStreamWrapper
içinde yanlış bir ofsetle atanması ve bunun sonucundaIndexOutOfBoundsException
veyaIllegalArgumentException
oluşmasına yol açan hata düzeltildi (#1002). - Birincil olmayan oynatma listelerinin LL-HLS yayınları için sürekli yeniden yüklenmesine neden olan hata düzeltildi (#1240).
- Başlatma segmentleriyle HLS için CMCD'nin etkinleştirilmesinin
Source Error
veIllegalArgumentException
ile sonuçlandığı hatayı düzeltin. - Canlı oynatma sırasında birincil olmayan oynatma listelerinin yenilenmemesi hatası düzeltildi (#1240).
- HLS canlı yayınları için CMCD'nin etkinleştirilmesinin
ArrayIndexOutOfBoundsException
(#1395) hatasına neden olduğu sorun düzeltildi.
- Kesintiyi bekleyen bekleyen EMSG örneklerinin,
- DASH Uzantısı:
- Cast Uzantısı:
MediaQueueItem
albüm başlığını Media3 medya öğesindeki sanatçıya dönüştüren hatayı düzeltin (#1255).
- Test Yardımcı Programları:
FakeRenderer
'deonInit()
veonRelease()
işaretlemelerini uygulayın.TestPlayerRunHelper.runUntil()/playUntil()
yöntemlerini, önemli olmayan hatalarda (ör.AnalyticsListener.onVideoCodecError()
'a bildirilenler) başarısız olacak şekilde değiştirin. Bu davranışı devre dışı bırakmak için yeniTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
yöntem zincirini kullanın.
- Demo uygulama:
- Kısa form demo uygulamasında
DefaultPreloadManager
kullanın. - Tekrar modunu komut satırından
Intent
bağımsız değişkenleriyle ayarlamaya izin verin (#1266). - Cihaz tarafından destekleniyorsa
HttpDataSource
olarakHttpEngineDataSource
kullanın.
- Kısa form demo uygulamasında
- Desteği sonlandırılan sembolleri kaldırın:
CronetDataSourceFactory
öğesini kaldırın. Bunun yerineCronetDataSource.Factory
kullanın.- Bazı
DataSpec
kurucularını kaldırın. Bunun yerineDataSpec.Builder
politikasını kullanın. setContentTypePredicate(Predicate)
yönteminiDefaultHttpDataSource
,OkHttpDataSource
veCronetDataSource
'ten kaldırın. Bunun yerine herXXXDataSource.Factory
için eşdeğer yöntemi kullanın.OkHttpDataSource
kurucularını veOkHttpDataSourceFactory
'ı kaldırın. Bunun yerineOkHttpDataSource.Factory
politikasını kullanın.PlayerMessage.setHandler(Handler)
öğesini kaldırın. Bunun yerinesetLooper(Looper)
kullanın.Timeline.Window.isLive
alanını kaldırın. Bunun yerineisLive()
yöntemini kullanın.DefaultHttpDataSource
kurucularını kaldırın. Bunun yerineDefaultHttpDataSource.Factory
kullanın.DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
öğesini kaldırın. Bunun yerineDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
kullanın.MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
öğesini kaldırın. Bunun yerineMediaCodecInfo.canReuseCodec(Format, Format)
politikasını kullanın.DrmSessionManager.DUMMY
vegetDummyDrmSessionManager()
yöntemini kaldırın. Bunun yerineDrmSessionManager.DRM_UNSUPPORTED
politikasını kullanın.AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
öğelerini kaldırın. Bunun yerineDecoderReuseEvaluation
alan adı alan aşırı yüklemeleri kullanın.RendererSupport.FormatSupport
IntDef veFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
sabitlerini kaldırın. Bunun yerineandroidx.media3.common.C
'teki eşdeğer IntDef ve sabitleri kullanın (ör.C.FORMAT_HANDLED
).Bundleable
arayüzünü kaldırın. Buna tümBundleable.Creator<Foo> CREATOR
sabit alanlarının kaldırılması da dahildir. Arama yapanlar bunun yerine her türdeBundle toBundle()
vestatic Foo fromBundle(Bundle)
yöntemlerini kullanmalıdır.
Sürüm 1.4.0-rc01
10 Temmuz 2024
1.4.0 kararlı sürümünü kullanın.
Sürüm 1.4.0-beta01
26 Haziran 2024
1.4.0 kararlı sürümünü kullanın.
Sürüm 1.4.0-alpha02
7 Haziran 2024
1.4.0 kararlı sürümünü kullanın.
Sürüm 1.4.0-alpha01
17 Nisan 2024
1.4.0 kararlı sürümünü kullanın.
1.3.0 sürümü
1.3.1 sürümü
11 Nisan 2024
androidx.media3:media3-*:1.3.1
yayınlanır.
1.3.1 sürümü bu taahhütleri içerir.
- Ortak Kitaplık:
- Yerelleştirilmiş veya diğer alternatif etiketlere izin vermek için
Format.labels
ekleyin.
- Yerelleştirilmiş veya diğer alternatif etiketlere izin vermek için
- ExoPlayer:
PreloadMediaPeriod
'ün yeniden önceden yüklendiğinde akışları koruyamamasına neden olan sorun düzeltildi.- Parçayı yeniden seçerken oynatma dönemine doğru
TrackSelectionResult
değerini uygulayın. - Erken etkinleştirilen oluşturucular, medya öğeleri arasında geçiş yaparken yalnızca oynatma süresini ilerlettikten sonra başlatılmalıdır (#1017).
DefaultVideoFrameProcessor.Factory.Builder.build()
için proguard-keepclasseswithmembers
kuralına eksik döndürme türünü ekleyin (#1187).
- Dönüştürücü:
- API 30'dan önce
MediaMuxer
negatif sunum zaman damgalarını desteklemediği için istisna atılması sorununa geçici çözüm ekleyin.
- API 30'dan önce
- Parça Seçimi:
DefaultTrackSelector
: Daha düşük veya ayarlanmamış kare hızına sahip video parçalarına kıyasla "makul" kare hızına (>=10 fps) sahip video parçalarını tercih edin. Bu sayede oynatıcı, hareketli fotoğraflardan ayıklanan MP4'lerde "gerçek" video parçasını seçer. Bu MP4'ler, biri daha yüksek çözünürlükte ancak çok az sayıda kare içeren iki HEVC parçası içerebilir (#1051).
- Ayıklayıcılar:
- WAV dosyalarından tek sayılı boyutlarda parçalar okunurken dolgunun atlanmamasına neden olan sorun düzeltildi (#1117).
- MP3:
Format.averageBitrate
öğesiniXING
veVBRI
gibi meta veri çerçevelerinden doldurun. - MPEG-TS: Bir akıştaki son erişim birimini örnek kuyruğuna aktararak son karenin oluşturulmasını sağlamayı amaçlayan bir değişikliği geri alın (#7909). Bunun nedeni, yalnızca I-frame HLS yayınlarında (#1150) ve H.262 HLS yayınlarında (#1126) yeni sorunlara neden olan değişikliktir.
- Ses:
- Ses parçası, aktarma modunda başlatılamazsa aktarma işlemini devre dışı bırakarak oluşturma aracının kurtarılmasına izin verin.
- Video:
- Galaxy Tab S7 FE, Google TV Yüklü Chromecast ve Lenovo M10 FHD Plus'ta 60 fps H265 yayınlarının desteklenmiyor olarak işaretlenmesine neden olan cihaz sorunu için geçici çözüm ekleme
- Cihaz, API tarafından gerektiği gibi bunu otomatik olarak yapmasa bile tünel oluşturma sırasında ilk karenin her zaman oluşturulmasını sağlayan geçici çözümü ekleyin (#1169). (#966).
- HDR renk bilgisinin işlenmesi nedeniyle codec'in yanlış davranmasına ve SDR video parçaları için uyarlanabilir biçim geçişlerinin yapılmasına engel olan sorunu düzeltin (#1158).
- Metin:
- WebVTT: Doğrudan art arda gelen işaretçilerin,
WebvttParser.parse
öğesindenCuesWithTiming
öğesi oluşturmasını engelleyin (#1177).
- WebVTT: Doğrudan art arda gelen işaretçilerin,
- DRM:
- Bazı Android 14 cihazlarda
ResourceBusyException
veyaNotProvisionedException
yerineMediaDrm
çerçevesi tarafından atılabilenNoSuchMethodError
sorununu giderme (#1145).
- Bazı Android 14 cihazlarda
- Etki:
- Renk alanlarını dönüştürerek PQ'den SDR'ye ton eşleme özelliği iyileştirildi.
- Oturum:
- Kullanıcı Arayüzü:
Locale
görünen ad tanımlayamazsa ses parçasının dil adını eklemek için yedek (#988).
- DASH Uzantısı:
- Manifest'teki tüm
Label
öğeleriniFormat.labels
ile doldurun (#1054).
- Manifest'teki tüm
- RTSP Uzantısı:
- SDP ayrıştırmasında boş oturum bilgileri değerlerini (i-etiketleri) atlama (#1087).
- Kod Çözücü Uzantıları (FFmpeg, VP9, AV1, MIDI vb.):
- MIDI uzantısı, yapılandırılmak için ek bir Maven deposu gerektirdiğinden varsayılan olarak yerel bağımlılık olarak devre dışı bırakılır. Yerel bir bağımlılıktan bu modüle ihtiyaç duyan kullanıcılar modülü yeniden etkinleştirebilir.
1.3.0 sürümü
6 Mart 2024
androidx.media3:media3-*:1.3.0
yayınlanır.
1.3.0 sürümü bu taahhütleri içerir.
- Ortak Kitaplık:
package
'ın mevcut uygulamanın paketinden farklı olduğuandroid.resource://package/[type/]name
ham kaynak URI'leri için destek uygulayın. Bu yöntemin her zaman çalışacağı belirtilmiş olsa da bugüne kadar doğru şekilde uygulanmamıştır.- Uygulama kodu tarafından ayarlanan veya medyadan okunan MIME türlerini tamamen küçük harf olacak şekilde normalleştirin.
AdPlaybackState
dosyasında reklamları tek birUri
yerine tamMediaItem
ile tanımlayın.minSdk
değerini 19'a yükseltin (Android KitKat). Bu, diğer tüm AndroidX kitaplıklarıyla uyumludur ve AndroidX bağımlılıklarımızın en son sürümlerine yükseltmemiz için gereklidir.- Bunlardan en az biri boş olmadığında
MediaMetadata.Builder.populate(MediaMetadata)
içinde hemartworkUri
hem deartworkData
doldurulur (#964).
- ExoPlayer:
- Uygulamaların oynatmadan önce belirli bir başlangıç konumunda bir içerik medya kaynağını önceden yüklemesine olanak tanıyan
PreloadMediaSource
vePreloadMediaPeriod
öğelerini ekleyin.PreloadMediaSource
, içerik medya kaynağınıTimeline
'ü alacak şekilde hazırlama, belirtilen başlangıç konumunda dönemi hazırlama ve önbelleğe alma, parçaları seçme ve döneme ait medya verilerini yükleme işlemlerini gerçekleştirir. Uygulamalar,PreloadMediaSource.PreloadControl
uygulayarak önceden yükleme ilerleme durumunu kontrol eder ve önceden yüklenmiş kaynağı oynatıcıya ayarlayarak oynatır. - Uygulamaların
ImageRenderer.ImageOutput
ayarlarına izin verenExoPlayer.setImageOutput
ekleyin. DefaultRenderersFactory
artık varsayılan olarak boşImageOutput
veImageDecoder.Factory.DEFAULT
ile birlikte oynatıcıya birImageRenderer
sağlar.- Sessiz mod atlandığında
Player.Listener.onPositionDiscontinuity
etkinliği yayınlama (#765). - Ayıklama sırasında altyazı ayrıştırma için deneysel destek ekleme. Bu özelliği
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
kullanarak etkinleştirebilirsiniz. PreloadMediaSource
ile uyarlanabilir medya kaynaklarını destekleyin.- HttpEngine API'sini kullanarak
HttpDataSource
olanHttpEngineDataSource
'ü uygulayın. CompositeSequenceableLoader
alt sınıflandırmasını önleyin. Bu bileşen daha önce genişletilebilir hale getirilmişti ancak kitaplıkta hiçbir zaman alt sınıfa ayrılmamıştı. Özelleştirmeler, süsleyici kalıbı kullanılarak bir örneği sarmalayarak ve özel birCompositeSequenceableLoaderFactory
uygulayarak yapılabilir.- Aynı zamanın tekrarlanmasının, bu öğenin meta verilerinin temizlenmesine neden olduğu sorun düzeltildi (#1007).
BundledChunkExtractor.Factory
veDefaultHlsExtractorFactory
üzerindekiexperimentalSetSubtitleParserFactory
yöntemlerinisetSubtitleParserFactory
olarak yeniden adlandırın venull
iletme işlemine izin vermeyin. Ayrıştırma davranışını kontrol etmek için yeniexperimentalParseSubtitlesDuringExtraction(boolean)
yöntemlerini kullanın.- Ayıklama sırasında kullanılan
SubtitleParser.Factory
öğesini özelleştirme desteği eklendi. BunuMediaSource.Factory.setSubtitleParserFactory()
ile yapabilirsiniz. MergingMediaSource
kaynağından oluşturulan tümFormat.id
alanlarına kaynak ön ek ekleyin. Bu, hangi kaynağınFormat
(#883) oluşturduğunu belirlemenize yardımcı olur.- Özel Common Media Client Data (CMCD) anahtar adlarını doğrulamak için kullanılan normal ifadeyi, yalnızca kısa çizgi olup olmadığını kontrol edecek şekilde değiştirerek düzeltin (#1028).
- CMCD sorgu parametrelerinin çift kodlamasını durdurun (#1075).
- Uygulamaların oynatmadan önce belirli bir başlangıç konumunda bir içerik medya kaynağını önceden yüklemesine olanak tanıyan
- Dönüştürücü:
- H.265/HEVC SEF ağır çekim videolarını düzleştirme desteği eklendi.
- Özellikle "videoyu kaldırma" düzenlemeleri için kod dönüştürme hızını artırın.
- Çıkış dosyasının bir video karesiyle başlamasını sağlamak için API ekleyin. Bu, kırpma işlemlerinin çıktısını, ilk video karesini sunum zaman damgasına kadar göstermeyen oynatıcı uygulamalarıyla daha uyumlu hale getirebilir (#829).
- Tek öğe MP4 kırpma işlemlerini optimize etme desteği eklendi.
- Video karesinde çıkış dosyasında ilk zaman damgasının bulunduğundan emin olmak için destek ekleyin. iOS tabanlı oynatıcılarda siyah çerçeveyle başlayan çıkış dosyalarını düzeltir (#829).
- Parça Seçimi:
- Resim parçası seçimini etkinleştirmek için
DefaultTrackSelector.selectImageTrack
ekleyin. - Hem resim parçası hem de video parçası varsa resim parçasının seçilip seçilmeyeceğini belirlemek için
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
ekleyin. Varsayılan değerfalse
'tür. Bu, video parçasının seçilmesine öncelik verildiği anlamına gelir.
- Resim parçası seçimini etkinleştirmek için
- Ayıklayıcılar:
ColorInfo.colorSpace
,ColorInfo.colorTransfer
veColorInfo.colorRange
değerlerini almak için MP4 çıkarıcıya ek AV1C ayrıştırma ekleyin (#692).- MP3:
Info
başlığı (Xing
başlığının CBR eşdeğeri) olan dosyalar için sabit bit hızı (CBR) araması kullanın. Daha önceInfo
başlığındaki arama tablosunu kullanıyorduk ancak bu, tabloyu yok sayıp dosyanın CBR olduğunu varsaydığımızdan daha az hassas arama sonuçlarına neden oluyordu. - MPEG2-TS: DTS, DTS-LBR ve DTS:X Profile2 desteği ekleyin (#275).
- TS tanımlayıcılarından ses türlerini ayıklayın ve bunları rol işaretleriyle eşleyin. Böylece kullanıcılar daha bilinçli ses parçası seçimleri yapabilir (#973).
- Ses:
- Video:
VideoFrameProcessor.Factory
bağımsız değişkeni alanMediaCodecVideoRenderer
oluşturucuyu değiştiripVideoSinkProvider
bağımsız değişkeni alan bir oluşturucuyla değiştirin. Özel birVideoFrameProcessor.Factory
eklemek isteyen uygulamalar, özelVideoFrameProcessor.Factory
kullanan birCompositingVideoSinkProvider
örneği oluşturabilir ve video alıcı sağlayıcıyıMediaCodecVideoRenderer
'ye iletebilir.
- Metin:
DefaultExtractorsFactory.setTextTrackTranscodingEnabled
kullanılırkenTried to marshall a Parcel that contained Binder objects
hatasını çözmek için bitmap ipuçlarının serileştirilmesini düzeltin (#836).- CEA-708:
rowLock
değerini yoksay. CEA-708-E S-2023 spesifikasyonunda, akıştaki değerlerden bağımsız olarakrowLock
vecolumnLock
değerlerinin her ikisinin de doğru olduğu varsayılır (columnLock
desteği uygulanmadığından her zaman yanlış olduğu varsayılır).
- Resim:
- DASH küçük resimleri için destek eklendi. Grid resimleri kırpılır ve sunum zamanlarına yakın
ImageOutput
ayrı küçük resimler sağlanır.
- DASH küçük resimleri için destek eklendi. Grid resimleri kırpılır ve sunum zamanlarına yakın
- DRM:
- Daha sonra şifrelenmiş örneklerin anahtarları henüz hazır olmasa bile, DRM içeriğindeki "net ses" şifrelenmemiş örnekleri varsayılan olarak hemen oynatın. Oynatma konumu şifrelenmiş örneklere ulaştığında anahtarlar hâlâ hazır değilse bu durum oynatma sırasında takılmalara neden olabilir (ancak daha önce bu noktaya kadar oynatma hiç başlamazdı). Bu davranış,
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
veyaDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
ile devre dışı bırakılabilir.
- Daha sonra şifrelenmiş örneklerin anahtarları henüz hazır olmasa bile, DRM içeriğindeki "net ses" şifrelenmemiş örnekleri varsayılan olarak hemen oynatın. Oynatma konumu şifrelenmiş örneklere ulaştığında anahtarlar hâlâ hazır değilse bu durum oynatma sırasında takılmalara neden olabilir (ancak daha önce bu noktaya kadar oynatma hiç başlamazdı). Bu davranış,
- IMA uzantısı:
- Uygun dosya uzantısı olmayan DASH ve HLS reklamların oynatılamama sorunu düzeltildi.
- Oturum:
- TV uygulamaları için çift tıklama algılamayı devre dışı bırakma (#962).
- Yalnızca null olmayan ekstralar içeren
MediaItem.RequestMetadata
öğesinin medya denetleyicileri ve oturumlar arasında iletilmemesi sorunu düzeltildi. MediaLibrarySession.Builder
sınıfına,MediaLibraryService
yerine yalnızcaContext
alan bir kurucu ekleyin.
- HLS Uzantısı:
HlsMediaPeriod
değerini pakete özel görünürlük olarak azaltın. Bu tür, HLS paketinin dışından doğrudan bağımlı olmamalıdır.- Çözüm, bir segmentin başlangıcını daha verimli bir şekilde bulmaya çalışır (#1031).
- Kod Çözücü Uzantıları (FFmpeg, VP9, AV1, MIDI vb.):
- MIDI kod çözücü: SysEx etkinlik mesajlarını yoksay (#710).
- Test Yardımcı Programları:
TestPlayerRunHelper.playUntilPosition
'te oynatmayı duraklatmayın. Test, oynatmayı oynatma durumunda tutar ancak test, iddialar ve başka işlemler ekleyene kadar ilerlemeyi askıya alır.
- Demo uygulama:
- Kısa içerik kullanım alanında
PreloadMediaSource
'ün kullanımını göstermek için kısa bir demo modülü ekleyin.
- Kısa içerik kullanım alanında
Sürüm 1.3.0-rc01
22 Şubat 2024
1.3.0 kararlı sürümünü kullanın.
Sürüm 1.3.0-beta01
7 Şubat 2024
1.3.0 kararlı sürümünü kullanın.
Sürüm 1.3.0-alpha01
15 Ocak 2024
1.3.0 kararlı sürümünü kullanın.
Sürüm 1.2.0
Sürüm 1.2.1
9 Ocak 2024
- ExoPlayer:
LiveConfiguration.min/maxOffset
aralığının dışında manuel arama yapıldığında ofsetinmin/maxOffset
değerine geri ayarlanmaya devam etmesiyle ilgili sorun düzeltildi.- 3, 5, 6, 7 ve 8 kanal için OPUS ve VORBIS kanal düzenlerinin yanlış olması sorunu düzeltildi (#8396).
- Canlı yayında sıfıra ilerleme yapıldıktan sonra parça seçimlerinin, yayının varsayılan konumda başlatılmasına neden olduğu sorun düzeltildi (#9347).
- Yeni
CmcdData.Factory
örneklerinin,bufferedDurationUs
için parça kaynaklarından negatif değerler alması ve bunun sonucundaIllegalArgumentException
(#888) oluşması sorunu düzeltildi.
- Dönüştürücü:
- Kodlayıcının, yüksek çalışma hızı ayarlanmasından dolayı yapılandırma sırasında hata vermesine yol açan sorunu giderme
- Ayıklayıcılar:
- JPEG hareketli fotoğraflardaki ikincil (oynatılamayan) HEVC parçalarını, daha yüksek çözünürlükleri nedeniyle oynatılmak üzere otomatik olarak seçilmelerini önlemek için
ROLE_FLAG_ALTERNATE
olarak işaretleyin. - TS H264 akışları için yanlış animasyon karesi algılama sorununu düzeltin (#864).
- 47.721 saniyeden uzun TS akışlarının süre tahminini düzeltin (#855).
- JPEG hareketli fotoğraflardaki ikincil (oynatılamayan) HEVC parçalarını, daha yüksek çözünürlükleri nedeniyle oynatılmak üzere otomatik olarak seçilmelerini önlemek için
- Ses:
- Birden çok kez çağrıldığında
SilenceSkippingAudioProcessor
için EOS'un işlenmesi düzeltildi (#712).
- Birden çok kez çağrıldığında
- Video:
- Galaxy Tab S7 FE, Google TV Yüklü Chromecast ve Lenovo M10 FHD Plus'ta 60 fps AVC akışlarının desteklenmiyor olarak işaretlenmesine neden olan cihaz sorunu için geçici çözüm eklendi (#693).
- Meta veriler:
MediaMetadata
değerinin yalnızca büyük harfli anahtarlarla Vorbis yorumlarından doldurulduğu hatayı düzeltin (#876).- Çok büyük ID3 çerçeveleri ayrıştırılırken
OutOfMemoryError
yakalanır. Bu durumda, oynatma tamamen başarısız olmak yerine etiket bilgileri olmadan devam edebilir.
- DRM:
- Sahte ClearKey
https://default.url
lisans URL'si için geçici çözümü API 33 ve sonraki sürümlere genişletin (eskiden geçici çözüm yalnızca API 33'te uygulanıyordu) (#837). - Oynatıcıya bağlı bir yüzey olmadan şifrelenmiş içerikten net içeriğe geçiş yaparken
ERROR_DRM_SESSION_NOT_OPENED
hatası düzeltildi. Hata, net içeriği oynatmak için güvenli bir kod çözücünün yanlış kullanılmasından kaynaklanıyordu.
- Sahte ClearKey
- Oturum:
- Özel anahtarları ve değerleri
MediaMetadataCompat
ileMediaMetadata.extras
arasına,MediaMetadata.extras
ileMediaMetadataCompat
arasına yerleştirin (#756, #802). - Eski kontrolörler için
notifyChildrenChanged
yayını düzeltme (#644). - Bildirimin devre dışı bırakılmış
setWhen
zamanlayıcısı için negatif bir zaman ayarlandığında bazı cihazlarda kilitlenmeye neden olan hata düzeltildi (#903). - İlk bildirim güncellemesi istendiğinde medya bildirimi denetleyicisi bağlantıyı tamamlamamışsa
IllegalStateException
hatasını düzeltin (#917).
- Özel anahtarları ve değerleri
- Kullanıcı Arayüzü:
- DASH Uzantısı:
- DASH manifestinde Dolby için "f800" değerini 5 kanal sayısı olarak ayrıştırın (#688).
- Kod Çözücü Uzantıları (FFmpeg, VP9, AV1, MIDI vb.):
- Cast Uzantısı:
- Yayın cihazında medya yükleme başarısız olduğunda uygulamanın kilitlenmemesi için
Timeline
oluşturma işlemini temizleyin (#708).
- Yayın cihazında medya yükleme başarısız olduğunda uygulamanın kilitlenmemesi için
Sürüm 1.2.0
15 Kasım 2023
- Ortak Kitaplık:
Log.Logger
arayüzündeki yöntemlere@Nullable Throwable
parametresi ekleyin. Bu yöntemlerinmessage
parametresi artıkLog.{d,i,w,e}()
yöntemlerine iletilenThrowable
hakkında herhangi bir bilgi içermiyor. Bu nedenle, isterseniz uygulamalarınızın bu bilgileri manuel olarak eklemesi gerekir (muhtemelenLogger.appendThrowableString(String, Throwable)
kullanılarak).- Boş değer atanabilir genel tür parametrelerinin ve boş değer atanabilir dizi öğesi türlerinin boş değer atanabilir olarak algılanmamasına neden olan Kotlin uyumluluğu sorunu düzeltildi. Örnekler
TrackSelectorResult
veSimpleDecoder
yöntem parametreleridir (#6792). - Oynatma geçici olarak engellenirken (ör. geçici ses odak kaybı nedeniyle)
Util.shouldShowPlayButton
'te varsayılan kullanıcı arayüzü ve bildirim davranışını "çal" düğmesi gösterecek şekilde değiştirin. Eski davranış,PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
veyaMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
kullanılarak sürdürülebilir (#11213). - https://issuetracker.google.com/251172715 sorununu düzeltmek için
androidx.annotation:annotation-experimental
sürümünü1.3.1
sürümüne yükseltin. ExoPlayer.setAudioAttributes
öğesiniPlayer
arayüzüne taşıyın.
- ExoPlayer:
- AC4 yayınlarında, yalnızca kod çözme amaçlı örneklerin doğru şekilde tanımlanmamasından kaynaklanan arama sorunlarını düzeltin (#11000).
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
aracılığıyla bu özellik etkinleştirildiğinde, uygun olmayan ses çıkış cihazlarında (ör. Wear OS cihazlardaki yerleşik hoparlör) oynatma işleminin engellenmesini ekleyin. Uygun ses çıkışı olmadığında veya uygun çıkışların tümü oynatma sırasında bağlantısını kestikten sonra oynatma denemesi yapılırsa oynatma engelleme nedeniPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
olarak güncellenir. Uygun bir çıkış bağlandığında engelleme nedeni kaldırılır.Player.replaceMediaItem(s)
üzerinden oluşturulduktan sonraMediaItem
güncellemelerini kabul etmek içinMediaSource.canUpdateMediaItem
veMediaSource.updateMediaItem
ekleyin.- Kitaplığın
Player.replaceMediaItem(s)
üzerinden sağladığı tümMediaSource
sınıfları içinMediaItem
güncellemelerine izin verin (#33, #9978). MimeTypes.TEXT_EXOPLAYER_CUES
'üMimeTypes.APPLICATION_MEDIA3_CUES
olarak yeniden adlandırın.- Bir PNG dosyasının tamamını gönderip okuyan
PngExtractor
işleviniTrackOutput
içine tek bir örnek olarak ekleyin. SequenceableLoader
arayüzündekiSequenceableLoader.continueLoading(long)
yönteminiSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
olarak geliştirin.LoadingInfo
, mevcutplaybackPositionUs
'a ek olarakplaybackSpeed
velastRebufferRealtimeMs
gibi ek parametreler içerir.ChunkSource
arayüzündekiChunkSource.getNextChunk(long, long, List, ChunkHolder)
yönteminiChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
olarak iyileştirin.- Common Media Client Data (CMCD) günlük kaydına ek alanlar ekleyin: arabelleğe alma açlığı (
bs
), son tarih (dl
), oynatma hızı (pr
) ve başlatma (su
) (#8699). ColorInfo
(#491) özelliğine parlaklık ve renk bit derinliği ekleyin.- Ortak Medya İstemci Verileri (CMCD) günlük kaydına ek alanlar ekleyin: sonraki nesne isteği (
nor
) ve sonraki aralık isteği (nrr
) (#8699). - Sorgu parametrelerini kullanarak Common Media Client Data (CMCD) verilerini iletme işlevi ekleyin (#553).
ExperimentalBandwidthMeter
'tekiConcurrentModificationException
sorununu düzeltin (#612).CompositeMediaSource.getMediaTimeForChildMediaTime
parametresiniMediaPeriodId
alanına ekleyin.ConcatenatingMediaSource2
'teClippingMediaSource
(ve dönem/pencere zaman ofsetleri olan diğer kaynaklar) desteği (#11226).BaseRenderer.onStreamChanged()
işlevini,MediaPeriodId
bağımsız değişkenini de alacak şekilde değiştirin.
- Dönüştürücü:
- Resim girişleri için EXIF döndürme verilerini ayrıştırın.
TransformationRequest.HdrMode
ek açıklama türünü ve ilişkili sabitlerini kaldırın. Bunun yerineComposition.HdrMode
ve ilişkili sabitleri kullanın.- Döndürme sorunlarını düzeltmek için
OverlaySettings
öğesini basitleştirin. SampleConsumer.queueInputBitmap
içinframeRate
vedurationUs
parametreleriTimestampIterator
olarak değiştirildi.
- Parça Seçimi:
- Sorunsuz olmayan uyarlamaya açıkça izin vermek veya izin vermemek için
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
ekleyin. Varsayılan değer,true
olan mevcut davranışında kalır.
- Sorunsuz olmayan uyarlamaya açıkça izin vermek veya izin vermemek için
- Ayıklayıcılar:
- MPEG-TS: Bir yayının son erişim birimini örnek kuyruğuna aktararak son karenin oluşturulmasını sağlayın (#7909).
rotationDegrees
değerini belirlerken yazım hatası düzeltildi.projectionPosePitch
yerineprojectionPoseRoll
kullanıldı (#461).Extractor
örneklerinininstanceof
ile doğrudan denetlenebileceği varsayımını kaldırın. BirExtractor
'ün uygulama ayrıntılarına çalışma zamanında erişmek istiyorsanız önceExtractor.getUnderlyingInstance
işlevini çağırmanız gerekir.BmpExtractor
ekleyin.WebpExtractor
ekleyin.HeifExtractor
ekleyin.Mp4Extractor
'ye QuickTime classic desteği ekleyin.
- Ses:
- MP4 ve Matroska'da 24/32 bit büyük endian PCM desteği eklendi ve MP4'te
lpcm
için PCM kodlaması ayrıştırıldı. - MP4'te Vorbis seslerini ayıklamak için destek eklendi.
DefaultAudioOffloadSupportProvider
aracılığıyla, alıcının biçim için sağlayabileceği aktarma desteği düzeyini alanAudioSink.getFormatOffloadSupport(Format)
ekleyin.isFormatSupported
,isGaplessSupported
veisSpeedChangeSupported
içeren yeniAudioOffloadSupport
öğesini döndürür.- Ses alıcısında aktarma yapılandırmasının yapılandırıldığı
AudioSink.setOffloadMode()
öğesini ekleyin. Varsayılan değerAudioSink.OFFLOAD_MODE_DISABLED
'tir. - Boşaltma işlemi,
TrackSelectionParameters
'tekisetAudioOffloadPreference
üzerinden etkinleştirilebilir. Ayarlanan tercih etkinse cihaz, biçim için aktarmayı destekliyorsa ve parça seçimi tek bir ses parçasıysa ses aktarma etkinleştirilir. audioOffloadModePreference
,AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
olarak ayarlanırsaDefaultTrackSelector
yalnızca bir ses parçası seçer ve bu parçanın biçimi, aktarma işleminde destekleniyorsa seçer. İndirme işleminde ses parçası desteklenmiyorsa hiçbir parça seçilmez.- Parça geçişinden sonra oynatma konumu sorunu nedeniyle API düzeyi 33'ten önceki sürümlerde aktarma için kesintisiz oynatma desteği devre dışı bırakılıyor.
enableOffload
parametresiniDefaultRenderersFactory.buildAudioSink
yöntem imzasından kaldırın.DefaultAudioSink.Builder.setOffloadMode
yöntemini kaldırın.- intdef değerini
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
kaldırın. - Aktarılan oynatma sırasında Opus ses aralığı olmayan meta verileri destekleme
- İlk yazma işleminde başarısız olursa aktarma işlemini devre dışı bırakarak oluşturma aracının kurtarılmasına izin verin (#627).
- Yalnızca sesli oynatma için varsayılan olarak Aktarmayı Planla'yı etkinleştirin.
ExoPlayer.experimentalSetOffloadSchedulingEnabled
veAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
öğelerini silin.onExperimentalSleepingForOffloadChanged
onSleepingForOffloadChanged
,onExperimentalOffloadedPlayback
iseonOffloadedPlayback
olarak yeniden adlandırıldı.- Ses aktarma moduyla ilgili
TrackSelectionParameters
arayüzlerini ve tanımlarını bir içAudioOffloadPreferences
sınıfına taşıyın. AnalyticsListener
,AudioRendererEventListener
veAudioSink.Listener
içinonAudioTrackInitialized
veonAudioTrackReleased
geri aramaları ekleyin.- DTS Express ses arabelleğinin alt akış sorunu düzeltildi (#650).
- E-AC3-JOC için özellikler kontrolünün
IllegalArgumentException
hatası vermesine yol açan hata düzeltildi (#677).
- MP4 ve Matroska'da 24/32 bit büyük endian PCM desteği eklendi ve MP4'te
- Video:
MediaCodecVideoRenderer
'in özelVideoFrameProcessor.Factory
kullanmasına izin verin.- Ses akışı negatif zaman damgalarıyla başlarsa ilk karenin oluşturulamadığı hata düzeltildi (#291).
- Metin:
ExoplayerCuesDecoder
öğesini kaldırın.sampleMimeType = application/x-media3-cues
içeren metin parçaları artıkSubtitleDecoder
örneğine gerek kalmadan doğrudanTextRenderer
tarafından işlenir.
- Meta veriler:
- Uygulamanın zaten null döndürmesi gerektiğinden,
MetadataDecoder.decode
artık "yalnızca kod çözme" örnekleri için çağrılmayacak.
- Uygulamanın zaten null döndürmesi gerektiğinden,
- Etki:
- Zaman damgasına göre bitmap girişini sıraya eklemek için
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
VideoFrameProcessor.registerInputStream()
değerini engellemeyen olarak değiştirin. UygulamalarVideoFrameProcessor.Listener#onInputStreamRegistered()
'ü uygulamalıdır.VideoFrameProcessor.queueInputBitmap
içinframeRate
vedurationUs
parametreleriTimestampIterator
olarak değiştirildi.
- Zaman damgasına göre bitmap girişini sıraya eklemek için
- IMA uzantısı:
- Oynatma listesinde ilk öğe olmayan çok dönemli DASH canlı yayınlarının istisna atmasına neden olan hata düzeltildi (#571).
AdsLoader.destroy()
'ü çağırmadan önce StreamManager'ı serbest bırakma- IMA SDK sürümünü 3.31.0'a yükseltin.
- Oturum:
- Bildirimler ön plan hizmet davranışını
DefaultMediaNotificationProvider
'teFOREGROUND_SERVICE_IMMEDIATE
olarak ayarlayın (#167). - Samsung cihazlarda desteği sonlandırılan API'lerle ilgili sorunları önlemek için yalnızca API 31 ve sonraki sürümleri kullanın (#167).
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
- Bildirimi ve platform oturumunu doldurmak için kullanılan mevcut komutları ve özel düzeni ayarlamak üzere medya bildirim denetleyicisini proxy olarak kullanın.
- Platform oturumuna ve ardından Media3'e yönlendirmek yerine, Media3 içinde
MediaSessionService.onStartCommand()
tarafından alınan medya düğmesi etkinliklerini dönüştürün. Bu sayede, arayan denetleyicisi her zaman medya bildirimi denetleyicisidir ve uygulamalar, desteklenen tüm API düzeylerinde bildirim üzerinden gelen aramaları kolayca aynı şekilde tanıyabilir. - Eski bir
MediaSessionCompat
'a bağlıykenMediaController.getCurrentPosition()
'ün ilerlememesi sorunu düzeltildi. - Kolaylık için
MediaLibrarySession.getSubscribedControllers(mediaId)
ekleyin. - Denetleyicinin abone olduğu üst kimliğin kullanılabilirliğini doğrulamak için
MediaLibrarySession.Callback.onSubscribe()
değerini geçersiz kılın. İşlem başarılı olursa abonelik kabul edilir ve tarayıcıya bilgi vermek içinnotifyChildrenChanged()
hemen çağrılır (#561). - Automotive OS için oturum tanıtım modülü ekleyin ve Android Auto için oturum tanıtımını etkinleştirin.
- Medya bildirim denetleyicisi için
COMMAND_GET_TIMELINE
kullanılamadığında çerçeve oturumunun sırasını ayarlamayın. Android Auto, istemci denetleyici olarak çerçeve oturumundan veri okuyor. Bu durum, Android Auto kullanıcı arayüzündekiqueue
düğmesinin gösterilmemesine neden oluyor (#339). - Varsayılan olarak
SimpleBitmapLoader
yerineDataSourceBitmapLoader
kullanın (#271, #327). - Uygulamaların varsayılan medya düğmesi etkinlik işlemesini geçersiz kılmasına olanak tanıyan
MediaSession.Callback.onMediaButtonEvent(Intent)
öğesini ekleyin.
- Bildirimler ön plan hizmet davranışını
- Kullanıcı Arayüzü:
- Kullanıcının uygun bir ses çıkışı (ör. Bluetooth kulaklık) bağlamasına izin veren bir sistem iletişim kutusu açarak Wear OS cihazlar için
Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
nedeniyle oynatma engellemesini ele alan birPlayer.Listener
uygulaması ekleyin. Uygun bir cihaz, yapılandırılabilir bir zaman aşımı içinde (varsayılan olarak 5 dakika) bağlanırsa dinleyici oynatmayı otomatik olarak devam ettirir.
- Kullanıcının uygun bir ses çıkışı (ör. Bluetooth kulaklık) bağlamasına izin veren bir sistem iletişim kutusu açarak Wear OS cihazlar için
- İndirilenler:
- Android 14 uyumluluğu için
DownloadService
için "data sync" ön plan hizmet türünü bildirin. Bu hizmeti kullanırken uygulamanın manifest dosyasınadataSync
'yiforegroundServiceType
olarak eklemesi veFOREGROUND_SERVICE_DATA_SYNC
iznini (#11239) eklemesi de gerekir.
- Android 14 uyumluluğu için
- HLS Uzantısı:
- HLS canlı oynatma listesini, son yükleme tamamlanma zamanından değil, son yükleme başlangıç zamanından hesaplanan bir aralıkla yenileyin (#663).
- DASH Uzantısı:
- Segment şablonu URL'sinde aynı DASH tanımlayıcının birden fazlasına izin veriliyor.
- Ayıklama sırasında altyazı ayrıştırma için deneysel destek ekleme. Bu sürüm, altyazı segmentleri arasında geçiş yaparken titremeyi çözme de dahil olmak üzere çakışık altyazıların birleştirilmesi için daha iyi destek sunar. Bu özelliği
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
'i kullanarak etkinleştirebilirsiniz (#288).
- RTSP Uzantısı:
- TCP'ye geri dönüldüğünde
IndexOutOfBoundsException
'e veya bazı durumlarda oynatmanın takılmasına neden olabilecek bir yarış koşulu düzeltildi. RtspMediaPeriod
durumunu döndürürken RTSP kurulumunda durumu kontrol edin (#577).- Seçenekler yanıtının herkese açık üstbilgisinde özel Rtsp istek yöntemlerini yoksayma (#613).
- Canlı tutma RTSP seçenekleri isteklerinin gönderildiği zaman aralığında RTSP kurulum yanıtı zaman aşımı değerini kullanın (#662).
- TCP'ye geri dönüldüğünde
- Kod Çözücü Uzantıları (FFmpeg, VP9, AV1, MIDI vb.):
- Ses sentezlemek için Jsyn kitaplığını kullanan standart MIDI dosyalarının oynatılmasına destek sağlayan MIDI kod çözücü modülünü kullanıma sunuyoruz.
- Gösterilmesi gerekmeyen çıkış arabelleklerini doğrudan işaretlemek için
DecoderOutputBuffer.shouldBeSkipped
ekleyin. Bu, desteği sonlandırılacakC.BUFFER_FLAG_DECODE_ONLY
yerine tercih edilir. - Çözücülerin başlangıç zamanından önce yalnızca kod çözme örneklerinin bırakılmasına izin vermek için
Decoder.setOutputStartTimeUs
veSimpleDecoder.isAtLeastOutputStartTimeUs
ekleyin. Bu, desteği sonlandırılacakBuffer.isDecodeOnly
yerine tercih edilmelidir. - MIDI kod çözücü yapısını Maven deposuna yayınlarken oluşan hatayı düzeltme. Artefakt,
media3-exoplayer-midi
olarak yeniden adlandırıldı (#734).
- Leanback uzantısı:
- Bir yüzeyin devre dışı bırakılmasının Leanback kodunda
ArithmeticException
değerine neden olabileceği hatayı düzeltme (#617).
- Bir yüzeyin devre dışı bırakılmasının Leanback kodunda
- Test Yardımcı Programları:
TestExoPlayerBuilder
veFakeClock
'ü Espresso kullanıcı arayüzü testleriyle ve Compose kullanıcı arayüzü testleriyle uyumlu hale getirin. Bu, Espresso veya Oluştur görüntüleme etkileşimleri sırasında oynatma işleminin rastgele ilerlediği bir hatayı düzeltir.
- Desteği sonlandırılan sembolleri kaldırın:
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
veTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
'ı kaldırın.Composition.Builder.setHdrMode(int)
kullanın veComposition
değeriniTransformer.start(Composition, String)
'ye iletin.- Desteği sonlandırılan
DownloadNotificationHelper.buildProgressNotification
yöntemini kaldırın, bunun yerinenotMetRequirements
parametresi alan, desteği sonlandırılmamış bir yöntem kullanın.
Sürüm 1.2.0-rc01
1 Kasım 2023
1.2.0 kararlı sürümünü kullanın.
Sürüm 1.2.0-beta01
19 Ekim 2023
1.2.0 kararlı sürümünü kullanın.
Sürüm 1.2.0-alpha02
29 Eylül 2023
1.2.0 kararlı sürümünü kullanın.
Sürüm 1.2.0-alpha01
17 Ağustos 2023
1.2.0 kararlı sürümünü kullanın.
Sürüm 1.1.0
1.1.1 sürümü
16 Ağustos 2023
- Ortak Kitaplık:
- Yanlışlıkla eklenen
multidex
bağımlılığını tüm modüllerden kaldırın (#499).
- Yanlışlıkla eklenen
- ExoPlayer:
- Oynatma listesi temizlendikten sonra
PlaybackStatsListener
içinde sahtePlaybackStats
oluşturulmasına neden olan sorun düzeltildi. - Ortak Medya İstemcisi Verileri (CMCD) günlük kaydına ek alanlar ekleyin: yayın biçimi (sf), yayın türü (st), sürüm (v), en yüksek bit hızı (tb), nesne süresi (d), ölçülen aktarım hızı (mtp) ve nesne türü (ot) (#8699).
- Oynatma listesi temizlendikten sonra
- Ses:
- Çok kısa dosyalar oynatıldığında
Player.getState()
'ün hiçbir zamanSTATE_ENDED
'a geçmediği hata düzeltildi (#538).
- Çok kısa dosyalar oynatıldığında
- Ses aktarma:
- RFC 7845'e uygun olarak aktarılan Opus oynatma için bit akışına Ogg kimliği üstbilgisini ve yorum üstbilgi sayfalarını ekleyin.
- Video:
- H.265/HEVC: SPS kısa ve uzun vadeli referans resim bilgilerinin ayrıştırılması düzeltildi.
- Metin:
- CEA-608: İşaretçi kısaltma mantığını yalnızca görünür metni dikkate alacak şekilde değiştirin. Daha önce, işaret uzunluğu 32 karakterle sınırlandığında girinti ve sekme kaydırma dahil edilirdi (teknik olarak spesifikasyona göre doğrudur) (#11019).
- IMA uzantısı:
- IMA SDK sürümünü 3.30.3'e yükseltin.
- Oturum:
- Denetleyicinin durumuna özel düzen ekleyin ve buna erişmek için bir alıcı sağlayın. Özel düzen değiştiğinde
MediaController.Listener.onCustomLayoutChanged
çağrılır. Farklı Media3 denetleyicilerine farklı özel düzenler göndermek isteyen uygulamalar, bağlantı tamamlandığında özel düzenin denetleyici tarafından kullanılabilmesi içinMediaSession.Callback.onConnect
içindeAcceptedResultBuilder
kullanarak bunu yapabilir. MediaLibraryServiceLegacyStub
'ün, bunu desteklemeyen birResult
'e hata gönderdiği veUnsupportedOperationException
'nin oluştuğu durumlar düzeltildi (#78).- Hem eski komutlar (
COMMAND_ADJUST_DEVICE_VOLUME
veCOMMAND_SET_DEVICE_VOLUME
) hem de yeni komutlar (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
veCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) aracılığıylavolumeControlType
değerini belirleyerekPlayerWrapper
'ünVolumeProviderCompat
oluşturma şeklini düzeltin (#554).
- Denetleyicinin durumuna özel düzen ekleyin ve buna erişmek için bir alıcı sağlayın. Özel düzen değiştiğinde
Sürüm 1.1.0
5 Temmuz 2023
- Ortak Kitaplık:
- Uygun olmayan ses yolu için engelleme nedeni ekleyin ve hazır olduğunda çaldırın. Çok uzun süre engelleme nedeni değiştirildi. (#15).
- Oynatıcıya komut ekleme:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Player'a, kullanıcıların ses işaretlerini belirtmesine olanak tanıyan aşırı yüklenmiş yöntemler ekleyin:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
DeviceInfo
içinBuilder
ekleyin ve mevcut kurucunun desteğini sonlandırın.- Uzaktan oynatmalar için yönlendirme denetleyici kimliğini belirtmek üzere
DeviceInfo.routingControllerId
ekleyin. - Aynı konuma öğe eklemek ve kaldırmak için
Player.replaceMediaItem(s)
kısayolunu ekleyin (#8046).
- ExoPlayer:
- ExoPlayer'ın cihaz ses seviyesi yöntemlerini kontrol etmesine yalnızca açıkça etkinleştirildiyse izin verin. Aşağıdakilere erişmek için
ExoPlayer.Builder.setDeviceVolumeControlEnabled
'ü kullanın:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
vesetDeviceVolume(int, int)
increaseDeviceVolume(int)
veincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
vedecreaseDeviceVolume(int, int)
MediaSource
'dan kullanılabilen parça türlerini filtrelemenize olanak tanıyanFilteringMediaSource
ekleyin.- DASH, HLS ve SmoothStreaming uyarlanabilir akış biçimlerinin giden isteklerine Common Media Client Data (CMCD) ekleme desteği eklendi.
br
,bl
,cid
,rtp
vesid
alanları eklendi (#8699). API yapısı ve API yöntemleri:- CMCD günlük kaydı varsayılan olarak devre dışıdır. Etkinleştirmek için
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
simgesini kullanın. - Tüm anahtarlar varsayılan olarak etkindir. Günlüğe hangi anahtarların kaydedileceğini filtrelemek için
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
'ü geçersiz kılın. - Özel anahtar günlüğü kaydını etkinleştirmek için
CmcdConfiguration.RequestConfig.getCustomData()
değerini geçersiz kılın.
- CMCD günlük kaydı varsayılan olarak devre dışıdır. Etkinleştirmek için
- Demo uygulamasını özel bir
*.exolist.json
dosyasıyla başlatmayı kolaylaştırmak için ana demonun manifest dosyasına ek işlem ekleyin (#439). - Video oynatma sırasında
Effect
kullanmak içinExoPlayer.setVideoEffects()
ekleyin. sourceId
değeriniint
yerinelong
olarak depolamak içinSampleQueue
değerini güncelleyin. Bu işlem,SampleQueue.sourceId
veSampleQueue.peekSourceId
herkese açık yöntemlerinin imzalarını değiştirir.LoadControl
yöntemlerineshouldStartPlayback
veonTracksSelected
, bu yöntemleri alakalıMediaPeriod
ile ilişkilendirmeye olanak tanıyan parametreler ekleyin.- Haritadaki anahtarlar olarak kullanılan UID'leri içeren dönemleri içeren bir zaman çizelgesi parametresi ekleyerek
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
imzasını değiştirin. Bu, çok dönemli canlı yayınlarda eşzamanlılık sorunlarını önlemek için gereklidir. EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
veBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
özelliklerini kullanımdan kaldırın. Bunun yerine,mediaTimeOffsetUs
içermeyen yöntem varyantı çağrılabilir. Desteği sonlandırılan varyantlar için bile, dağıtıcı tarafından dağıtılanMediaLoadData
nesnelerininstartTimeUs
veendTimeUs
değerlerine artık ofset eklenmediğini unutmayın.ExoTrackSelection.blacklist
'üexcludeTrack
,isBlacklisted
'yi iseisTrackExcluded
olarak yeniden adlandırın.- Boş bir oynatma listesinde çağrıldığında
ExoPlayer.setMediaItem(s)
ileaddMediaItem(s)
arasındaki tutarsız davranışı düzeltin.
- ExoPlayer'ın cihaz ses seviyesi yöntemlerini kontrol etmesine yalnızca açıkça etkinleştirildiyse izin verin. Aşağıdakilere erişmek için
- Dönüştürücü:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
öğesini kaldırın. Bunun yerineExoPlayerAssetLoader.Factory(MediaSource.Factory)
veTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
özelliklerini kullanın.Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
öğesini kaldırın.- Giriş karesi işlenmeyi beklerken video akışının sonu sinyali gönderilirse dönüşümün takılmasına (birleştirici zaman aşımına neden olur) yol açan hata düzeltildi.
- Desteği genişletmek için
findDecoder/EncoderForFormat
yardımcı programlarını kullanmak yerineMediaCodecList
üzerinden codec'leri sorgulayın. - Bazı cihazlarda çalışmadığı için
DefaultEncoderFactory
'teki B çerçevesi yapılandırmasını kaldırın.
- Parça seçimi:
- Varsayılan olarak devre dışı olan
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
ekleme seçeneğini belirleyin. EtkinleştirildiğindeDefaultTrackSelector
, oluşturma aracı özellikleri değiştiğinde yeni bir parça seçimini tetikler.
- Varsayılan olarak devre dışı olan
- Ayıklayıcılar:
- Ses:
- Tünel oluşturma etkinleştirildiğinde ve
AudioProcessors
etkin olduğunda (ör. kesintisiz kırpma için) bazı oynatma işlemlerinin başarısız olmasına neden olan hata düzeltildi (#10847). - Doğrudan oynatmalarda Opus karelerini Ogg paketlerine yerleştirin (yük aktarma).
- Boşaltma planlamasıyla uyku sırasındaki mevcut konumu tahmin edin.
- Oyuncu yaşam döngüsünün sonunda kaynakları serbest bırakmak için
Renderer.release()
veAudioSink.release()
ekleyin. DefaultAudioSink
'teki ses özellikleriyle ilgili değişiklikleri dinleyin.DefaultAudioSink
sınıfının kurucusuna,DefaultAudioSink
'unAudioCapabilitiesReceiver
için dinleyici olarak kaydolacağı ve bir özellik değişikliği hakkında bilgilendirildiğindeaudioCapabilities
mülkünü güncelleyeceği zorunlu bircontext
parametresi ekleyin.- Ses özellikleriyle ilgili değişiklikleri
AudioSink.Listener
arayüzündeki yeni bir etkinlikonAudioCapabilitiesChanged
veonRendererCapabilitiesChanged
etkinliklerini tetikleyen yeni bir arayüzRendererCapabilities.Listener
aracılığıyla yayınlayın. - Ses kanallarına ölçeklendirme/karıştırma uygulamak için
ChannelMixingAudioProcessor
ekleyin. - İşitsel özellikler değiştikten sonra bypass modu mümkün olduğunda işitsel kod çözücüyü atmak için
DecoderDiscardReasons
değerine yeni bir int değeriDISCARD_REASON_AUDIO_BYPASS_POSSIBLE
ekleyin. - DTS Express ve DTS:X için doğrudan oynatma desteği eklendi (#335).
- Tünel oluşturma etkinleştirildiğinde ve
- Video:
- Oluşturucu devre dışıyken
MediaCodecVideoRenderer
'ün genişliği ve yüksekliği 0 olan birVideoSize
raporlamasını sağlayın.Player.getVideoSize()
değiştiğindePlayer.Listener.onVideoSizeChanged
buna göre çağrılır. Bu değişiklikle birlikte,Player.getCurrentTracks
videoyu desteklemediği veya desteklenen video kanalının boyutu henüz belirlenmediği zaman ExoPlayer'ınMediaCodecVideoRenderer
ile video boyutu 0 genişlik ve yüksekliğe sahip olur.
- Oluşturucu devre dışıyken
- DRM:
DefaultDrmSession
üzerinde, DRM paketinin dışından çağrılması beklenmeyen ve yalnızca dahili olarak kullanılabilen çeşitli yöntemlerin görünürlüğünü azaltın:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Birleştirici:
- MP4 kapsayıcı dosyası oluşturmak için kullanılabilecek yeni bir birleştirici kitaplığı ekleyin.
- IMA uzantısı:
- DAI için çok dönemli canlı DASH yayınlarını etkinleştirin. Mevcut uygulamada canlı yayınlarda ileri sarma özelliği henüz desteklenmiyor (#10912).
- Art arda gelen zaman çizelgelerinde hesaplanan içerik konumu biraz değiştiği için canlı yayınlara yeni bir reklam grubunun eklendiği bir hatayı düzeltin.
- Oturum:
- Şu anda
Player
yöntemini çağıran denetleyici hakkında bilgi edinmek için yardımcı yöntemMediaSession.getControllerForCurrentRequest
ekleyin. - Uygulamaların, örneğin Bluetooth kulaklık tarafından gönderilen medya düğmesi etkinlikleriyle oynatma işlemini devam ettirmesini sağlamak için
androidx.media3.session.MediaButtonReceiver
ekleyin (#167). - İstenilen
MediaItems
'unLocalConfiguration
(ör. URI) varsaPlayer
'ye iletilmesine izin vermek içinMediaSession.Callback.onAddMediaItems
'e varsayılan uygulama ekleyin (#282). - Android 12 ve önceki sürümlerde varsayılan olarak kompakt medya bildirimi görünümüne "önceki oynat" ve "sonraki oynat" komut düğmeleri ekleyin (#410).
- İstenilen
MediaItems
'unLocalConfiguration
(ör. URI) varsaPlayer
'ye iletilmesine izin vermek içinMediaSession.Callback.onAddMediaItems
'e varsayılan uygulama ekleyin (#282). - Android 12 ve önceki sürümlerde varsayılan olarak kompakt medya bildirimi görünümüne "önceki oynat" ve "sonraki oynat" komut düğmeleri ekleyin (#410).
- Şu anda
- Kullanıcı Arayüzü:
- Oynat/duraklat düğmesi içeren özel kullanıcı arayüzü öğeleri yazmak için Util yöntemleri
shouldShowPlayButton
vehandlePlayPauseButtonAction
ekleyin.
- Oynat/duraklat düğmesi içeren özel kullanıcı arayüzü öğeleri yazmak için Util yöntemleri
- RTSP Uzantısı:
- DASH Uzantısı:
- Çok dönemli DASH akışları için medya zaman kaydırmasını
MediaLoadData.startTimeMs
veMediaLoadData.endTimeMs
öğesinden kaldırın. - Çok dönemli canlı Dash medya kaynağının yeniden hazırlanmasının
IndexOutOfBoundsException
oluşturmasına yol açan hata düzeltildi (#10838).
- Çok dönemli DASH akışları için medya zaman kaydırmasını
- HLS Uzantısı:
- Yükleme iş parçacığının
TimestampAdjuster
'un başlatılmasını beklemesi için bir zaman aşımı belirlemek üzereHlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
ekleyin. İlklendirme, zaman aşımı süresinden önce tamamlanmazsa oynatmanın sonsuz bir şekilde duraklamasını önlemek için birPlaybackException
atılır. Zaman aşımı varsayılan olarak sıfıra ayarlanmıştır (#323).
- Yükleme iş parçacığının
- Test Yardımcı Programları:
DataSourceContractTest
konumunda URI şemasının büyük/küçük harf duyarlılığını kontrol edin.
- Desteği sonlandırılan sembolleri kaldırın:
DefaultAudioSink
kurucularını kaldırın, bunun yerineDefaultAudioSink.Builder
kullanın.HlsMasterPlaylist
'ü kaldırın, bunun yerineHlsMultivariantPlaylist
kullanın.Player.stop(boolean)
öğesini kaldırın. Bunun yerinePlayer.stop()
vePlayer.clearMediaItems()
(reset
true
ise) kullanın.- Desteği sonlandırılan iki
SimpleCache
kurucuyu kaldırın, daha iyi performans için bunun yerineDatabaseProvider
alan, desteği sonlandırılmamış bir kurucu kullanın. DefaultBandwidthMeter
kurucusunu kaldırın, bunun yerineDefaultBandwidthMeter.Builder
kullanın.DefaultDrmSessionManager
kurucularını kaldırın, bunun yerineDefaultDrmSessionManager.Builder
kullanın.- Kullanımdan kaldırılan iki
HttpDataSource.InvalidResponseCodeException
yapıcıyı kaldırın, hata günlüğüne ekleme yapmak için ek alanları(cause
,responseBody
) kabul eden, kullanımdan kaldırılmamış bir yapıcı kullanın. DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
veDownloadHelper.forSmoothStreaming
'i kaldırın, bunun yerineDownloadHelper.forMediaItem
'i kullanın.- Desteği sonlandırılan
DownloadService
kurucusunu kaldırın,channelDescriptionResourceId
parametresi sağlama seçeneğini içeren, desteği sonlandırılmamış bir kurucu kullanın. - Desteği sonlandırılan karakter kümesi (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
veUTF16LE_NAME
) dize sabitlerini kaldırın. Bunun yerinekotlin.text
paketindeki Kotlin karakter kümelerini,java.nio.charset.StandardCharsets
veyacom.google.common.base.Charsets
'ı kullanın. - Desteği sonlandırılan
WorkManagerScheduler
kurucusunu kaldırın, bunun yerineContext
parametresi sağlama seçeneğini içeren, desteği sonlandırılmayan bir kurucu kullanın. Format
sınıfını örneklemek için kullanılan ve desteği sonlandırılancreateVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
vecreateSampleFormat
yöntemlerini kaldırın. Bunun yerine,Format
örnekleri oluşturmak içinFormat.Builder
kullanın.- Desteği sonlandırılan
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
vecopyWithVideoSize
yöntemlerini kaldırın, bunun yerineFormat.buildUpon()
ve ayarlayıcı yöntemlerini kullanın. - Desteği sonlandırılan
ExoPlayer.retry()
'ü kaldırın, bunun yerineprepare()
kullanın. - Desteği sonlandırılan sıfır bağımsız değişkenli
DefaultTrackSelector
yapıcısını kaldırın, bunun yerineDefaultTrackSelector(Context)
kullanın. - Desteği sonlandırılan
OfflineLicenseHelper
kurucusunu kaldırın, bunun yerineOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
kullanın. - Desteği sonlandırılan
DownloadManager
kurucusunu kaldırın, bunun yerineExecutor
alan kurucuyu kullanın. - Desteği sonlandırılan
Cue
kurucularını kaldırın, bunun yerineCue.Builder
kullanın. - Desteği sonlandırılan
OfflineLicenseHelper
kurucusunu kaldırın, bunun yerineOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
kullanın. - Desteği sonlandırılan dört
AnalyticsListener
yöntemini kaldırın:onDecoderEnabled
yerineonAudioEnabled
ve/veyaonVideoEnabled
onDecoderInitialized
yerineonAudioDecoderInitialized
ve/veyaonVideoDecoderInitialized
kullanın.onDecoderInputFormatChanged
, bunun yerineonAudioInputFormatChanged
ve/veyaonVideoInputFormatChanged
kullanın.onDecoderDisabled
yerineonAudioDisabled
ve/veyaonVideoDisabled
kullanın.
- Desteği sonlandırılan
Player.Listener.onSeekProcessed
veAnalyticsListener.onSeekProcessed
işlemlerini kaldırın, bunun yerineDISCONTINUITY_REASON_SEEK
ileonPositionDiscontinuity
kullanın. ExoPlayer.setHandleWakeLock(boolean)
'ü kaldırın, bunun yerinesetWakeMode(int)
kullanın.- Desteği sonlandırılan
DefaultLoadControl.Builder.createDefaultLoadControl()
'ü kaldırın, bunun yerinebuild()
kullanın. - Desteği sonlandırılan
MediaItem.PlaybackProperties
'ü kaldırın, bunun yerineMediaItem.LocalConfiguration
kullanın. Kullanımdan kaldırılanMediaItem.playbackProperties
alanı artıkMediaItem.LocalConfiguration
türüne sahip.
Sürüm 1.1.0-rc01
21 Haziran 2023
1.1.0 kararlı sürümünü kullanın.
Sürüm 1.1.0-beta01
7 Haziran 2023
1.1.0 kararlı sürümünü kullanın.
Sürüm 1.1.0-alpha01
10 Mayıs 2023
1.1.0 kararlı sürümünü kullanın.
Sürüm 1.0.0
Sürüm 1.0.2
18 Mayıs 2023
androidx.media3:media3-*:1.0.2
yayınlanır.
1.0.2 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.7 sürümüne karşılık gelir.
Bu sürüm, 1.0.1 sürümünden bu yana yapılan aşağıdaki değişiklikleri içerir:
- Temel kitaplık:
Buffer
'unC.BUFFER_FLAG_LAST_SAMPLE
işaretini içerip içermediğini belirtenBuffer.isLastSample()
değerini ekleyin.- Kare içeren son örnek, "akış sonu" örneği okunmadan sıra dışı bırakılırsa son karenin oluşturulamaması sorunu düzeltildi. (#11079).
- Ayıklayıcılar:
- RTSP ve MP4 çıkarıcıları tarafından kullanılan ayrıştırma mantığını yeniden kullanarak MPEG-TS dosyalarındaki H.265 SPS'nin ayrıştırılmasını düzeltin (#303).
- Metin:
- SSA: UTF-16 dosyaları bayt sırası işaretiyle başlıyorsa bu dosyalar için destek eklendi (#319).
- Oturum:
- İşlemlerini güncelleyen eski bir
MediaSessionCompat
'e bağlıykenMediaController
'ün mevcut komutlarını güncellememesiyle ilgili sorun düzeltildi. - API 30'da
params.isRecent == true
ile Sistem Kullanıcı Arayüzü'ndenCallback.onGetLibraryRoot
'a yapılan bir çağrı içinMediaLibraryService
'ün null döndürmesini engelleyen hata düzeltildi (#355). MediaSessionService
veyaMediaLibraryService
bellek sızıntısını düzeltin (#346).MediaSession
'da birleştirilmişTimeline
ve konum güncellemesininMediaController
'ninIllegalStateException
atmasına neden olabileceği hatayı düzeltme
- İşlemlerini güncelleyen eski bir
1.0.1 sürümü
18 Nisan 2023
androidx.media3:media3-*:1.0.1
yayınlanır.
1.0.1 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.6 sürümüne karşılık gelir.
- Temel kitaplık:
- Varsayılan konuma giderken hedef canlı yayın geçersiz kılma ayarını sıfırlama (#11051).
- Medyadaki boş örnek akışlarının oynatmanın takılmasına neden olabileceği hata düzeltildi.
- Oturum:
- Eski bir
MediaSessionCompat
tarafından yayınlanan birden fazla aynı sıra öğesininMediaController
'da istisna oluşturmasına yol açan hata düzeltildi (#290). - Eski
MediaControllerCompat.Callback.onSessionEvent
'eMediaSession.broadcastCustomCommand
yönlendirme özelliği eklendi (#293). MediaSession.setPlayer
çağrıldığında kullanılabilir komutların güncellenmemesine yol açan hata düzeltildi.MediaController
ile gönderilenTrackSelectionOverride
örneklerinin,Format.metadata
içeren bir gruba referans vermeleri durumunda yoksayılması sorunu düzeltildi (#296).- Eski
MediaSessionCompat
aracılığıyla meta verilere erişmek içinPlayer.COMMAND_GET_CURRENT_MEDIA_ITEM
'ün kullanılabilir olması gerektiği sorunu düzeltildi. - Arka plan iş parçacığındaki
MediaSession
örnekleriMediaSessionService
'te kullanıldığında kilitlenmelere neden olan sorunu düzeltin (#318). - Uygulamanın bunu amaçlamaması durumunda kitaplığın medya düğmesi alıcısını tanımlaması sorunu düzeltildi (#314).
- Eski bir
- DASH:
- Boş segment zaman çizelgelerinin işlenmesi düzeltildi (#11014).
- RTSP:
- UDP ile RTSP Kurulumu, 461 UnsupportedTransport (#11069) RTSP Hatası nedeniyle başarısız olursa TCP ile tekrar deneyin.
Sürüm 1.0.0
22 Mart 2023
androidx.media3:media3-*:1.0.0
yayınlanır.
1.0.0 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.5 sürümüne karşılık gelir.
1.0.0-rc02 sürümünden bu yana herhangi bir değişiklik yapılmamıştır.
Sürüm 1.0.0-rc02
2 Mart 2023
androidx.media3:media3-*:1.0.0-rc02
yayınlanır.
1.0.0-rc02 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.4 sürümüne karşılık gelir.
- Temel kitaplık:
- İndirilenler:
- Birleştirilecek iki segmentin başlangıç süresi arasındaki maksimum farkı
SegmentDownloader
ve alt sınıflarda yapılandırılabilir hale getirin (#248).
- Birleştirilecek iki segmentin başlangıç süresi arasındaki maksimum farkı
- Ses:
- Video:
- HEVC HDR10 biçimini
HEVCProfileMain10
yerineHEVCProfileMain10HDR10
ile eşleyin. - Google TV Yüklü Chromecast ve Lenovo M10 FHD Plus'ta 60 fps AVC yayınlarının desteklenmiyor olarak işaretlenmesine neden olan cihaz sorunu için geçici çözüm eklendi (#10898).
- Ekran yenileme hızından çok daha yüksek kare hızına sahip medya oynatırken kare yayınlama performansıyla ilgili sorunları düzeltme
- HEVC HDR10 biçimini
- Yayınla:
- Medya öğeleri arasında geçiş yaparken geçici
STATE_IDLE
sorunu düzeltildi (#245).
- Medya öğeleri arasında geçiş yaparken geçici
- RTSP:
- Geçersiz RTSP Describe yanıt mesajlarının ayrıştırılmasında oluşturulan IllegalArgumentException'ı yakalama (#10971).
- Oturum:
- Bildirim oynatma/duraklatma düğmesinin oynatıcı durumuna göre güncellenmemesine neden olan hata düzeltildi (#192).
- IMA uzantısı:
- İlk (ve reklamsız durumda tek)
LOADED
etkinliği alınmadığı için reklamsız DAI akışlarının başlatılmasını engelleyen bir hata düzeltildi.
- İlk (ve reklamsız durumda tek)
Sürüm 1.0.0-rc01
16 Şubat 2023
androidx.media3:media3-*:1.0.0-rc01
yayınlanır.
1.0.0-rc01 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.3 sürümüne karşılık gelir.
- Temel kitaplık:
- Bir kod çözücü, medyayı etkili bir şekilde oynatamayacağı konusunda rapor verse bile, oluşturma aracının kod çözücü sıralama mantığını
MediaCodecSelector
'nin tercihlerini destekleyecek şekilde değiştirin. Örneğin, varsayılan seçicide, biçimi tam olarak destekleyen yazılım kod çözücünün yerine yalnızca işlevsel destek sunan donanım kod çözücüsü tercih edilir (#10604). - Yeni bir ExoPlayer örneği için önceden var olan bir oynatma iş parçacığı ayarlayan
ExoPlayer.Builder.setPlaybackLooper
öğesini ekleyin. - İndirme yöneticisi yardımcılarının temizlenmesine izin verin (#10776).
- Arama için kullanılan komutu da belirtmek üzere
BasePlayer.seekTo
parametresini ekleyin. - API 21 ve sonraki sürümlerde drawable'ları yüklerken tema kullanın (#220).
- Birden fazla medya öğesinin tek bir pencerede birleştirilmesine olanak tanıyan
ConcatenatingMediaSource2
öğesini ekleyin (#247).
- Bir kod çözücü, medyayı etkili bir şekilde oynatamayacağı konusunda rapor verse bile, oluşturma aracının kod çözücü sıralama mantığını
- Ayıklayıcılar:
- Trak atomları ayrıştırılırken örnek tabloda (stbl) gerekli bir örnek açıklaması (stsd) eksikse
NullPointerException
yerineParserException
atayın. - fMP4'te doğrudan bir senkronizasyon karesine sarma sırasında örnekleri doğru şekilde atlama (#10941).
- Trak atomları ayrıştırılırken örnek tabloda (stbl) gerekli bir örnek açıklaması (stsd) eksikse
- Ses:
- Doğrudan oynatmalarda (geçiş)
AudioTrack
için minimum arabellek boyutunu hesaplamak üzere sıkıştırılmış ses biçimi bit hızını kullanın.
- Doğrudan oynatmalarda (geçiş)
- Metin:
- Altyazı dosyası işaret içermiyorsa
TextRenderer
'ünSubtitle.getEventTime
'e geçersiz (negatif) bir dizin iletmesi sorunu düzeltildi. - SubRip: UTF-16 dosyaları için bayt sırası işaretiyle başlayan dosyalar için destek ekleyin.
- Altyazı dosyası işaret içermiyorsa
- Meta veriler:
- ID3 v2.4'e izin verildiği şekilde, ID3 çerçevelerinden birden çok boşlukla ayrılmış değeri ayrıştırın.
- Meta veriler tarafından açıklanan içerik veya klasör türünü belirtmek için
MediaMetadata.mediaType
ekleyin. MediaMetadata.folderType
yerineMediaMetadata.isBrowsable
ekleyin. Klasör türünün desteği sonraki sürümde sonlandırılacak.
- DASH:
- Kutu sayıları da dahil olmak üzere resim uyarlama setleri için tam ayrıştırma ekleyin (#3752).
- Kullanıcı Arayüzü:
- Görünürlük değişikliklerinin kayıtlı dinleyiciye iletilmesini sağlamak için desteği sonlandırılan
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
özelliğini düzeltin (#229). - Sağdan sola (RTL) düzen kullanıldığında
PlayerView
'teki orta oynatıcı kontrollerinin sırasını düzeltin (#227).
- Görünürlük değişikliklerinin kayıtlı dinleyiciye iletilmesini sağlamak için desteği sonlandırılan
- Oturum:
- Özel oyuncular için
Player
arayüzünü uygulamaya yardımcı olması amacıyla soyutSimpleBasePlayer
ekleyin. - Platform oturum jetonunu Media3'e dönüştürmek için yardımcı yöntem ekleyin
SessionToken
(#171). - Platform medya oturumunun güncellemelerini tetiklemek için
onMediaMetadataChanged
öğesini kullanın (#219). - Medya oturumunu
DefaultMediaNotificationProvider
öğesiningetMediaButtons()
bağımsız değişkeni olarak ekleyin ve netlik için değişmez listeler kullanın (#216). - Oynatıcıya ayarlamadan önce
MediaItem
listesini, başlangıç dizini ve konumunu oturuma göre değiştirme/ayarlama olanağı sağlamak içinonSetMediaItems
geri çağırma dinleyicisi ekleyin (#156). - Bluetooth olmayan medya düğmesi etkinlikleri için iki kez dokunma algılamasını önleyin (#233).
- Şüpheli eski oturum durumu olması durumunda
QueueTimeline
'ü daha sağlam hale getirin (#241).
- Özel oyuncular için
- Meta veriler:
- ID3 v2.4'e izin verildiği şekilde, ID3 çerçevelerinden birden çok boşlukla ayrılmış değeri ayrıştırın.
- Meta veriler tarafından açıklanan içerik veya klasör türünü belirtmek için
MediaMetadata.mediaType
ekleyin. MediaMetadata.folderType
yerineMediaMetadata.isBrowsable
ekleyin. Klasör türünün desteği sonraki sürümde sonlandırılacak.
- Yayın uzantısı:
- Cast SDK sürümünü 21.2.0'a yükseltin.
- IMA uzantısı:
- Konu dizisi sorunlarını önlemek için uygulama iş akışındaki
ImaServerSideAdInsertionMediaSource
için oynatıcı dinleyicisini kaldırın. - TV cihazlarında atlama düğmesinin odaklanmasını istemek için
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
özelliğiniImaServerSideAdInsertionMediaSource.AdsLoader.Builder
öğesine ekleyin ve varsayılan olarak true olarak ayarlayın.focusSkipButtonWhenAvailable
- Atlama düğmesine odaklanmayı programatik olarak istemek için
ImaServerSideAdInsertionMediaSource.AdsLoader
sınıfınafocusSkipButton()
yöntemi ekleyin. - IMA SDK sürümünü 3.29.0'a yükseltin.
- Konu dizisi sorunlarını önlemek için uygulama iş akışındaki
- Demo uygulama:
- Çalışma zamanında indirme bildirimleri için bildirim izni isteyin (#10884).
Sürüm 1.0.0-beta03
22 Kasım 2022
androidx.media3:media3-*:1.0.0-beta03
yayınlanır.
1.0.0-beta03 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.2 sürümüne karşılık gelir.
- Temel kitaplık:
- Şu anda seçili olan parçalar için tünel oluşturmanın etkin olup olmadığını kontrol etmek üzere
ExoPlayer.isTunnelingEnabled
ekleyin (#2518). - Tek bir
MediaSource
'ı sarma işlemini basitleştirmek içinWrappingMediaSource
ekleyin (#7279). - Yeterli bellek olmadığı için oynatma takılmadan önce geri arabelleği atma.
- Yük aktarma etkinleştirildiğinde İzleme "doSomeWork" bloğunu kapatın.
PlaybackStatsListener
(#180) sürümünde hızlı aramalarla ilgili oturum izleme sorunu düzeltildi.- Tek öğeli bir oynatma listesinde
seekToNext
veyaseekToPrevious
'yi çağırırken eksikonMediaItemTransition
geri araması gönderme (#10667). - Videonun oluşturulduğu yüzeyin boyutunu döndüren
Player.getSurfaceSize
değerini ekleyin. - Oynatıcının yayınlanması sırasında dinleyicilerin kaldırılmasının
IllegalStateException
hatasına neden olabileceği hata düzeltildi (#10758).
- Şu anda seçili olan parçalar için tünel oluşturmanın etkin olup olmadığını kontrol etmek üzere
- Derleme:
- Derleme hatalarını önlemek için minimum
compileSdkVersion
'ü zorunlu kılın (#10684). - Başka bir Gradle derlemesine dahil edildiğinde yayınlama bloğunu engelleyin.
- Derleme hatalarını önlemek için minimum
- Parça seçimi:
- Ekran Dolby Vision'ı desteklemiyorsa diğer parçaları tercih edin. (#8944).
- İndirilenler:
- Aynı
PriorityTaskManager
ile aynı anda indirme ve oynatma işleminin yapılmasından kaynaklananProgressiveDownloader
'te olası sonsuz döngü düzeltildi (#10570). - İndirme bildiriminin hemen görünmesini sağlayın (#183).
- Çok fazla ileti dizisi oluşturulmasını önlemek için paralel indirme kaldırma işlemlerini 1 ile sınırlayın (#10458).
- Aynı
- Video:
- Ekran Dolby Vision'ı desteklemiyorsa alternatif Dolby Vision kod çözücüyü deneyin. (#9794).
- Ses:
- Aynı anda birden fazla oynatıcıyı serbest bırakırken OutOfMemory hatalarını önlemek için
AudioTrack
örneklerini serbest bırakmak üzereSingleThreadExecutor
kullanın (#10057). - AudioTrack aktarma durumu için
AudioOffloadListener.onExperimentalOffloadedPlayback
değerini ekler. (#134). AudioTrackBufferSizeProvider
'ü herkese açık bir arayüz haline getirin.- Tercih edilen ses çıkış cihazını ayarlamak için
ExoPlayer.setPreferredAudioDevice
ekleyin (#135). androidx.media3.exoplayer.audio.AudioProcessor
'üandroidx.media3.common.audio.AudioProcessor
olarak yeniden adlandırın.- Tüm Android sürümlerinde 8 kanallı ve 12 kanallı sesi sırasıyla 7.1 ve 7.1.4 kanal maskelerine eşleme (#10701).
- Aynı anda birden fazla oynatıcıyı serbest bırakırken OutOfMemory hatalarını önlemek için
- Meta veriler:
MetadataRenderer
artık meta veriler mevcut olduğu anda oluşturulacak şekilde yapılandırılabilir. Oluşturucunun meta verileri erken mi yoksa oynatıcı konumuyla senkronize mi yayınlayacağını belirtmek içinMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
ile bir örnek oluşturun.
- DRM:
- Android 13 ClearKey uygulamasında boş olmayan ancak geçersiz bir lisans URL'si döndüren bir hatayı giderme
- Oynatma listesinde DRM şemaları arasında geçiş yaparken (ör. Widevine'den ClearKey'e)
setMediaDrmSession failed: session not opened
hatası düzeltildi.
- Metin:
- CEA-608: 2. alandaki hizmet anahtarı komutlarının doğru şekilde işlendiğinden emin olun (#10666).
- DASH:
- Manifestlerden
EventStream.presentationTimeOffset
ayrıştırma (#10460).
- Manifestlerden
- Kullanıcı Arayüzü:
- Oynatıcının mevcut geçersiz kılma işlemlerini
TrackSelectionDialogBuilder
'te ön ayar olarak kullanın (#10429).
- Oynatıcının mevcut geçersiz kılma işlemlerini
- Oturum:
- Bazıları eşzamansız çözüm gerektirse bile komutların her zaman doğru sırayla yürütüldüğünden emin olun (#85).
DefaultMediaNotificationProvider
örnekleri oluşturmak içinDefaultMediaNotificationProvider.Builder
ekleyin. Oluşturucu, sağlayıcı tarafından kullanılan bildirim kimliğini, bildirim kanalı kimliğini ve bildirim kanalı adını yapılandırabilir. Ayrıca, bildirimlerin küçük simgesini ayarlamak içinDefaultMediaNotificationProvider.setSmallIcon(int)
yöntemini ekleyin. (#104).MediaController.release()
'ten önce gönderilen komutların atlanmadığından emin olun (#99).SimpleBitmapLoader
,file://
URI'lerinden bitmap yükleyebilir (#108).MediaController
'ün bir dönemde bir reklamı aramasını engelleyen iddiayı düzeltin (#122).- Oynatma sona erdiğinde
MediaSessionService
ön planda durdurulur ve son oynatılan medya öğesinin oynatılmasını yeniden başlatan bir bildirim gösterilir (#112). - Duraklatma için bekleyen bir intent içeren bir ön plan hizmeti başlatmayın (#167).
- API 26 ve API 27'de
DefaultNotificationProvider
tarafından oluşturulan bildirimle ilişkili "rozeti" manuel olarak gizleme (rozet, API 28 ve sonraki sürümlerde otomatik olarak gizlenir) (#131). - Eski bir MediaSession'dan Media3 MediaController'a ikinci bir bağlayıcı bağlantısının IllegalStateExceptions'e neden olduğu hata düzeltildi (#49).
- RTSP:
- IMA:
- IMA SDK'sının reklam yüklerken takıldığı durumları (#10510) ele almak için reklam bilgilerini yükleme zaman aşımı ekleyin.
- İçeriğin sonuna giderken videonun ortasında gösterilen reklamların atlamasını önleme (#10685).
- Sunucu tarafı yerleştirilmiş reklamlar (ör. IMA DAI) içeren canlı yayınlar için aralığın süresini doğru hesaplama (#10764).
- FFmpeg uzantısı:
- FFmpeg kitaplıklarını NDK 23.1.7779620 ve sonraki sürümlerle bağlamak için yeni gerekli işaretleri ekleyin (#9933).
- AV1 uzantısı:
- En son Android Studio sürümleriyle uyumsuzlukları önlemek için CMake sürümünü güncelleyin (#9933).
- Yayın uzantısı:
MediaController
ile oynatmayı kontrol ederkenCastPlayer
'ı tanımlayabilmek içingetDeviceInfo()
'ü uygulayın (#142).
- Dönüştürücü:
- Çıkış örneğinin çok yavaş oluşturulduğunu algılamak için bir birleştirici gözetleyici zamanlayıcısı ekleyin.
- Desteği sonlandırılan sembolleri kaldırın:
Transformer.Builder.setOutputMimeType(String)
öğesini kaldırın. Bu özellik kaldırıldı. Varsayılan birleştirici kullanıldığında MIME türü her zaman MP4 olur.
Sürüm 1.0.0-beta02
21 Temmuz 2022
androidx.media3:media3-*:1.0.0-beta02
yayınlanır.
1.0.0-beta02 sürümü bu taahhütleri içerir.
Bu sürüm, ExoPlayer 2.18.1 sürümüne karşılık gelir.
- Temel kitaplık:
ShuffleOrder
yerineExoPlayer.setShuffleOrder
yazıldığındareason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
ilePlayer.Listener#onTimelineChanged
numaralı telefon arandığından emin olun (#9889).- İlerleyen medya için yalnızca seçili parçaları arabelleğe alınmış konumda ekleyin (#10361).
- Tüm ExoPlayer günlük çıkışı için özel günlükleyiciye izin verin (#9752).
DefaultMediaSourceFactory
içindesetDataSourceFactory
'ün uygulanmasını düzeltin. Bu, bazı durumlarda çalışmazdı (#116).
- Ayıklayıcılar:
- DASH:
- Manifestlerden ClearKey lisans URL'sini ayrıştırma (#10246).
- Kullanıcı Arayüzü:
- TalkBack'in, oynatma kontrolleri menüsünde etkin olan hız seçeneğini duyurmasını sağlayın (#10298).
- RTSP:
- VP8 parçalanmış paket işleme eklendi (#110).
- Leanback uzantısı:
LeanbackAdapter
içinplayWhenReady
değişikliklerini dinleyin (10420).
- Yayınla:
Sürüm 1.0.0-beta01
16 Haziran 2022
androidx.media3:media3-*:1.0.0-beta01
yayınlanır.
1.0.0-beta01 sürümü bu taahhütleri içerir.
Bu, ExoPlayer 2.18.0 sürümüne karşılık gelir.
- Temel kitaplık:
MediaMetricsManager
üzerinden Android platform teşhisi desteğini etkinleştirin. ExoPlayer, oynatma etkinliklerini ve performans verilerini platforma iletir. Bu sayede cihazdaki sistem performansı ve hata ayıklama bilgileri sağlanabilir. Bu veriler, cihazın kullanıcısı tarafından kullanım ve teşhis verilerinin paylaşımı etkinleştirildiyse Google tarafından da toplanabilir. Uygulamalar,ExoPlayer.Builder.setUsePlatformDiagnostics(false)
ile ExoPlayer için platform teşhislerine katkıda bulunmayı devre dışı bırakabilir.MergingMediaSource
kullanılırken parçaların çok sık sıfırlanması (ör. altyazılar harici olarak yüklenirken ve oynatma sırasında seçili altyazı değiştirilirken) ile ilgili hata düzeltildi (#10248).- API 29 ve 30'da 5G-NSA ağ türünü algılama işlemi durduruldu. Bu oynatmalarda 4G ağı varsayılır.
null
'ünMediaSource.Factory.setDrmSessionManagerProvider
veMediaSource.Factory.setLoadErrorHandlingPolicy
'ye iletilmesine izin vermeyin. GerekirseDefaultDrmSessionManagerProvider
veDefaultLoadErrorHandlingPolicy
örnekleri açıkça iletilebilir.- Tam
LocalConfiguration
bilinmediğinde medyayı oynatmak için gereken meta verileri temsil etmek üzereMediaItem.RequestMetadata
ekleyin. AyrıcaMediaMetadata.mediaUrl
artıkRequestMetadata
'a dahil edildiği içinMediaMetadata.mediaUrl
'yi de kaldırın. - Oyuncuların tek bir öğe ayarlamalarına izin vermek için
Player.Command.COMMAND_SET_MEDIA_ITEM
ekleyin.
- Parça seçimi:
TrackSelectionOverrides
sınıfınıTrackSelectionParameters
olarak düzleştirin veTrackSelectionOverride
sınıfını üst düzey bir sınıfa yükseltin.TracksInfo
'üTracks
,TracksInfo.TrackGroupInfo
'yi iseTracks.Group
olarak yeniden adlandırın.Player.getCurrentTracksInfo
vePlayer.Listener.onTracksInfoChanged
daPlayer.getCurrentTracks
vePlayer.Listener.onTracksChanged
olarak yeniden adlandırıldı. Bu,Player.Listener.onTracksChanged
yöntem adının "desteklenmesini sonlandırmayı" içerir ancak farklı parametre türleri vardır.- Desteği sonlandırılan
DefaultTrackSelector.ParametersBuilder
yerineDefaultTrackSelector.buildUponParameters
veDefaultTrackSelector.Parameters.buildUpon
'üDefaultTrackSelector.Parameters.Builder
döndürecek şekilde değiştirin. - Varsayılan olarak etkin olan
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
Ekle'yi seçin. EtkinleştirildiğindeDefaultTrackSelector
, kanal sayısı cihaz çıkış özelliklerini aşmayan ses parçalarını tercih eder. El cihazlarındaDefaultTrackSelector
, çok kanallı ses biçimi uzamsallaştırılabilir (Android 12L+) veya Dolby surround ses biçimi olmadığı sürece çok kanallı ses biçimlerine kıyasla stereo/mono ses biçimlerini tercih eder. Ayrıca, ses uzamsallaştırmayı destekleyen cihazlardaDefaultTrackSelector
, uzamsallaştırıcı özelliklerinde yapılan değişiklikleri izler ve bu değişikliklere göre yeni bir parça seçimi tetikler.television
UI modu olan cihazlar bu kısıtlamalardan hariç tutulur ve en yüksek kanal sayısına sahip biçim tercih edilir. Bu özelliği etkinleştirmek içinDefaultTrackSelector
örneğinin birContext
ile oluşturulması gerekir.
- Video:
DummySurface
'üPlaceholderSurface
olarak yeniden adlandırın.MediaCodecVideoRenderer.getCodecMaxInputSize
'e AV1 desteği ekleyin.
- Ses:
- Standart olmayan MIME türü reklamı yapan LG AC3 ses kodlayıcısı kullanın.
- API 21 ve önceki sürümlerde yavaş ART doğrulamasını önlemek için
AudioAttributes.getAudioAttributesV21()
değerinin döndürme türünüandroid.media.AudioAttributes
yerine yeni birAudioAttributesV21
sarmalayıcı sınıfına değiştirin. - Platformu sorgulayın (API 29 ve üzeri) veya biçim ses kanal sayısı ayarlanmamışken ses aktarımı için ses kodlama kanal sayısını varsayın. Bu durum, HLS'nin parçalara ayrılmadan hazırlanmasıyla (10204) ortaya çıkar.
- Kod çözücü 12 kanallı PCM ses çıkışı veriyorsa
AudioTrack
'ü kanal maskesiAudioFormat.CHANNEL_OUT_7POINT1POINT4
ile yapılandırın (#10322).
- DRM
- DRM oturumunun, bir biçim değişikliğinden hemen sonra aranırken her zaman doğru şekilde güncellendiğinden emin olun (10274).
- Metin:
Player.getCurrentCues()
değerini,List<Cue>
yerineCueGroup
döndürecek şekilde değiştirin.- SSA:
BorderStyle == 3
olduğundaOutlineColour
stil ayarını destekleyin (ör.OutlineColour
işaretin arka planını ayarlar) (#8435). - CEA-708: Verileri birden fazla hizmet bloğuna ayırın ve şu anda seçili hizmet numarasıyla ilişkili olmayan blokları yoksayın.
- Yalnızca Google'ın dahili altyazı biçimini işlemek için kullanılan
RawCcExtractor
öğesini kaldırın.
- Ayıklayıcılar:
- Kullanıcı Arayüzü:
useController=false
durumundaPlayerView
üzerinde ayarlananOnClickListener
'lere etkinliklerin yayınını düzeltin (#9605). Ayrıca, tüm görünüm yapılandırmaları için etkinliklerinOnLongClickListener
adresine teslim edilmesini düzeltin.ACTION_UP
'ten öncePlayerView
'ün sınırlarını terk eden bir dokunma etkinliği dizisinin tıklama olarak yanlış şekilde ele alınması düzeltildi (#9861).- Dokunulduğunda kontrolleri gizlemek yerine oynatmayı değiştirebilen
PlayerView
erişilebilirlik sorunu düzeltildi (#8627). TrackSelectionView
veTrackSelectionDialogBuilder
'üExoPlayer
yerinePlayer
arayüzüyle çalışacak şekilde yeniden yazın. Bu, görünümlerin diğerPlayer
uygulamalarıyla kullanılmasına olanak tanır ve kullanıcı arayüzü modülünden ExoPlayer modülüne olan bağımlılığı kaldırır. Bu, önemli bir değişikliktir.PlayerView
kanal seçicide zorunlu metin kanalları gösterilmez ve "Yok" seçiliyse uygun bir zorunlu metin kanalı seçili kalır (#9432).
- DASH:
- DTS
AudioChannelConfiguration
öğelerinden kanal sayısını ayrıştırma Bu işlem, DTS akışları için ses geçişini yeniden etkinleştirir (#10159). null
öğesininDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
öğesine iletilmesine izin vermeyin. GerekirseDefaultCompositeSequenceableLoaderFactory
örnekleri açıkça iletilebilir.
- DTS
- HLS:
- Oynatma listesi CODECS özelliği ses codec'ini içermiyorsa parçalara ayırarak hazırlamaya geçin (#10065).
null
'ünHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
veHlsMediaSource.Factory.setPlaylistTrackerFactory
'e iletilmesine izin vermeyin. GerekirseDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
örnekleri veyaDefaultHlsPlaylistTracker.FACTORY
referansı açıkça iletilebilir.
- Sorunsuz Yayın:
null
öğesininSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
öğesine iletilmesine izin vermeyin. GerekirseDefaultCompositeSequenceableLoaderFactory
örnekleri açıkça iletilebilir.
- RTSP:
- H263 için RTP okuyucu eklendi (#63).
- MPEG4 için RTP okuyucu ekleyin (#35).
- HEVC için RTP okuyucu ekleyin (#36).
- AMR için RTP okuyucu ekleyin. Şu anda yalnızca tek kanallı, ardışık olmayan AMR akışları desteklenmektedir. Karma AMR RTP yükü desteklenmez. (#46)
- VP8 için RTP okuyucu eklendi (#47).
- WAV için RTP okuyucu ekleyin (#56).
- RTSP temel yetkilendirme üstbilgisini düzeltin. (#9544).
- ExoPlayer'ın bunlara ihtiyacı olmadığından zorunlu SDP alanlarının kontrolünü durdurun (#10049).
- RTSP zamanlaması ayrıştırılırken kontrollü istisna atma (#10165).
- VP9 için RTP okuyucu eklendi (#47).
- OPUS için RTP okuyucu ekleyin (#53).
- Veri kaynakları:
DummyDataSource
'üPlaceholderDataSource
olarak yeniden adlandırın.- OkHttp kesinti işleme geçici çözümü.
- Oturum:
- İstekleri eşzamansız olarak çözmek için
MediaSession.MediaItemFiller
yerineMediaSession.Callback.onAddMediaItems
yazın. MediaController
eski bir medya oturumuna bağlandığındasetMediaItems(s)
yöntemlerini destekler.MediaController.setMediaUri
veMediaSession.Callback.onSetMediaUri
öğelerini kaldırın. Aynı işlevlerMediaController.setMediaItem
veMediaSession.Callback.onAddMediaItems
kullanılarak da elde edilebilir.- Medya oynatmak için eski
MediaController
aramalarınıonSetMediaUri
yerineMediaSession.Callback.onAddMediaItems
'e yönlendirin. - Bildirimi özelleştirmek için
MediaNotification.Provider
veDefaultMediaNotificationProvider
ekleyin. - Poster resimlerini indirmek için
BitmapLoader
veSimpleBitmapLoader
öğelerini ekleyin. - Eski oturumla geriye dönük uyumluluk sağlamak için
MediaSession.setCustomLayout()
ekleyin. - Eski oturumla özellik eşleşmesi sağlamak için
MediaSession.setSessionExtras()
ekleyin. MediaSession.MediaSessionCallback
'üMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
'yiMediaLibrarySession.Callback
veMediaSession.Builder.setSessionCallback
'isetCallback
olarak yeniden adlandırın.MediaControllerImplLegacy
bölümünde NPE düzeltildi (#59).- Zaman çizelgesi değişikliğinde oturum konumu bilgilerini güncelleme(#51).
- Denetleyiciyi yayınladıktan sonra
MediaControllerImplBase
'te NPE'yi düzeltin (#74).
- İstekleri eşzamansız olarak çözmek için
- Reklam oynatma / IMA:
- Medya Derecelendirme Konseyi (MRC) önerilerine uygun olması için reklam anketi hızını 100 ms'den 200 ms'ye düşürün.
- FFmpeg uzantısı:
- Android Studio'nun gradle senkronizasyonunun başarısız olmasına neden olan bir CMake hatasını önlemek için CMake sürümünü
3.21.0+
olarak güncelleyin (#9933).
- Android Studio'nun gradle senkronizasyonunun başarısız olmasına neden olan bir CMake hatasını önlemek için CMake sürümünü
- Desteği sonlandırılan sembolleri kaldırın:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
öğesini kaldırın. Bunun yerinePlayer.Listener.onTracksChanged(Tracks)
kullanın.Player.getCurrentTrackGroups
vePlayer.getCurrentTrackSelections
öğelerini kaldırın. Bunun yerinePlayer.getCurrentTracks
kullanın. Desteği sonlandırılmış olsa daExoPlayer.getCurrentTrackGroups
veExoPlayer.getCurrentTrackSelections
yöntemlerini kullanmaya devam edebilirsiniz.DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
veDEFAULT_TRACK_SELECTOR_PARAMETERS
sabitlerini kaldırın. Mümkün olduğunda bunun yerinegetDefaultTrackSelectorParameters(Context)
, aksi takdirdeDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
kullanın.DefaultTrackSelector(ExoTrackSelection.Factory)
yapıcısını kaldırın. Bunun yerineDefaultTrackSelector(Context, ExoTrackSelection.Factory)
politikasını kullanın.Transformer.Builder.setContext
öğesini kaldırın.Context
, bunun yerineTransformer.Builder
oluşturucuya aktarılmalıdır.
Sürüm 1.0.0-alpha03
14 Mart 2022
androidx.media3:media3-*:1.0.0-alpha03
yayınlanır.
1.0.0-alpha03 sürümü bu taahhütleri içerir.
Bu, ExoPlayer 2.17.1 sürümüne karşılık gelir.
- Ses:
- HLS'de Dolby Atmos (E-AC3-JOC) için ses özelliklerini kontrol ederken oluşan hatayı düzeltme
- Ayıklayıcılar:
- FMP4: Hem v0 hem de v1 emsg atomları içeren akışlar için emsg örnek meta verilerinin yanlış sırada yayınlanabileceği sorun düzeltildi (#9996).
- Metin:
SingleSampleMediaSource.Factory.setTrackId
veMediaItem.SubtitleConfiguration.Builder.setId
arasındaki etkileşimi düzelterekSubtitleConfiguration
alanına öncelik verin ve ayarlanmamışsaFactory
değerine geri dönün (#10016).
- Reklam oynatma:
- Canlı HLS SSAI yayınlarında reklam dönemleri arasındaki ses eksikliklerini düzeltin.
Sürüm 1.0.0-alpha02
2 Mart 2022
androidx.media3:media3-*:1.0.0-alpha02
yayınlanır.
1.0.0-alpha02 sürümü bu taahhütleri içerir.
Bu, ExoPlayer 2.17.0 sürümüne karşılık gelir.
- Temel Kitaplık:
buildVideoRenderers()
veyabuildAudioRenderers()
'ı geçersiz kılanDefaultRenderersFactory
alt sınıflarının codec bağdaştırıcısı fabrikasına erişebilmesi ve bunu oluşturduklarıMediaCodecRenderer
örneklerine iletebilmesi için korunanDefaultRenderersFactory.getCodecAdapterFactory()
yöntemini ekleyin.- ICY üstbilgi alanları
name
vegenre
'u sırasıylaMediaMetadata.station
veMediaMetadata.genre
'a iletin. Böylece,Player.Listener.onMediaMetadataChanged()
üzerinden uygulamaya ulaşabilirler (#9677). DefaultHttpDataSource#getResponseHeaders
öğesinden boş anahtarları kaldırın.MediaCodec
örneği oluşturma işlemi başarısız olduğunda uyku moduna geçip tekrar deneyin. Bu, bir yüzey güvenli bir codec'ten başka bir codec'e geçirilirken bazı cihazlarda ortaya çıkan bir sorunu (#8696) giderir.- Kullanıcıların
MediaCodec
'ten metrik verileri almasına izin vermek içinMediaCodecAdapter.getMetrics()
ekleyin. (#9766). - Maven bağımlılık çözümü düzeltildi (#8353).
- Düşük gecikmeli özelliklere sahip olmayan veya kullanıcının hızı ayarlama isteği bulunmayan canlı yayınlarda otomatik hız ayarını devre dışı bırakın (#9329).
DecoderCounters#inputBufferCount
'üqueuedInputBufferCount
olarak yeniden adlandırın.SimpleExoPlayer.renderers
'ü gizli hale getirin. OluşturucularaExoPlayer.getRenderer
üzerinden erişilebilir.- Bazı
AnalyticsListener.EventFlags
sabit değerleri,Player.EventFlags
'daki değerlerle eşleşecek şekilde güncellendi. - Bir uygulamanın ihtiyaç duymadığı durumlarda R8 tarafından kaldırılmasına izin vermek için
AnalyticsCollector
'ü bir arayüz ve varsayılan uygulamaya bölün.
- Parça seçimi:
- Parça seçiminde tercih edilen video rolü işaretlerini destekleyin (#9402).
- Uyarlama için birden fazla video parçası seçerken tercih edilen MIME türlerini ve rol işaretlerini dikkate alacak şekilde video parçası seçim mantığını güncelleyin (#9519).
- Video ve ses parçası seçim mantığını, yalnızca aynı düzeyde kod çözücü ve donanım desteğine sahip uyarlanabilir seçimler için biçimler seçecek şekilde güncelleyin (#9565).
- Birincil, donanım hızlandırmalı kod çözücüler birden fazla codec'i destekliyorsa video kanalı seçim mantığını, daha verimli codec'leri tercih edecek şekilde güncelleyin (#4835).
- Teknik parça seçim kısıtlamalarına (ör. tercih edilen MIME türü veya maksimum kanal sayısı) kıyasla ses içeriği tercihlerini ("varsayılan" ses parçası veya sistem yerel dili ile eşleşen bir parça) tercih edin.
- Bir parça grubunun geçersiz kılınmasının, aynı türdeki diğer parça gruplarını devre dışı bırakmamasına neden olan parça seçimi sorunu düzeltildi (#9675).
- Boş olmayan ve boş parça geçersiz kılmalarının bir karışımının doğru şekilde uygulanmadığı parça seçimi sorunu düzeltildi (#9649).
TrackGroupArray
içinde yinelenenTrackGroup
'leri yasaklayın.TrackGroup
s,TrackGroup
oluşturucuda birid
ayarlayarak her zaman ayırt edilebilir hale getirilebilir. Bu, etkin bir kanal geçersiz kılma özelliğiyle uygulamayı arka plana aldıktan sonra oynatmayı devam ettirirken yaşanan kilitlenmeyi düzeltir (#9718).- Oynatma canlı yayına çok yakın olsa bile yeterli ağ bant genişliğinde kalite artışına izin vermek için
AdaptiveTrackSelection
'teki mantığı düzeltin (#9784).
- Video:
- Gerekirse Dolby Vision'un uyumlu bir H.264/H.265 kod çözücüsü kullanması için kod çözücünün yedek mantığını düzeltin.
- Ses:
- Gerekirse uyumlu bir E-AC3 kod çözücüsü kullanmak için Dolby Atmos (E-AC3-JOC) için kod çözücü yedek mantığını düzeltin.
AudioCapabilities
API'lerini,null
yerine açıkçaAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
ile iletmeyi zorunlu kılacak şekilde değiştirin.DefaultAudioSink
içine birAudioTrackBufferSizeProvider
ekleyerekAudioTrack
arabellek boyutu hesaplamasının özelleştirilmesine izin verin. (#8891).- İstenen arabellek boyutu 1 MB'tan büyükse
AudioTrack
oluşturmayı yeniden deneyin. (#9712).
- Ayıklayıcılar:
- Metin:
- Yapılandırmadan oluşturulan altyazı parçasının
Format.id
alanına aktarılan birMediaItem.SubtitleConfiguration.id
alanı ekleyin (#9673). - Matroska kapsayıcılarında WebVTT altyazılar için temel destek ekleyin (#9886).
Cea708Decoder
'ün, hizmet bloğunun beyan edilen boyutundan fazlasını okumasını engelleyin.
- Yapılandırmadan oluşturulan altyazı parçasının
- DRM:
playbackLooper
,DrmSessionManager.(pre)acquireSession
hesabından kaldırılsın mı? BirDrmSessionManager
, özel birMediaSource
'ta bir uygulama tarafından kullanıldığında bunun yerineplaybackLooper
'ninDrmSessionManager.setPlayer
'e iletilmesi gerekir.
- Reklam oynatma / IMA:
- IMA Dinamik Reklam Ekleme (DAI) desteği eklendi (#8213).
- Bir reklam grubunun tekrar oynatılabilmesi için sıfırlanmasına izin vermek üzere
AdPlaybackState
işlevine bir yöntem ekleyin (#9615). - Reklam oynatma sırasında 1,0 oynatma hızını zorunlu kılma (#9018).
- Yüklenemeyen bir reklam grubunun oynatmanın hemen sıfırlanmasına neden olduğu sorun düzeltildi (#9929).
- Kullanıcı Arayüzü:
- DASH:
- Ayrıştırılmış temel ve ek özellikleri
Representation
'e ekleyin (#9579). forced-subtitle
parça rolü için destek (#9727).main
kanal rolününC.SELECTION_FLAG_DEFAULT
olarak yorumlanmasını durdurun.- DVB ad alanını tanımlamayan manifest'ler için temel URL hariç tutma mantığını düzeltin (#9856).
- Göreli
MPD.Location
URL'leri desteklenir (#9939).
- Ayrıştırılmış temel ve ek özellikleri
- HLS:
- Yalnızca ses içeren HLS akışları için
Format.label
parametresini doğru şekilde doldurun (#9608). - Başlangıç süresini iyileştirmek için varsayılan olarak parçalara ayrılmamış hazırlığı kullanın. Yorumlarınız, ana oynatma listesinde belirtilmemiş, birleştirilmiş altyazı parçaları içeriyorsa oynatılabilmesi için bunları ana oynatma listesine eklemeniz veya
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
ile parçalara ayrılmadan hazırlama özelliğini devre dışı bırakmanız gerekir. - HLS'de anahtar kare doğru aramayı destekleyin (#2882).
- Yalnızca ses içeren HLS akışları için
- RTSP:
- Herhangi bir sunucu bağlantısı için kullanılan
SocketFactory
değerini geçersiz kılacak bir istemci API'si sağlayın (#9606). - Her ikisi de mevcutsa BASIC yerine DIGEST kimlik doğrulama yöntemini tercih edin (#9800).
- RTSP parça zamanlaması kullanılamadığında işlem yapın (#9775).
- Geçersiz RTP-Info başlık değerlerini yoksay (#9619).
- Herhangi bir sunucu bağlantısı için kullanılan
- Dönüştürücü:
- Gerekli minimum API sürümünü 21'e yükseltin.
TransformationException
artık bir dönüşüm sırasında oluşan hataları tanımlamak için kullanılır.- Dönüşüm seçeneklerini belirtmek için
TransformationRequest
ekleyin. - Birden fazla dinleyicinin kaydolmasına izin verin.
- Kodek çıkışı kısmen okunduğunda Dönüştürücü'nün takılmasını düzeltme
- Birleştiricinin yayını sonlandırırken
Transformer.getProgress
'te olası NPE'yi düzeltin. - Dönüşümleri uygulamak için bir demo uygulama ekleyin.
- MediaSession uzantısı:
MediaSessionConnector
artık varsayılan olarak durdurulduğunda oynatma listesini temizliyor. Oynatma listesinin korunmasını isteyen uygulamalar, bağlayıcıdasetClearMediaItemsOnStop(false)
işlevini çağırabilir.
- Yayın uzantısı:
- FFmpeg uzantısı:
build_ffmpeg.sh
'ü GNU yerine LLVM'in bin utils'ine bağlayın (#9933).
- Android 12 uyumluluğu:
- Cast uzantısını
com.google.android.gms:play-services-cast-framework:20.1.0
'e bağlı olacak şekilde yükseltin.play-services-cast-framework
'ın önceki sürümleri Android 12'yi hedefleyen uygulamalarla uyumlu değildir vePendingIntent
oluştururkenIllegalArgumentException
hatasıyla kilitlenir (#9528).
- Cast uzantısını
- Desteği sonlandırılan sembolleri kaldırın:
Player.EventListener
öğesini kaldırın. Bunun yerinePlayer.Listener
politikasını kullanın.MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
veMediaSourceFactory#setDrmUserAgent
öğelerini kaldırın. Bunun yerineMediaSourceFactory#setDrmSessionManagerProvider
kullanın.MediaSourceFactory#setStreamKeys
öğesini kaldırın. Bunun yerineMediaItem.Builder#setStreamKeys
kullanın.MediaSourceFactory#createMediaSource(Uri)
öğesini kaldırın. Bunun yerineMediaSourceFactory#createMediaSource(MediaItem)
kullanın.setTag
,DashMediaSource
,HlsMediaSource
veSsMediaSource
'ten kaldırılsın mı? Bunun yerineMediaItem.Builder#setTag
politikasını kullanın.DashMediaSource#setLivePresentationDelayMs(long, boolean)
öğesini kaldırın. Manifesti geçersiz kılmak içinMediaItem.Builder#setLiveConfiguration
veMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
'ü, yedek değer sağlamak içinDashMediaSource#setFallbackTargetLiveOffsetMs
'i kullanın.(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
öğesini kaldırın. İleti dizisi yaptırımını devre dışı bırakmak artık mümkün değildir.ActionFile
veActionFileUpgradeUtil
öğelerini kaldırın. Eski işlem dosyalarınıDefaultDownloadIndex
ile birleştirmek içinActionFileUpgradeUtil
'ü kullanmak üzere ExoPlayer 2.16.1 veya önceki bir sürümü kullanın.ProgressiveMediaSource#setExtractorsFactory
öğesini kaldırın. Bunun yerineProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
sınıf oluşturucusunu kullanın.ProgressiveMediaSource.Factory#setTag
veProgressiveMediaSource.Factory#setCustomCacheKey
öğelerini kaldırın. Bunun yerineMediaItem.Builder#setTag
veMediaItem.Builder#setCustomCacheKey
politikalarını kullanın.DefaultRenderersFactory(Context, @ExtensionRendererMode int)
veDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
sınıf oluşturucularını kaldırın. Bunun yerineDefaultRenderersFactory(Context)
kurucusunu,DefaultRenderersFactory#setExtensionRendererMode
veDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
kullanın.- Tüm herkese açık
CronetDataSource
kurucularını kaldırın. Bunun yerineCronetDataSource.Factory
kullanın.
- Aşağıdaki
IntDefs
değerini yalnızca@Target(TYPE_USE)
olarak değiştirin. Bu, Kotlin'de kullanımların derlenmesini bozabilir. Bu sorun, türü ek açıklamaya (Int
) taşımak için ek açıklamayı taşıyarak düzeltilebilir.@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
(com.google.android.exoplayer2.ext.flac
paketinde)@FlacExtractor.Flags
(com.google.android.exoplayer2.extractor.flac
paketinde)@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
Sürüm 1.0.0-alpha01
27 Ekim 2021
androidx.media3:media3-*:1.0.0-alpha01
yayınlanır.
1.0.0-alpha01 sürümü bu taahhütleri içerir.
Yeni özellikler
Media3, ExoPlayer dahil olmak üzere medya destek kitaplıklarının yeni adresidir. İlk alfa sürümünde, aşağıdakiler dahil olmak üzere medya kullanım alanlarını uygulamak için kitaplıkların erken ve işlevsel uygulamaları yer alır:
- Android için uygulama düzeyinde bir medya oynatıcı olan ExoPlayer'ı özelleştirmek ve genişletmek kolaydır.
- Oynatma işlemlerini göstermek ve kontrol etmek için medya oturumu işlevi. Bu yeni oturum modülü, ExoPlayer ile aynı
Player
arayüzünü kullanır. - Medya oynatma kullanıcı arayüzleri oluşturmaya yönelik kullanıcı arayüzü bileşenleri.
- ExoPlayer ile kullanılmak üzere diğer kitaplıklardaki işlevleri sarmalayan modüller (ör. IMA SDK üzerinden reklam ekleme).
Daha fazla bilgi için Media3 GitHub projesine göz atın.
ExoPlayer daha önce ayrı bir ExoPlayer GitHub projesinde barındırılıyordu. Media3'te paket adı androidx.media3.exoplayer
. Uygulamaların Media3'e geçiş yapması için ExoPlayer GitHub projesini bir süre daha sürdürmeye ve yayınlamaya devam etmeyi planlıyoruz. Media3, eski media2 ve mediasession uzantıları dışındaki tüm ExoPlayer modüllerinin yerini alan yeni media3-session
modülüne sahiptir. Bu sayede, adaptör/konnektör sınıfı kullanmaya gerek kalmadan oynatıcılar ile medya oturumları arasında doğrudan entegrasyon sağlanır.