Merekam dan memutar sesi AR di Android

Recording & Playback API memungkinkan Anda merekam video dan data AR sekali dalam lingkungan tertentu dan menggunakan konten tersebut untuk menggantikan sesi kamera live.

Prasyarat

Pastikan Anda memahami konsep AR dasar dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Kompatibilitas dengan ARCore API lainnya

Karena cara pemrosesan data sesi, API ARCore dapat memberikan hasil yang berbeda selama pemutaran dibandingkan dengan yang diamati selama perekaman. Iklan juga dapat memberikan hasil yang berbeda selama sesi pemutaran berikutnya. Misalnya, jumlah item yang dapat dilacak, waktu yang tepat dari deteksinya, dan posenya dari waktu ke waktu mungkin berbeda selama pemutaran.

Kompatibilitas dengan Kamera Bersama

Sesi yang menggunakan Kamera Bersama dapat direkam. Namun, pemutaran untuk sesi ini menggunakan mode Kamera Bersama saat ini tidak tersedia.

Kompatibilitas dengan Cloud Anchors

Anda dapat menghosting dan me-resolve Cloud Anchor saat merekam atau memutar sesi.

Mencatat

Mulai, hentikan, dan periksa status perekaman sesi ARCore.

Merekam sesi ARCore

Untuk merekam sesi ARCore, konfigurasikan sesi dan berikan URI MP4 untuk perekaman. Panggil session.startRecording() sebelum panggilan pertama ke session.resume(). Perekaman otomatis dimulai saat sesi dilanjutkan. Untuk otomatis berhenti merekam saat sesi dijeda, panggil RecordingConfig.setAutoStopOnPause(). Untuk merekam sesi sebagian, panggil session.startRecording() saat sesi sedang berjalan.

Java

// Configure the ARCore session.
Session session = new Session(context);
Uri destination = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
RecordingConfig recordingConfig =
        new RecordingConfig(session)
        .setMp4DatasetUri(destination)
        .setAutoStopOnPause(true);
try {
  // Prepare the session for recording, but do not start recording yet.
  session.startRecording(recordingConfig);
} catch (RecordingFailedException e) {
  Log.e(TAG, "Failed to start recording", e);
}

// Resume the ARCore session to start recording.
session.resume();

Kotlin

// Configure the ARCore session.
val session = Session(context)
val destination = Uri.fromFile(File(context.getFilesDir(), "recording.mp4"))
val recordingConfig = RecordingConfig(session)
  .setMp4DatasetUri(destination)
  .setAutoStopOnPause(true)
session.startRecording(recordingConfig)

// Resume the ARCore session to start recording.
session.resume()

Menghentikan perekaman sesi

Untuk berhenti merekam tanpa menjeda sesi AR yang sedang berjalan, panggil session.stopRecording().

Java

try {
  session.stopRecording();  // Stop recording.
} catch (RecordingFailedException e) {
  Log.e(TAG, "Failed to stop recording", e);
}

Kotlin

session.stopRecording()

Memeriksa status perekaman

session.getRecordingStatus() dapat digunakan kapan saja untuk menentukan RecordingStatus saat ini.

Java

// Use any time to determine current RecordingStatus.
if (session.getRecordingStatus() == RecordingStatus.OK) {
  // Update the UI to show that the session is currently being recorded.
}

Kotlin

// Use any time to determine current RecordingStatus.
if (session.recordingStatus == RecordingStatus.OK) {
  // Update the UI to show that the session is currently being recorded.
}

Pemutaran

Memutar sesi AR yang telah direkam sebelumnya. Sesi diputar secara real time, dan pemutaran atau kecepatan sesi tidak dapat disesuaikan.

Memutar kembali sesi yang telah direkam sebelumnya

Untuk memutar kembali sesi yang direkam sebelumnya, panggil session.setPlaybackDatasetUri() sebelum panggilan pertama ke session.resume().

Setelah pemutaran dimulai karena panggilan pertama ke session.resume(), menjeda sesi dengan memanggil session.pause() akan menangguhkan pemrosesan semua frame gambar kamera dan data sensor lainnya yang direkam dalam set data. Bingkai gambar kamera dan data bingkai sensor yang dihapus dengan cara ini tidak akan diproses ulang saat sesi dilanjutkan kembali dengan memanggil session.resume(). Pelacakan AR untuk sesi tersebut umumnya akan terpengaruh karena kesenjangan dalam data yang diproses.

Java

// Configure the ARCore session.
Session session = new Session(context);

// Specify the previously recorded MP4 file.
Uri recordingUri = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
session.setPlaybackDatasetUri(recordingUri);
…

// Start playback from the beginning of the dataset.
session.resume();
…

// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause();
…

// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume();

Kotlin

// Configure the ARCore session.
val session = Session(context)

// Specify the previously recorded MP4 file.
val recordingUri = Uri.fromFile(File(context.filesDir, "recording.mp4"))
session.playbackDatasetUri = recordingUri
…

// Start playback from the beginning of the dataset.
session.resume()
…

// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause()
…

// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume()

Mulai ulang pemutaran dari awal

Untuk memulai ulang pemutaran dari awal set data, jeda sesi dan panggil session.setPlaybackDatasetUri(), dengan menentukan rekaman MP4 yang sama sebelum melanjutkan sesi.

Java

session.pause();
// Pause and specify the SAME dataset:
session.setPlaybackDatasetUri(previousRecordingUri);
session.resume();  // Playback starts from the BEGINNING of the dataset.

Kotlin

session.pause()
// Pause and specify the SAME dataset:
session.playbackDatasetUri = previousRecordingUri
session.resume()  // Playback starts from the BEGINNING of the dataset.

Putar sesi lain

Untuk memutar ulang set data yang berbeda, jeda sesi dan tentukan set data baru sebelum melanjutkan sesi.

Java

// Switch to a different dataset.
session.pause();   // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.setPlaybackDatasetUri(newRecordingUri);
session.resume();  // Start playback from the beginning of the new dataset.

Kotlin

// Switch to a different dataset.
session.pause()   // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.playbackDatasetUri = newRecordingUri
session.resume()  // Start playback from the beginning of the new dataset.

Memeriksa status pemutaran

Gunakan session.getPlaybackStatus() kapan saja untuk menentukan PlaybackStatus saat ini.

Java

// Use any time to determine current PlaybackStatus.
if (session.getPlaybackStatus() != PlaybackStatus.OK) {
  // Update the UI to show that the session playback has finished.
}

Kotlin

// Use any time to determine current PlaybackStatus.
if (session.playbackStatus != PlaybackStatus.OK) {
  // Update the UI to show that the session playback has finished.
}

Langkah selanjutnya