Media3 1.9.0 yayınlandı. En son sürüm, her zamanki hata düzeltmelerinin ve performans iyileştirmelerinin yanı sıra dört yeni veya büyük ölçüde yeniden yazılmış modül içerir:
media3-inspector- Meta verileri ve kareleri oynatma dışında ayıklamamedia3-ui-compose-material3- Yalnızca birkaç adımda temel bir Material3 Compose Media kullanıcı arayüzü oluşturmamedia3-cast- Cast ve yerel oynatma arasındaki geçişleri otomatik olarak yönetmemedia3-decoder-av1- dav1d kitaplığına dayalı olarak yeniden yazılan uzantı kod çözücüyle tutarlı AV1 oynatma
Ayrıca PreloadManager'da önbelleğe alma ve bellek yönetimi iyileştirmeleri yaptık ve çeşitli yeni ExoPlayer, Transformer ve MediaSession basitleştirmeleri sağladık.
Bu sürümde, medya düzenlemelerini önizlemek için CompositionPlayer'ya deneysel erişim de elde edersiniz.
Daha fazla bilgi edinmek için okumaya devam edin. Bu sürümdeki değişikliklerin kapsamlı bir özetini görmek için her zaman olduğu gibi lütfen sürüm notlarının tamamını inceleyin.
Meta verileri ve kareleri oynatma dışında ayıklama
Oynatmayı başlatmadan medyayı incelemek istediğiniz birçok durum olabilir. Örneğin, hangi biçimleri içerdiğini veya süresinin ne kadar olduğunu tespit etmek ya da küçük resimleri almak isteyebilirsiniz.
Yeni media3-inspector modülü, medyayı oynatmadan incelemeye yönelik tüm yardımcı programları tek bir yerde birleştirir:
MetadataRetrieversüreyi, biçimi ve statik meta verileri okumak içinMediaItem.- Bir öğeden çerçeve veya küçük resim almak için
FrameExtractor - Dosyadaki örnekler hakkında ayrıntılı bilgi edinmek için Android platformundaki MediaExtractor sınıfının doğrudan yerine
MediaExtractorCompat.
MetadataRetriever ve FrameExtractor, basit bir AutoCloseable kalıbını izler. Daha fazla bilgi için yeni rehber sayfalarımıza göz atın.
suspend fun extractThumbnail(mediaItem: MediaItem) {
FrameExtractor.Builder(context, mediaItem).build().use {
val thumbnail = frameExtractor.getThumbnail().await()
}
}Yalnızca birkaç adımda temel bir Material 3 Compose Media kullanıcı arayüzü oluşturun
Önceki sürümlerde, Compose kullanıcı arayüzü öğeleri ile Player örneğiniz arasında bağlayıcı kod sağlamaya başlamıştık. Media3 1.9.0 ile birlikte, tamamen stilize edilmiş Material3 düğmeleri ve içerik öğeleri içeren yeni bir modül olan media3-ui-compose-material3'ü ekledik. Stili özelleştirmek için gereken tüm esnekliği sağlarken yalnızca birkaç adımda medya kullanıcı arayüzü oluşturmanıza olanak tanır. Kendi kullanıcı arayüzü stilinizi oluşturmayı tercih ederseniz tüm güncelleme ve bağlantı mantığını ele alan yapı taşlarını kullanabilirsiniz. Böylece yalnızca kullanıcı arayüzü öğesini tasarlamaya odaklanmanız gerekir. Compose UI modülleri için lütfen genişletilmiş rehber sayfalarımıza göz atın.
Ayrıca, önceden oluşturulmuş arama çubuğu, PlayerView için eksiksiz bir hazır çözümün yanı sıra altyazı ve reklam entegrasyonu gibi daha fazla Compose bileşeni üzerinde çalışmaya devam ediyoruz.
@Composable
fun SimplePlayerUI(player: Player, modifier: Modifier = Modifier) {
Column(modifier) {
ContentFrame(player) // Video surface and shutter logic
Row (Modifier.align(Alignment.CenterHorizontally)) {
SeekBackButton(player) // Simple controls
PlayPauseButton(player)
SeekForwardButton(player)
}
}
}
Hazır öğelerle basit Compose oynatıcı kullanıcı arayüzü
Cast ve yerel oynatma arasındaki geçişleri otomatik olarak yönetme
media3-cast modülündeki CastPlayer, yerel oynatma (ör. ExoPlayer ile) ve uzaktan Cast oynatma arasındaki geçişleri otomatik olarak işleyecek şekilde yeniden yazıldı.
MediaSession kurulumunu yaptığınızda ExoPlayer etrafında bir CastPlayer oluşturup kullanıcı arayüzünüze bir MediaRouteButton eklemeniz yeterlidir.
// MediaSession setup with CastPlayer
val exoPlayer = ExoPlayer.Builder(context).build()
val castPlayer = CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build()
val session = MediaSession.Builder(context, castPlayer).build()
// MediaRouteButton in UI
@Composable fun UIWithMediaRouteButton() {
MediaRouteButton()
}
Media3 oturumu demo uygulamasında yeni CastPlayer entegrasyonu
dav1d'ye dayalı olarak yeniden yazılan uzantıyla tutarlı AV1 oynatma
1.9.0 sürümünde, popüler dav1d kitaplığına dayalı, tamamen yeniden yazılmış bir AV1 uzantı modülü bulunur.
Tüm uzantı kod çözücü modüllerinde olduğu gibi, ilgili yerel kodun doğru şekilde paketlenmesi için kaynaktan oluşturma gerektiğini lütfen unutmayın. Kod çözücü paketlemek, tüm cihazlarda tutarlılık ve biçim desteği sağlar ancak kod çözme işlemini kendi sürecinizde yürüttüğü için en iyi sonucu güvenebileceğiniz içeriklerde verir.
Önbelleğe alma ve bellek yönetimini PreloadManager'a entegre etme
PreloadManager özelliğimizi de daha iyi hale getirdik. Bu özellik, oynatma dışında medyayı belleğe önceden yüklemenize ve gerektiğinde sorunsuz bir şekilde oynatıcıya aktarmanıza olanak tanıyordu. Oldukça iyi performans gösterse de çok fazla önceden yükleme yaparak bellek sınırlarını aşmamaya dikkat etmeniz gerekiyordu. Bu nedenle Media3 1.9.0 ile bu işlemi çok daha kolay ve kararlı hale getiren iki özellik ekledik:
- Önbelleğe alma desteği : Önceden yükleme mesafesini tanımlarken artık önceden yüklenen öğeler için hedef durum olarak
PreloadStatus.specifiedRangeCached(0, 5000)seçebilirsiniz. Bu işlem, verileri belleğe yüklemek yerine belirtilen aralığı diskteki önbelleğinize ekler. Böylece, mevcut öğeden daha uzakta olanların artık bellekte yer kaplaması gerekmediğinden önceden yükleme için çok daha geniş bir öğe aralığı sağlayabilirsiniz. Bunun içinDefaultPreloadManager.BuilderiçindeCacheayarlanması gerektiğini unutmayın. - Otomatik bellek yönetimi :
LoadControlarayüzümüzü de güncelleyerek önceden yükleme durumunu daha iyi yönetmesini sağladık. Artık bellekteki tüm önceden yüklenmiş öğeler için açık bir üst bellek sınırı belirleyebilirsiniz. Varsayılan olarak 144 MB'tır ve sınırıDefaultLoadControl.Builderbölümünde yapılandırabilirsiniz. Sınır aşıldığındaDefaultPreloadManager, önceden yüklemeyi otomatik olarak durdurur ve gerekirse daha düşük öncelikli öğelerin belleğini otomatik olarak boşaltır.
ExoPlayer'daki yeni basitleştirilmiş varsayılan davranışlardan yararlanma
Her zaman olduğu gibi, ExoPlayer'da da birçok küçük iyileştirme yaptık. Bunlardan sadece birkaçı:
- Sesi kapatma ve açma: Daha önce
setVolumeyöntemi vardı ancak artık sesi kendiniz takip etmeden kolayca geri yüklemek içinmuteveunmuteyöntemlerini de ekledik. - Takılan oynatıcıyı algılama: Nadir durumlarda oynatıcı, ilerleme kaydetmeden arabelleğe alma veya oynatma durumunda takılabilir. Örneğin, bu durum codec sorunları veya yanlış yapılandırmalardan kaynaklanabilir. Kullanıcılarınız bu sorunlardan rahatsız olur ancak siz bu sorunları analizlerinizde asla görmezsiniz. Bu durumu daha belirgin hale getirmek için oynatıcı, takılma durumu algıladığında artık
StuckPlayerExceptionbildiriyor. - Varsayılan olarak uyanık tutma kilidi: Uyanık tutma kilidi yönetimi daha önce isteğe bağlıydı. Bu durum, arka planda çalışırken oynatma ilerlemesinin çok fazla gecikebileceği uç durumların bulunmasını zorlaştırıyordu. Bu özellik artık devre dışı bırakılabilir. Bu nedenle, bu konuda endişelenmenize gerek yoktur ve oynatma sırasında tüm manuel uyandırma kilidi işlemlerini kaldırabilirsiniz.
- Altyazı düğmesi mantığı için basitleştirilmiş ayar:
TrackSelectionParametersifadesini "altyazıları aç/kapat" olarak değiştirmek beklenenden daha zor olduğu için bu kullanım alanı için basit bir booleanselectTextByDefaultseçeneği ekledik.
MediaSession'da medya düğmesi tercihlerini basitleştirme
Şimdiye kadar, Android Auto veya WearOS'teki medya bildirimi çekmecesinde hangi düğmelerin gösterileceğine dair tercihlerinizi tanımlamak için standart bir oynatıcı yöntemini tetiklemek isteseniz bile özel komutlar ve düğmeler tanımlamanız gerekiyordu.
Media3 1.9.0, bu işlemi çok daha basit hale getiren yeni bir işlev sunuyor. Artık standart bir oynatıcı komutuyla medya düğmesi tercihlerini tanımlayabilir ve özel komut işlemeye gerek kalmaz.
session.setMediaButtonPreferences(listOf(
CommandButton.Builder(CommandButton.ICON_FAST_FORWARD) // choose an icon
.setDisplayName(R.string.skip_forward)
.setPlayerCommand(Player.COMMAND_SEEK_FORWARD) // choose an action
.build()
))
Hızlı ileri sarma düğmesi içeren medya düğmesi tercihleri
Gerçek zamanlı önizleme için CompositionPlayer
1.9.0 sürümünde, yeni bir @ExperimentalApi ek açıklaması altında CompositionPlayer tanıtılıyor. Ek açıklama, özelliğin deneme için kullanılabildiğini ancak geliştirme aşamasında olduğunu gösterir.
CompositionPlayer, Media3 düzenleme API'lerinde medya düzenlemelerinin gerçek zamanlı önizlemesi için tasarlanmış yeni bir bileşendir. Tanıdık Media3 Player arayüzü üzerine kurulu olan CompositionPlayer, kullanıcıların dışa aktarma işlemine başlamadan önce değişikliklerini uygulamada görmelerini sağlar. Dışa aktarma için Transformer'ye ileteceğiniz Composition nesnesini kullanır. Önizleme ve dışa aktarma için veri modelini birleştirerek düzenleme iş akışını kolaylaştırır.
CompositionPlayer'ı kullanmaya başlamanızı ve geri bildiriminizi paylaşmanızı öneririz. Daha fazla bilgi için yakında yayınlanacak gönderileri ve doküman güncellemelerini takip edin.
Transformer'da varsayılan muxer olarak InAppMuxer
Transformer artık medya kapsayıcı dosyalarını yazmak için varsayılan muxer olarak InAppMp4Muxer kullanıyor. InAppMp4Muxer, dahili olarak Media3 Muxer modülüne bağlıdır ve tüm API sürümlerinde tutarlı davranış sağlar.
Transformer artık varsayılan olarak Android platformunun MediaMuxer'ını kullanmasa da kullanım alanınız gerektiriyorsa FrameworkMuxer.Factory'yi setMuxerFactory aracılığıyla sağlayabileceğinizi unutmayın.
Yeni hız ayarlama API'leri
1.9.0 sürümü, medya düzenleme için hız ayarlama API'lerini basitleştiriyor. Hızı kontrol etmek için doğrudan EditedMediaItem.Builder üzerinde yeni yöntemler kullanıma sunduk. Bu sayede API daha sezgisel hale geldi. Artık EditedMediaItem.Builder üzerinde setSpeed(SpeedProvider provider) işlevini çağırarak bir klibin hızını değiştirebilirsiniz:
val speedProvider = object : SpeedProvider {
override fun getSpeed(presentationTimeUs: Long): Float {
return speed
}
override fun getNextSpeedChangeTimeUs(timeUs: Long): Long {
return C.TIME_UNSET
}
}
EditedMediaItem speedEffectItem = EditedMediaItem.Builder(mediaItem)
.setSpeed(speedProvider)
.build()Bu yeni yaklaşım, desteğini sonlandırdığımız ve gelecekteki bir sürümde kaldıracağımız Effects#createExperimentalSpeedChangingEffects() kullanımına yönelik önceki yöntemin yerini alıyor.
EditedMediaItemSequence için parça türleriyle tanışın
1.9.0 sürümünde, EditedMediaItemSequence için sıra oluşturma sırasında istenen çıkış parçası türlerinin belirtilmesi gerekir. Bu değişiklik, parçaların işlenmesinin tüm beste boyunca daha açık ve sağlam olmasını sağlar.
Bu işlem, bir dizi parça türünü (ör. C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO) kabul eden yeni bir EditedMediaItemSequence.Builder oluşturucu aracılığıyla yapılır.
Oluşturma sürecini basitleştirmek için yeni statik kolaylık yöntemleri ekledik:
- EditedMediaItemSequence.withAudioFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withVideoFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withAudioAndVideoFrom(List<EditedMediaItem>)
Daha net ve güvenilir sıra tanımları için yeni oluşturucuya veya kolaylık yöntemlerine geçmenizi öneririz.
Yalnızca video içeren bir dizi oluşturma örneği:
EditedMediaItemSequence videoOnlySequence =
EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO))
.addItem(editedMediaItem)
.build()Hatalarla karşılaşırsanız, sorularınız varsa veya özellik istekleriniz olursa lütfen Media3 Sorun İzleyici üzerinden bizimle iletişime geçin. Sizden haber bekliyoruz.
Okumaya devam edin
-
Ürün Haberleri
Google I/O, her yıl Android geliştirme de dahil olmak üzere ekosistemler ve ürünlerle ilgili yeni duyurular ve kaynaklar sunar. Geliştirme süreci yapay zeka ve aracı destekli araçlara doğru kayarken Android için nasıl geliştirme yapmaya karar verirseniz verin sizi daha iyi desteklemek için tekliflerimizi genişlettik.
Simona Milanovic • Okuma süresi: 2 dakika
-
Ürün Haberleri
Google I/O 2026'da, Android ekosistemindeki en son gelişmelerin, geliştirme verimliliğini en üst düzeye çıkarırken uygulamanızın kalitesini artırmanıza nasıl yardımcı olabileceğini gösterdik.
Ataul Munim • Okuma süresi: 3 dk.
-
Ürün Haberleri
Google I/O 2026'da Android'in işletim sisteminden zeka sistemine geçişini tanıttık. Ayrıca, sistemle yerel olarak akıllı deneyimler oluşturmanın ve Google'ın yapay zeka gücünü uygulamalarınıza taşımanın yollarını gösterdik.
Jingyu Shi • Okuma süresi: 2 dakika
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.