Media3 1.11 yayınlandı. En iyi Android medya uygulamalarının büyük çoğunluğuna güç veren bu sürüm; oynatma, düzenleme ve kullanıcı arayüzü bileşenlerinde yeni özellikler, hata düzeltmeleri ve iyileştirmeler sunar. Jetpack Compose kullanıcı arayüzü modüllerimizi, özelleştirilebilir Player yuvalar, kullanımı kolay varsayılanlar, etkileşimli hareketler, durum gözlemcileri ve PlayerPool kullanılarak kısa video önceden yükleme ile genişletiyoruz. Ayrıca, SystemUI Output Switcher desteğiyle Media3 Cast entegrasyonunu modernize ettik, yeni bir Ktor HTTP istemci ağ uzantısı kullanıma sunduk ve Ogg ile WAV dosyaları için yeni muxing yardımcı programları ekledik.
Önemli noktaları öğrenmek için okumaya devam edin. Değişikliklerin kapsamlı listesi için sürüm notlarının tamamına göz atın.
Oynatma kullanıcı arayüzü ve Oluşturma
Android'de Compose'u öncelikli tutmaya devam ederken media3-ui-compose ve media3-ui-compose-material3 modüllerini genişletmeye devam ediyoruz. Bu güncelleme, oynatıcı düzeniniz üzerinde daha ayrıntılı kontrol, daha zengin etkileşim kalıpları ve Material 3 ile daha derin entegrasyon sunar.
Özelleştirilebilir oynatıcı düzeni
Material 3 Player Composable artık topControls, centerControls, bottomControls ve errorOverlay için özel içerik yuvalarını destekliyor. Kendi composable'larınızı ekleyebilir veya PlayerDefaults'da yayınlanan hazır varsayılanları kullanabilirsiniz:
Player( player = player, topControls = { PlayerDefaults.TopControls(player) }, centerControls = { PlayerDefaults.CenterControls(player) }, bottomControls = { PlayerDefaults.BottomControls(player) }, )
Player Composable, FocusRequester desteğiyle de entegre olarak Android TV, katlanabilir cihazlar ve masaüstü ortamlarında sorunsuz D-pad ve klavye navigasyonu sağlar.
Jestler ve oynatma hızı kontrolü
PlaybackSpeedState artık hızlı ileri/ağır çekim API'si sunuyor. demo-compose app, oynatmayı hızlıca ileri sarmak için uzun basma hareketini ve iki kez dokunarak arama yapmayı gösterir. 1.10 sürümünde kullanıma sunulan ProgressSlider ile birlikte Compose oynatıcı kullanıcı arayüzü artık zengin dokunma ve hareket etkileşimleri sunuyor.
PlayerPool ile kısa video önceden yükleme
Kayar pencereli medya feed'lerine (örneğin, kısa dikey videolar) sahip uygulamalarda birden fazla ExoPlayer örneğini verimli bir şekilde yönetmek yaygın bir zorluktur. Media3 1.11, oynatıcı geri dönüşümünü ve ön yüklemeyi otomatik olarak işlemek için PlayerPool (common-ktx içinde) ve rememberPooledPlayer (ui-compose içinde) özelliklerini sunar.
demo-compose içindeki yeni ShortFormPlayerScreen, bu özelliği uygulamada gösterir. Kullanıcı kaydırdıkça oyuncuların gruplandırıldığı, önceden yüklendiği ve sorunsuz bir şekilde yeniden kullanıldığı dikey olarak sayfalandırılmış bir feed'dir.
MiniController
media3-ui-compose-material3 içindeki yeni MiniController Composable, mevcut öğenin başlığını, sanatçısını, albüm kapağını ve ilerleme durumunu oynatma/duraklatma kontrolleriyle birlikte gösteren kompakt bir oynatma çubuğu sunar. media3-ui-compose-material3 içindeki tüm varsayılan composable'larımız gibi MiniController de Material 3 dinamik renk entegrasyonunu destekler. Bu sayede, kullanıcının duvar kağıdı temasına otomatik olarak uyum sağlayabilir. Bu özellik, kullanıcının içeriklere göz atarken veya etkin yayın oturumları sırasında olduğu gibi kalıcı alt sayfa ya da mini oynatıcı işlevleri için idealdir.
Meta veriler ve hatalar için genişletilmiş durum tutucular
media3-ui-compose'ya birkaç yeni reaktif durum tutucu ekledik:
rememberCurrentMediaItemState: Şu anda oynatılan öğeyle ilgili meta verileri gözlemleyin.rememberPlaylistState: Oynatma listesinin tamamını ve etkin indeksleri gözlemleyin.rememberErrorState– Material 3'te eşleşenErrorTextComposable ve varsayılanErrorOverlayile oynatma hatalarını izleyin.
Gelecek sürümlerde yeni eklemeler ve daha fazla özelleştirme seçeneği üzerinde çalışmaya devam edeceğiz. Lütfen proje sorun izleyici ile ilgili düşüncelerinizi paylaşın.
Modernleştirilmiş Cast entegrasyonu
Media3 1.11, Cast uzantısını programatik yapılandırma seçenekleri ve işletim sistemi düzeyinde yönlendirme desteğiyle günceller.
CastParams ve SystemUI Çıkış Değiştirici
Artık Yayın uzantısını CastParams kullanarak yapılandırabilirsiniz:
val castParams = CastParams.Builder() .setShowSystemOutputSwitcherOnCastButtonClick(true) .build() Cast.getSingletonInstance(context).initialize(castParams)
setShowSystemOutputSwitcherOnCastIconClick(true) ayarı, desteklenen platform sürümlerinde Android'in yerel SystemUI Output Switcher'ının açılmasını MediaRouteButton yapılandırarak birleşik bir çıkış seçici deneyimi sunar.
Compose'da Reactive MediaRouteButton durumu
Jetpack Compose kullanan uygulamalar artık, iletişim kutusu durumunu otomatik olarak gözlemleyen ve buna göre güncelleyen medya yönlendirme düğmesini (diğer adıyla yayın düğmesi) kolayca ekleyebilir. Media3'ün CastPlayer ile birlikte kullanıldığında başka bir mantığa gerek yoktur.
@Composable fun TopAppBarWithCast() { Row { Text(text = "App Title") MediaRouteButton() } }
Temel oynatma ve oturum geliştirmeleri
Eclipsa Video - HAGC dynamic HDR metadata (API 37+)
Eclipsa Video, cihazlar arasında daha tutarlı bir HDR deneyimi sunmayı vaat ediyor. Tutarlı bir temel HDR beyazı, ekrana ve çevreye bağlı olarak uyarlanabilir boşluk payı sayesinde yaratıcı amacın tüm cihazlarda korunmasını sağlıyor.
ExoPlayer artık aşamalı medya (MP4, Matroska) için gerekli HAGC (ST 2094-50) zamanlanmış meta verilerinin oynatılmasını destekliyor. Oynatıcı, HAGC meta veri parçalarını ilişkili video parçasıyla otomatik olarak birleştirir ve meta verileri API 37 ve sonraki sürümlerdeki cihazlarda bant dışı olarak kod çözücüye iletir. ExoPlayer, eski cihazlarda ayarlamalar olmadan standart bir HDR oynatma deneyimi sunmak için sorunsuz bir şekilde geri döner.
Yeni Ktor HTTP istemci uzantısı
Yeni bir media3-datasource-ktor uzantı modülü, Ktor HTTP yığını tarafından desteklenen KtorDataSource sağlar. Bu, mevcut Cronet ve OkHttp veri kaynağı modüllerine Kotlin öncelikli, coroutine dostu bir alternatif sunar.
Eşzamansız MediaSession bağlantıları
MediaSession.Callback artık onConnectAsync() içeriyor. Bu özellik, kumanda bağlantısı denemelerini eşzamansız olarak işlemenize olanak tanır. Örneğin, bağlantıyı kabul etmeden önce yetkilendirmeyi doğrulayabilirsiniz. Mevcut onConnect ile aynı davranış için Futures.immediateFuture(ConnectionResult) ile birlikte anında Future döndürebilirsiniz.
override fun onConnectAsync( session: MediaSession, controller: MediaSession.ControllerInfo ): ListenableFuture<MediaSession.ConnectionResult> { return authenticateControllerAsync(controller) }
Daha güvenli MediaSession varsayılanları
MediaSession.Callback içinde onConnect veya onConnectAsync'yi geçersiz kılmayan uygulamalarda kitaplık artık daha güvenli bir yapılandırmaya ayarlanır. Özellikle, oturum verileri artık varsayılan olarak güvenilmeyen denetleyicilerle paylaşılmıyor. Bu nedenle, bağlantıyı yetkilendirmek için bu geri çağırma yöntemlerini açıkça uygulamadığınız sürece bildirim erişimi olmayan üçüncü taraf veya sistem dışı uygulamaların oturum verilerine erişimi kısıtlanıyor.
Yeni Muxer uygulamaları ve kapsayıcı ayrıştırma
OggMuxer ve WavMuxer
İki yeni özel çoklayıcı ekledik: OggMuxer, OPUS ve VORBIS akışlarını standart .ogg dosyalarında çoklamak için, WavMuxer ise sıkıştırılmamış ve kayan noktalı PCM .wav ses dosyaları oluşturmak için.
Container ayrıştırma ve parça referansları
- MP4 İz Referansları (
tref):Mp4Muxer.addTrackReference, bağımlı meta verilerin veya yardımcı izlerin birincil video akışlarına bağlanmasına olanak tanır. - Bölüm Ayıklama: MP4 dosyalarındaki (
.m4a,.m4b) QuickTime ve Nero bölümleri ile Matroska bölümleri artık sesli kitap ve podcast'te gezinme içinChaptermeta veri girişleri olarak ayıklanıyor.
Hata bildirmek, soru sormak veya özellik isteğinde bulunmak için lütfen sorun izleyiciyi kullanın. Sizden haber bekliyoruz.
-
Nasıl yapılır? rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, bu seride kullanacağımız demo uygulaması Jetpacker'ı tanıtmıştık.
Caren Chang • Okuma süresi 6 dakika -
Nasıl yapılır? rehberleriJetpacker, ekibimizin bu yılki Google I/O için sıfırdan oluşturduğu teknik bir tanıtım uygulamasıdır (Antigravity kullanılarak oluşturulmuştur). Jetpacker, kullanıcıların bir sonraki büyük macerasını planlamasına, keşfetmesine ve maceradan keyif almasına yardımcı olur.
Jolanda Verhoef • Okuma süresi 4 dakika -
Nasıl yapılır? rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, bulutta barındırılan ve hibrit yapay zeka özellikleri oluşturmak için Firebase AI Logic'ten nasıl yararlanılacağını ele almıştık.
Ben Weiss • Okuma süresi 6 dakika
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.