Videon tallentaminen
Tallentakaa videota CameraX:llä.
Videon tallentaminen on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
Videon tallentaminen CameraX:llä
CameRX tallentaa videota VideoCapture-käyttötapauksen avulla, jonka taustalla toimii Recorder. Tässä oppitunnissa määritätte videokuvauksen, aloitatte ja lopetatte tallennuksen sekä tallennatte videon galleriaan myös äänen kanssa.
Työnkulku vastaa valokuvien ottamista, mutta siinä on lisäksi pitkäkestoinen Recording-tallennusistunto, jonka käynnistätte ja pysäytätte myöhemmin.
Recorder ja laatu
Ensin luotte Recorder-olion, joka määrittää koodauksen ja laadun. QualitySelector-luokan avulla voitte pyytää tiettyä tavoitelaatua (esimerkiksi HD- tai FHD-laatua) ja määrittää varavaihtoehdon, jos laite ei pysty tarjoamaan sitä.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()VideoCapture-käyttötapauksen luominen
Uudelleenohjaa Recorder VideoCapture-käyttötapaukseksi withOutput-tehdasfunktion avulla. Tämä on kameraan sidottava olio, aivan kuten ImageCapture.
val videoCapture = VideoCapture.withOutput(recorder)Esikatselun ja VideoCapturen sitominen
Sido esikatselu ja VideoCapture yhteen. Huomaa, että monissa laitteissa ImageCapture- ja VideoCapture-käyttötapauksia ei voi sitoa samanaikaisesti, joten valitse näytön tarvitsemat käyttötapaukset.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Äänityslupa
Äänen tallentamista varten tarvitsette RECORD_AUDIO-ajonaikaisen luvan CAMERA-luvan lisäksi. Pyytäkää molempia ennen tallennuksen aloittamista ja ottakaa ääni käyttöön vain, jos käyttäjä on myöntänyt luvan.
// 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_GRANTEDTuloksen tallentaminen MediaStoren avulla
Kuten valokuvien tapauksessa, tallentakaa video MediaStore-palveluun rajoitetun tallennustilan käytön mukaisesti. Muodostakaa ContentValues-arvot käyttämällä mp4-MIME-tyyppiä ja luokaa MediaStoreOutputOptions.
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()Tallennuksen aloittaminen
Valmistelkaa tallennus Recorderista, ottakaa ääni halutessanne käyttöön withAudioEnabled()-funktiolla ja käynnistäkää tallennus sitten kutsumalla start()-funktiota. start() palauttaa Recording-olion, jonka säilytätte, jotta voitte pysäyttää tallennuksen myöhemmin.
Välittäkää lisäksi kuuntelija, joka vastaanottaa VideoRecordEvent-päivityksiä.
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
}
}
}
}Tallennustapahtumiin reagoiminen
Kuuntelija välittää tallennuksen elinkaaren tapahtumat:
VideoRecordEvent.Start— tallennus on alkanut (päivitä käyttöliittymän painikkeeksi pysäytyspainike).VideoRecordEvent.Status— säännöllisiä päivityksiä tallennuksen kestosta ja koosta.VideoRecordEvent.Finalize— tallennus on päättynyt; tarkistahasError().
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Tallennuksen pysäyttäminen
Kun haluatte lopettaa tallennuksen, kutsukaa aiemmin tallennetun Recording-olion stop()-funktiota. Tämä käynnistää Finalize-tapahtuman, jossa videon URI tulee saataville.
Säilyttäkää aktiivinen tallennus tilassa, jotta yksi painike voi vaihtaa käynnistämisen ja pysäyttämisen välillä.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Keskeyttäminen ja jatkaminen
Recording-tallennuksen voi myös keskeyttää ja jatkaa ilman sen pysäyttämistä. Tämä on hyödyllistä, kun käyttäjien halutaan yhdistävän useita leikkeitä yhdeksi tiedostoksi.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()Composen käyttöliittymä tallennusta varten
Ohjaa käyttöliittymää tilan perusteella. Seuraa, onko tallennus aktiivinen, ja vaihda painikkeen kuvaketta ja toimintoa sen mukaan. Koska kuuntelija suoritetaan pääsuorittimessa, voitte päivittää Compose-tilaa suoraan kuuntelijasta.
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"
)
}Pikatarkistus
Varmista, että hallitset videon tallentamisen CameraX:llä.
Kertaus
Osaat nyt tallentaa videota CameraX:llä:
- Luo
RecorderjaQualitySelectorja kääri seVideoCapture.withOutput-käyttötapaukseksi. - Sido se esikatseluun ja pyydä ääntä varten
RECORD_AUDIO-lupa. - Tallenna
MediaStoreOutputOptions-asetusten avulla ja kutsu sittenprepareRecording().start()saadaksesiRecording-olion. - Reagoi
VideoRecordEvent-tapahtumiin, viimeistele tallennus kutsumallastop()-funktiota ja lue tallennetun videon URI.
Olet suorittanut CameraX-kurssin — työkalupakissasi ovat nyt esikatselu, valokuvat ja video.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Videon tallentaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Videon tallentaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Videon tallentaminen”?
Tallentakaa videota CameraX:llä. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Videon tallentaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- CameraX:n yleiskatsaus
- Kameran esikatselun näyttäminen
- Valokuvien ottaminen
- Videon tallentaminen