Nasıl yapılır? rehberleri
CameraX 1.5 ile Yüksek Hızlı Çekim ve Ağır Çekim Video
Okuma süresi 6 dakika
Hızlı hareket eden nesneleri net bir şekilde yakalamak, modern kamera uygulamalarının temel özelliklerinden biridir. Bu, yüksek hızlı çekim ile elde edilir. Yüksek hızlı çekim, karelerin 120 veya 240 fps gibi hızlarda alınması işlemidir. Bu yüksek kaliteli çekim, iki farklı amaç için kullanılabilir: Ayrıntılı, kare kare analiz için yüksek kare hızlı video oluşturma veya ekranda aksiyonun çarpıcı bir şekilde geliştiği ağır çekim video oluşturma.
Daha önce, bu özellikleri Camera2 API ile uygulamak daha uygulamalı bir süreçti. Artık CameraX 1.5'teki yeni yüksek hızlı API ile tüm süreç basitleştirildi. Bu sayede, gerçek yüksek kare hızlı videolar veya oynatmaya hazır ağır çekim klipler oluşturma esnekliğine sahip olursunuz. Bu gönderide, her ikisinde de uzmanlaşmanın yolları açıklanmaktadır. CameraX'i yeni kullanmaya başlayanlar CameraX'e Genel Bakış başlıklı makaleyi inceleyerek bu konuda bilgi edinebilir.
Ağır Çekimin Arkasındaki İlke
Ağır çekimin temel prensibi, videoyu oynatılma hızından çok daha yüksek bir kare hızında çekmektir. Örneğin, saniyede 120 kare (fps) hızında bir saniyelik bir etkinlik kaydeder ve bu kaydı standart 30 fps hızında oynatırsanız videonun oynatılması dört saniye sürer. Zamanın bu şekilde "uzatılması", dramatik ağır çekim efektini oluşturur ve çıplak gözle görülemeyecek kadar hızlı olan ayrıntıları görmenizi sağlar.
Son çıktı videonun sorunsuz ve akıcı olması için genellikle en az 30 FPS'de oluşturulması gerekir. Bu nedenle, 4 kat ağır çekim video oluşturmak için orijinal çekim kare hızının en az 120 fps olması gerekir (120 çekim fps ÷ 4 = 30 oynatma fps).
Yüksek kare hızlı çekim yapıldıktan sonra, istenen sonucu elde etmenin iki temel yolu vardır:
- Oyuncu tarafından kontrol edilen ağır çekim (yüksek kare hızlı video): Yüksek hızlı kayıt (ör. 120 fps) doğrudan yüksek kare hızlı video dosyası olarak kaydedilir. Oynatma hızını yavaşlatmak video oynatıcının sorumluluğundadır. Bu sayede kullanıcı, normal ve ağır çekim oynatma arasında geçiş yapabilir.
- Oynatılmaya hazır ağır çekim (yeniden kodlanmış video): Yüksek hızlı video akışı işlenir ve standart kare hızına (ör. 30 fps) sahip bir dosyaya yeniden kodlanır. Ağır çekim efekti, kare zaman damgaları ayarlanarak "yerleştirilir". Elde edilen video, özel bir işlem gerektirmeden herhangi bir standart video oynatıcıda ağır çekimde oynatılır. Video varsayılan olarak ağır çekimde oynatılsa da video oynatıcılar, kullanıcının hızı artırmasına ve videoyu orijinal hızında izlemesine olanak tanıyan oynatma hızı kontrolleri sunabilir.
CameraX API, aşağıda göreceğiniz gibi hangi yaklaşımı istediğinizi seçebileceğiniz birleşik bir yol sunarak bu işlemi basitleştirir.
Yeni Yüksek Hızlı Video API'si
Yeni CameraX çözümü iki ana bileşen üzerine kurulmuştur:
Recorder#getHighSpeedVideoCapabilities(CameraInfo): Bu yöntem, kameranın yüksek hızda kayıt yapıp yapamayacağını ve yapabiliyorsa hangi çözünürlüklerin (Qualitynesneler) desteklendiğini kontrol etmenizi sağlar.HighSpeedVideoSessionConfig: Bu,VideoCapturevePreviewkullanım alanlarınızı gruplandıran, CameraX'e birleşik bir yüksek hızlı kamera oturumu oluşturmasını söyleyen özel bir yapılandırma nesnesidir. VideoCapture akışının yapılandırılan yüksek kare hızında çalışacağını ancak Önizleme akışının ekranda sorunsuz bir görüntü sağlamak için genellikle kamera sistemi tarafından en az 30 FPS'lik standart bir hızla sınırlandırılacağını unutmayın.
Başlarken
Başlamadan önce, uygulamanızın build.gradle.kts dosyasına gerekli CameraX bağımlılıklarını eklediğinizden emin olun. Temel CameraX kitaplıklarının yanı sıra camera-video yapıtı da gerekir.
// build.gradle.kts (Module: app) dependencies { val camerax_version = "1.5.1" implementation("androidx.camera:camera-core:$camerax_version") implementation("androidx.camera:camera-camera2:$camerax_version") implementation("androidx.camera:camera-lifecycle:$camerax_version") implementation("androidx.camera:camera-video:$camerax_version") implementation("androidx.camera:camera-view:$camerax_version") }
Deneysel API'ler Hakkında Not
Yüksek hızlı kayıt API'lerinin şu anda deneysel aşamada olduğunu belirtmek isteriz. Bu nedenle, gelecekteki sürümlerde değiştirilebilirler. Bu özelliği kullanmak için kodunuza aşağıdaki açıklamayı ekleyerek etkinleştirmeniz gerekir:
@kotlin.OptIn(ExperimentalSessionConfig::class, ExperimentalHighSpeedVideo::class)
Uygulama
Her iki sonuç için de uygulama aynı kurulum adımlarıyla başlar. Yüksek kare hızlı video veya ağır çekim video oluşturma seçimi tek bir ayara bağlıdır.
1. Yüksek Hızlı Çekim'i ayarlama
Öncelikle, hedefiniz ne olursa olsun ProcessCameraProvider simgesini edinmeniz, cihaz özelliklerini kontrol etmeniz ve kullanım alanlarınızı oluşturmanız gerekir.
Aşağıdaki kod bloğunda, askıya alma işlevi içindeki kurulum akışının tamamı gösterilmektedir. Bu işlevi lifecycleScope.launch gibi bir eş yordam kapsamından çağırabilirsiniz.
// Add the OptIn annotation at the top of your function or class @kotlin.OptIn(ExperimentalSessionConfig::class, ExperimentalHighSpeedVideo::class) private suspend fun setupCamera() { // Asynchronously get the CameraProvider val cameraProvider = ProcessCameraProvider.awaitInstance(this) // -- CHECK CAPABILITIES -- val cameraInfo = cameraProvider.getCameraInfo(CameraSelector.DEFAULT_BACK_CAMERA) val videoCapabilities = Recorder.getHighSpeedVideoCapabilities(cameraInfo) if (videoCapabilities == null) { // This camera device does not support high-speed video. return } // -- CREATE USE CASES -- val preview = Preview.Builder().build() // You can create a Recorder with default settings. // CameraX will automatically select a suitable quality. val recorder = Recorder.Builder().build() // Alternatively, to use a specific resolution, you can configure the // Recorder with a QualitySelector. This is useful if your app has // specific resolution requirements or you want to offer user // preferences. // To use a specific quality, you can uncomment the following lines. // Get the list of qualities supported for high-speed video. // val supportedQualities = videoCapabilities.getSupportedQualities(DynamicRange.SDR) // Build the Recorder using the quality from the supported list. // val recorderWithQuality = Recorder.Builder() // .setQualitySelector(QualitySelector.from(supportedQualities.first())) // .build() // Create the VideoCapture use case, using either recorder or recorderWithQuality val videoCapture = VideoCapture.withOutput(recorder) // Now you are ready to configure the session for your desired output... }
2. Çıkışınızı Seçme
Şimdi ne tür bir video oluşturmak istediğinize karar verin. Bu kod, yukarıda gösterilen setupCamera() suspend işlevi içinde çalıştırılır.
A seçeneği: Yüksek kare hızlı video oluşturma
Son dosyanın yüksek kare hızına (ör. 120 FPS video) sahip olmasını istiyorsanız bu seçeneği belirleyin.
// Create a builder for the high-speed session val sessionConfigBuilder = HighSpeedVideoSessionConfig.Builder(videoCapture) .setPreview(preview) // Query and apply a supported frame rate. Common supported frame rates include 120 and 240 fps. val supportedFrameRateRanges = cameraInfo.getSupportedFrameRateRanges(sessionConfigBuilder.build()) sessionConfigBuilder.setFrameRateRange(supportedFrameRateRanges.first())
B seçeneği: Oynatmaya hazır bir ağır çekim video oluşturun
Herhangi bir standart video oynatıcıda otomatik olarak ağır çekimde oynatılan bir video istiyorsanız bu seçeneği belirleyin.
// Create a builder for the high-speed session val sessionConfigBuilder = HighSpeedVideoSessionConfig.Builder(videoCapture) .setPreview(preview) // This is the key: enable automatic slow-motion! sessionConfigBuilder.setSlowMotionEnabled(true) // Query and apply a supported frame rate. Common supported frame rates include 120, 240, and 480 fps. val supportedFrameRateRanges = cameraInfo.getSupportedFrameRateRanges(sessionConfigBuilder.build()) sessionConfigBuilder.setFrameRateRange(supportedFrameRateRanges.first())
Bu tek işaret, oynatmaya hazır bir ağır çekim video oluşturmanın anahtarıdır. setSlowMotionEnabled doğru olduğunda CameraX, yüksek hızlı akışı işler ve standart 30 fps video dosyası olarak kaydeder. Ağır çekim hızı, yakalama kare hızının bu standart oynatma hızına oranıyla belirlenir.
Örneğin:
- 120 fps hızında kayıt yapıldığında 1/4x hızında oynatılan bir video elde edilir (120 ÷ 30 = 4).
- 240 FPS'de kayıt yapıldığında 1/8x hızında oynatılan bir video elde edilir (240 ÷ 30 = 8).
Her Şeyi Bir Araya Getirme: Videoyu Kaydetme
HighSpeedVideoSessionConfig yapılandırdıktan ve yaşam döngüsüne bağladıktan sonraki son adım kaydı başlatmaktır. Çıkış seçeneklerini hazırlama, kaydı başlatma ve video etkinliklerini işleme süreci, standart video kaydında olduğu gibidir.
Bu yayında yüksek hızlı yapılandırmaya odaklanıldığından kayıt süreci ayrıntılı olarak ele alınmayacaktır. FileOutputOptions veya MediaStoreOutputOptions nesnesi hazırlamaktan VideoRecordEvent geri çağırmalarını işlemeye kadar her konuda kapsamlı bir kılavuz için lütfen VideoCapture belgelerine bakın.
// Bind the session config to the lifecycle cameraProvider.bindToLifecycle( this as LifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, sessionConfigBuilder.build() // Bind the config object from Option A or B ) // Start the recording using the VideoCapture use case val recording = videoCapture.output .prepareRecording(context, outputOptions) // See docs for creating outputOptions .start(ContextCompat.getMainExecutor(context)) { recordEvent -> // Handle recording events (e.g., Start, Pause, Finalize) }
Ağır çekim videolar için Google Fotoğraflar desteği
CameraX'te setSlowMotionEnabled(true) özelliğini etkinleştirdiğinizde ortaya çıkan video dosyası, standart video oynatıcılarda ve galeri uygulamalarında anında tanınacak ve ağır çekim olarak oynatılacak şekilde tasarlanır. Özellikle Google Fotoğraflar, yakalama kare hızı 120, 240, 360, 480 veya 960 fps olduğunda bu ağır çekim videolar için gelişmiş işlevler sunar:
- Küçük resimde belirgin kullanıcı arayüzü tanıma: Google Fotoğraflar kitaplığınızda, ağır çekim videolar normal videolardan ayırt edilebilmeleri için belirli kullanıcı arayüzü öğeleriyle tanımlanabilir.
- Oynatma sırasında ayarlanabilir hız segmentleri: Google Fotoğraflar, ağır çekim videolar oynatılırken videonun hangi bölümlerinin ağır çekimde, hangi bölümlerinin normal hızda oynatılacağını ayarlamaya yönelik kontroller sunarak kullanıcılara yaratıcı kontrol imkanı tanır. Düzenlenen video, Paylaş düğmesi kullanılarak yeni bir video dosyası olarak dışa aktarılabilir. Bu işlem sırasında, tanımladığınız ağır çekim bölümleri korunur.
Cihaz Desteği Hakkında Not
CameraX'in yüksek hızlı API'si, bir cihazın hangi yüksek hızlı çözünürlükleri ve kare hızlarını desteklediğini belirlemek için temel Android CamcorderProfile sistemini kullanır. CamcorderProfiles, Android Uyumluluk Test Paketi (CTS) tarafından doğrulanır. Bu sayede, cihazın bildirdiği video kaydı özelliklerine güvenebilirsiniz.
Bu, bir cihazın yerleşik kamera uygulamasıyla ağır çekim video kaydetme özelliğinin, CameraX yüksek hızlı API'sinin çalışacağını garanti etmediği anlamına gelir. Bu tutarsızlık, cihaz üreticileri cihazlarının donanım yazılımındaki CamcorderProfile girişlerini doldurmaktan sorumlu olduğu ve bazen CamcorderProfile.QUALITY_HIGH_SPEED_1080P ve CamcorderProfile.QUALITY_HIGH_SPEED_720P gibi gerekli yüksek hızlı profillerin dahil edilmemesinden kaynaklanır. Bu profiller eksik olduğunda Recorder.getHighSpeedVideoCapabilities(), null değerini döndürür.
Bu nedenle, farklı cihazlarda tutarlı bir deneyim sağlamanın en güvenilir yolu olduğundan, desteklenen özellikleri programatik olarak kontrol etmek için her zaman Recorder.getHighSpeedVideoCapabilities() kullanmanız gerekir. HighSpeedVideoSessionConfig öğesini Recorder.getHighSpeedVideoCapabilities() öğesinin null döndürdüğü bir cihaza bağlamaya çalışırsanız işlem IllegalArgumentException ile başarısız olur. Bu yüksek hızlı profiller sürekli olarak Google Pixel cihazlarda yer aldığından bu cihazlarda desteği onaylayabilirsiniz. Ayrıca Motorola Edge 30, OPPO Find N2 Flip ve Sony Xperia 1 V gibi diğer üreticilerin çeşitli cihazları da yüksek hızlı video özelliklerini destekler.
Sonuç
CameraX yüksek hızlı video API'si hem güçlü hem de esnektir. İster teknik analiz için gerçek yüksek kare hızlı çekimlere ihtiyacınız olsun ister uygulamanıza sinematik ağır çekim efektleri eklemek isteyin, HighSpeedVideoSessionConfig birleşik ve basit bir çözüm sunar. setSlowMotionEnabled işaretinin rolünü anlayarak her iki kullanım alanını da kolayca destekleyebilir ve kullanıcılarınıza daha fazla yaratıcı kontrol olanağı sunabilirsiniz.
Okumaya devam edin
-
"Nasıl yapılır?" rehberleri
Aşırı pilin hızlı tükenmesinin Android kullanıcıları için akla ilk gelen sorunlardan biri olduğunun farkında olan Google, geliştiricilerin daha az güç tüketen uygulamalar geliştirmesine yardımcı olmak için önemli adımlar atmaktadır.
Alice Yuan • Okuma süresi: 8 dk.
-
"Nasıl yapılır?" rehberleri
Hem cihaz üzerinde hem de bulut modellerini kullanan yapay zeka destekli özelliklerin örneklerini sunarak kullanıcılarınız için keyifli deneyimler oluşturmanıza ilham vermek istedik.
Thomas Ezan, Ivy Knight • Okuma süresi: 2 dakika
-
"Nasıl yapılır?" rehberleri
Performans dengeleme kılavuzunda 5 seviye bulunur. En az benimseme çabası gerektiren performans araçlarını tanıtan 1. seviyeden başlayıp özel bir performans çerçevesini koruyacak kaynaklara sahip uygulamalar için ideal olan 5. seviyeye kadar ilerleyeceğiz.
Alice Yuan • Okuma süresi: 9 dakika
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.