Media3 1.9.0 yayınlandı En son sürümde, 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 de yer alıyor:
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üsüyle tutarlı AV1 oynatma
Ayrıca PreloadManager için önbelleğe alma ve bellek yönetimi iyileştirmeleri yaptık ve çeşitli yeni ExoPlayer, Transformer ve MediaSession basitleştirmeleri sunduk.
Bu sürüm, medya düzenlemelerini önizlemek için CompositionPlayer'ya deneysel erişim imkanı da sunar.
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.
Oynatma dışında meta verileri ve kareleri 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 deseni 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ştirme konusunda 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 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)
}
}
}
Kullanıma hazır öğeler içeren 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 öğenizin etrafında CastPlayer oluşturup kullanıcı arayüzünüze 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 tabanlı 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ü yer alıyor.
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 ö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 sürümüne bu işlemi çok daha kolay ve kararlı hale getiren iki özellik ekledik:
- Önbelleğe alma desteği : Ne kadar önceden yükleme yapılacağını 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. Bu sayede, mevcut öğeden daha uzakta olanlar artık bellekte yer kaplamadığından ö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önetebileceksiniz. 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 serbest bırakı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çını belirtmek gerekirse:
- Sesi kapatma ve açma: Bu işlem için
setVolumeyöntemini kullanıyorduk. Şimdi ise sesi kendiniz takip etmeden kolayca geri yüklemek içinmuteveunmuteyöntemlerini 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ı Analytics'te görmezsiniz. Bu durumu daha belirgin hale getirmek için oynatıcı, takılma durumu algıladığında artık
StuckPlayerExceptionsimgesini gösteriyor. - Varsayılan olarak uyanık kalma kilidi: Uyanık kalma kilidi yönetimi daha önce isteğe bağlıydı. Bu nedenle, arka planda çalışırken oynatma ilerlemesinin çok 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 ile ilgili tüm manuel uyandırma kilidi işlemlerini kaldırabilirsiniz.
- CC düğmesi mantığı için basitleştirilmiş ayar:
TrackSelectionParameterssimgesini "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ımlayabilirsiniz. Bu işlem için özel komut işleme gerekmez.
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
Anlık ö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 anlık ö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 kullandığından, ö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.
Dönüştürücüde 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ştirir. 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 setSpeed(SpeedProvider provider) işlevini EditedMediaItem.Builder üzerinde ç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ürleri tanıtılıyor
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ça işlemenin tüm kompozisyon 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.
İçerik oluşturmayı kolaylaştırmak 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 sıra oluşturma örneği:
EditedMediaItemSequence videoOnlySequence =
EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO))
.addItem(editedMediaItem)
.build()Hata ile karşılaşırsanız veya sorularınız ya da özellik istekleriniz varsa lütfen Media3 Sorun Takip Aracı üzerinden iletişime geçin. Sizden haber bekliyoruz.
-
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk. -
Ürün HaberleriGooglebook, ortak bir Android temeli üzerine inşa edilmiş yeni bir dizüstü bilgisayar kategorisini tanıtıyor. HP, Dell, Lenovo, Acer ve Asus gibi iş ortaklarının yüksek performanslı donanımları, mobil kolaylığı masaüstü gücüyle birleştirir.
Fahd Imtiaz, Loryn Hairston • Okuma süresi: 4 dakika
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.