Video Kaydetme
CameraX ile video yakalayın.
Video Kaydetme, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
CameraX ile Video Kaydetme
CameRX, videoyu bir Recorder tarafından desteklenen VideoCapture kullanım senaryosu aracılığıyla kaydeder. Bu derste video yakalamayı ayarlayacak, bir kaydı başlatıp durduracak ve ses de dahil olmak üzere galerıya kaydedeceksiniz.
Akış fotoğraflara benzer; ancak başlatıp daha sonra durdurduğunuz uzun süreli bir Recording oturumu eklenir.
Kaydedici ve Kalite
Önce kodlama ve kaliteyi tanımlayan bir Recorder oluşturursunuz. QualitySelector, cihaz sağlayamıyorsa bir geri dönüş seçeneğiyle birlikte hedef bir kalite (örneğin HD veya FHD) istemenizi sağlar.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()VideoCapture Oluşturma
withOutput oluşturucusuyla Recorder'ı bir VideoCapture kullanım senaryosuna sarın. Tıpkı ImageCapture gibi, kameraya bağlayacağınız nesne budur.
val videoCapture = VideoCapture.withOutput(recorder)Önizlemeyi ve VideoCapture'ı Bağlama
Önizlemeyi ve VideoCapture'ı birlikte bağlayın. Birçok cihazda ImageCapture ile VideoCapture'ı aynı anda bağlayamayacağınızı unutmayın; bu nedenle ekranınızın ihtiyaç duyduğu kullanım senaryolarını seçin.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Ses İzni
Ses kaydetmek için CAMERA'ya ek olarak çalışma zamanı RECORD_AUDIO iznine de ihtiyacınız vardır. Kaydı başlatmadan önce her ikisini de isteyin ve sesi yalnızca kullanıcı izin verdiyse etkinleştirin.
// Manifest declares both:
// <uses-permission android:name="android.permission.CAMERA" />
// <uses-permission android:name="android.permission.RECORD_AUDIO" />
val audioGranted = ContextCompat.checkSelfPermission(
context, Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTEDMediaStore ile Çıktı
Fotoğraflarda olduğu gibi videoyu da kapsamlı depolama kullanarak MediaStore'a kaydedin. mp4 MIME türüyle ContentValues oluşturun ve MediaStoreOutputOptions oluşturun.
val values = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "VID_${System.currentTimeMillis()}")
put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4")
put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/MyApp")
}
val outputOptions = MediaStoreOutputOptions
.Builder(context.contentResolver, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
.setContentValues(values)
.build()Kayıt Başlatma
Kaydı kaydediciden hazırlayın, isteğe bağlı olarak withAudioEnabled() ile sesi etkinleştirin ve ardından start() çağrısını yapın. start(), daha sonra durdurabilmeniz için saklayacağınız bir Recording nesnesi döndürür.
Ayrıca VideoRecordEvent güncellemelerini alan bir dinleyici de iletirsiniz.
val recording = videoCapture.output
.prepareRecording(context, outputOptions)
.apply { if (audioGranted) withAudioEnabled() }
.start(ContextCompat.getMainExecutor(context)) { event ->
when (event) {
is VideoRecordEvent.Start -> { /* recording began */ }
is VideoRecordEvent.Finalize -> {
if (!event.hasError()) {
// event.outputResults.outputUri -> saved video
}
}
}
}Kayıt Olaylarına Tepki Verme
Dinleyici, kaydın yaşam döngüsünü akış olarak iletir:
VideoRecordEvent.Start— kayıt başladı (kullanıcı arayüzünü durdurma düğmesine güncelleyin).VideoRecordEvent.Status— kaydedilen süre ve boyutla ilgili düzenli güncellemeler.VideoRecordEvent.Finalize— kayıt sona erdi;hasError()değerini kontrol edin.
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Kaydı Durdurma
Bitirmek için daha önce kaydettiğiniz Recording üzerinde stop() çağrısını yapın. Bu işlem, video URI'sinin kullanılabilir hâle geldiği bir Finalize olayı tetikler.
Tek bir düğmenin başlatma ve durdurma arasında geçiş yapabilmesi için etkin kaydı durumda tutun.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Duraklatma ve Sürdürme
Bir Recording, durdurulmadan da duraklatılıp sürdürülebilir. Bu, kullanıcıların klipleri tek bir dosyada birleştirmesine olanak tanımak için kullanışlıdır.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()Kayıt için Compose Kullanıcı Arayüzü
Kullanıcı arayüzünü durumdan yönlendirin. Bir kaydın etkin olup olmadığını izleyin ve düğme simgesiyle eylemini buna göre değiştirin. Dinleyici ana yürütücüde çalıştığı için Compose durumunu doğrudan dinleyiciden güncelleyebilirsiniz.
var isRecording by remember { mutableStateOf(false) }
IconButton(onClick = { toggleRecording() }) {
Icon(
imageVector = if (isRecording) Icons.Default.Stop else Icons.Default.Videocam,
contentDescription = if (isRecording) "Stop" else "Record"
)
}Hızlı Kontrol
CameraX ile video kaydetme konusunu kavradığınızı doğrulayın.
Özet
Artık CameraX ile video kaydedebilirsiniz:
- Bir
QualitySelectorileRecorderoluşturun ve bunuVideoCapture.withOutputiçine sarın. - Önizlemeyle bağlayın ve ses için
RECORD_AUDIOiznini isteyin. MediaStoreOutputOptionsile kaydedin, ardından birRecordingelde etmek içinprepareRecording().start()çağrısını yapın.VideoRecordEventolaylarına tepki verin; sonlandırmak ve kaydedilen URI'yi okumak içinstop()çağrısını yapın.
CameraX kursunu tamamladınız — önizleme, fotoğraf ve video artık araç setinizde.
Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 36
- Dersler
- 152
Sıkça Sorulan Sorular
“Video Kaydetme” dersi ücretsiz mi?
Evet — “Video Kaydetme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“Video Kaydetme” dersinde ne öğreneceğim?
CameraX ile video yakalayın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Video Kaydetme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.