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
Oynatma başlatmadan medyayı incelemek istediğiniz birçok durum vardır. Örneğin, hangi biçimleri içerdiğini veya süresini algılamak 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 geçen
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. Bu bileşenler, stili özelleştirmek için gereken tüm esnekliği sağlarken medya kullanıcı arayüzünü yalnızca birkaç adımda 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 kullanıcı arayüzü modülleri için lütfen genişletilmiş rehber sayfalarımıza göz atın.
Ayrıca, önceden oluşturulmuş bir 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 hizmetimizi de daha iyi hale getirdik. Bu API, 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 sürümüne bu işlemi çok daha kolay ve kararlı hale getiren iki özellik ekledik:
- Önbelleğe alma desteği : Ne kadar önyükleme yapılacağını tanımlarken artık önyü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. Bu sayede, mevcut öğeden daha uzakta olan öğelerin 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üncelledik. Böylece, önceden yükleme durumunu daha iyi yönetebiliyoruz. 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 bazıları:
- Sesi kapatma ve açma: Bu işlem için
setVolumeyöntemimiz 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 nedenle, arka planda çalışırken oynatma ilerlemesinin çok fazla gecikebileceği uç durumları bulmak zordu. 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ğiyle ilgili 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şleme gerektirmeyen bir çözüm kullanabilirsiniz.
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 kullanıma sunuluyor. Ek açıklama, özelliğin deneme için kullanılabildiğini ancak geliştirme aşamasında olduğunu gösterir.
CompositionPlayer, medya düzenlemelerinin gerçek zamanlı önizlemesi için tasarlanmış Media3 düzenleme API'lerindeki 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. Böylece, ö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ümanlardaki güncellemeleri 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. Dahili olarak InAppMp4Muxer, tüm API sürümlerinde tutarlı davranış sağlayan Media3 Muxer modülüne bağlıdır.
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ğlayabilirsiniz.
Yeni hız ayarlama API'leri
1.9.0 sürümü, medya düzenleme için hız ayarlama API'lerini basitleştirir. Hızı kontrol etmek için doğrudan EditedMediaItem.Builder üzerinde yeni yöntemler sunarak API'yi daha sezgisel hale getirdik. Artık setSpeed(SpeedProvider provider) üzerinde EditedMediaItem.Builder ç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 veya sorularınız ya da özellik istekleriniz varsa lütfen Media3 Sorun İzleyici üzerinden iletişime geçin. Sizden haber bekliyoruz.
Okumaya devam edin
-
Ürün Haberleri
Android Emulator ile çeşitli cihaz etkileşimlerini test etmek artık her zamankinden daha kolay.
Steven Jenkins • Okuma süresi: 2 dakika
-
Ürün Haberleri
Her geliştiricinin yapay zeka iş akışı ve ihtiyaçları benzersizdir. Bu nedenle, yapay zekanın geliştirme sürecinize nasıl yardımcı olacağını seçebilmeniz önemlidir. Ocak ayında, Android Studio'daki yapay zeka işlevlerine güç katmak için yerel veya uzak bir yapay zeka modeli seçme özelliğini kullanıma sunduk.
Matthew Warner • Okuma süresi: 2 dakika
-
Ürün Haberleri
Android Studio Panda 3 artık kararlı ve üretimde kullanıma hazır. Bu sürüm, yapay zeka destekli iş akışlarınız üzerinde daha fazla kontrol ve özelleştirme imkanı sunarak yüksek kaliteli Android uygulamaları oluşturmayı her zamankinden daha kolay hale getiriyor.
Matt Dyor • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.