AR-Sitzungen auf Android-Geräten aufzeichnen und abspielen

Mit der Recording & Playback API kannst du in einer bestimmten Umgebung Video- und AR-Daten aufzeichnen und diese Inhalte dann als Ersatz für eine Live-Kamerasitzung verwenden.

Voraussetzungen

Machen Sie sich mit den grundlegenden AR-Konzepten und zur Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Kompatibilität mit anderen ARCore APIs

Aufgrund der Art und Weise, wie Sitzungsdaten verarbeitet werden, können ARCore APIs während der Wiedergabe andere Ergebnisse liefern als bei der Aufzeichnung. Auch bei nachfolgenden Wiedergabesitzungen können sie unterschiedliche Ergebnisse liefern. Beispielsweise können die Anzahl der erkannten Trackables, der genaue Zeitpunkt ihrer Erkennung und ihre Positionen im Laufe der Zeit während der Wiedergabe variieren.

Kompatibilität mit gemeinsam genutzter Kamera

Sitzungen, bei denen die gemeinsam genutzte Kamera verwendet wird, können aufgezeichnet werden. Allerdings ist die Wiedergabe für diese Sitzungen im Modus „Gemeinsam genutzte Kamera“ derzeit nicht verfügbar.

Kompatibilität mit Cloud Anchors

Sie können Cloud-Anchors hosten und auflösen, während Sie eine Sitzung aufzeichnen oder abspielen.

Aufzeichnung

Sie können die Aufzeichnung einer ARCore-Sitzung starten und stoppen und ihren Status prüfen.

ARCore-Sitzung aufzeichnen

Wenn Sie eine ARCore-Sitzung aufzeichnen möchten, konfigurieren Sie die Sitzung und geben Sie einen MP4-URI für die Aufzeichnung an. Rufen Sie session.startRecording() vor dem ersten Aufruf von session.resume() auf. Die Aufzeichnung beginnt automatisch, wenn sie fortgesetzt wird. Wenn die Aufzeichnung automatisch beendet werden soll, wenn die Sitzung pausiert wird, rufen Sie RecordingConfig.setAutoStopOnPause() an. Wenn Sie eine Teilsitzung aufzeichnen möchten, rufen Sie session.startRecording() auf, während die Sitzung läuft.

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()

Sitzungsaufzeichnung beenden

Wenn Sie die Aufzeichnung beenden möchten, ohne die aktuell laufende AR-Sitzung zu unterbrechen, rufen Sie session.stopRecording() an.

Java

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

Kotlin

session.stopRecording()

Aufzeichnungsstatus prüfen

session.getRecordingStatus() kann jederzeit verwendet werden, um den aktuellen RecordingStatus zu ermitteln.

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.
}

Wiedergabe

Zuvor aufgezeichnete AR-Sitzungen abspielen. Sitzungen werden in Echtzeit wiedergegeben und die Wiedergabe oder Geschwindigkeit einer Sitzung kann nicht angepasst werden.

Eine zuvor aufgezeichnete Sitzung wiedergeben

Wenn Sie eine zuvor aufgezeichnete Sitzung abspielen möchten, rufen Sie vor dem ersten Aufruf von session.resume() session.setPlaybackDatasetUri() auf.

Wenn die Wiedergabe aufgrund des ersten Aufrufs von session.resume() gestartet wurde und die Sitzung durch Aufrufen von session.pause() pausiert wird, werden alle Kamerabilder und anderen aufgezeichneten Sensordaten im Datensatz nicht mehr verarbeitet. Bilderrahmen- und Sensorrahmendaten, die auf diese Weise verworfen werden, werden nicht noch einmal verarbeitet, wenn die Sitzung durch Aufrufen von session.resume() wieder aufgenommen wird. Das AR-Tracking für die Sitzung wird in der Regel aufgrund der Lücke in den verarbeiteten Daten leiden.

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()

Wiedergabe von vorn beginnen

Wenn Sie die Wiedergabe wieder am Anfang des Datasets starten möchten, halten Sie die Sitzung an und rufen Sie session.setPlaybackDatasetUri() auf. Geben Sie dabei dieselbe MP4-Aufnahme an, bevor Sie die Sitzung fortsetzen.

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.

Eine andere Sitzung wiedergeben

Halten Sie die Sitzung an und geben Sie das neue Dataset an, bevor Sie die Sitzung fortsetzen, um ein anderes Dataset wiederzugeben.

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.

Wiedergabestatus prüfen

Sie können jederzeit session.getPlaybackStatus() verwenden, um den aktuellen PlaybackStatus zu ermitteln.

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.
}

Nächste Schritte