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

Die Aufzeichnung & Mit der Wiedergabe-API können Sie Video- und AR-Daten einmal in einer bestimmten Umgebung aufzeichnen und diese Inhalte verwenden, um eine Live-Kamerasitzung zu ersetzen.

Vorbereitung

Machen Sie sich mit den grundlegenden AR-Konzepten vertraut. und Konfigurieren einer ARCore-Sitzung beschrieben, bevor du fortfährst.

Kompatibilität mit anderen ARCore APIs

Aufgrund der Verarbeitung von Sitzungsdaten können ARCore APIs bei der Wiedergabe unterschiedliche Ergebnisse liefern als bei der Aufnahme. Sie können auch bei nachfolgenden Wiedergabesitzungen zu anderen Ergebnissen führen. So können sich beispielsweise die Anzahl der erkannten Tracker, der genaue Zeitpunkt ihrer Erkennung und ihre Posen im Laufe der Zeit unterscheiden.

Kompatibilität mit geteilter Kamera

Sitzungen mit gemeinsam genutzter Kamera können aufgezeichnet werden. Die Wiedergabe im Modus „Gemeinsam verwendete Kamera“ ist für diese Sitzungen derzeit jedoch nicht möglich.

Kompatibilität mit Cloud-Anchors

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

Aufzeichnung

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

ARCore-Sitzung aufzeichnen

Wenn Sie eine ARCore-Sitzung aufzeichnen möchten, konfigurieren Sie die Sitzung und geben Sie eine MP4-URI für die Aufzeichnung an. Rufe session.startRecording() vor dem ersten Aufruf von session.resume() auf. Die Aufzeichnung beginnt automatisch, wenn sie fortgesetzt wird. Wenn die Aufzeichnung beim Pausieren der Sitzung automatisch beendet werden soll, rufen Sie RecordingConfig.setAutoStopOnPause() an. Wenn Sie nur einen Teil der Sitzung aufzeichnen möchten, drücken Sie während der Sitzung die Taste session.startRecording().

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 gerade laufende AR-Sitzung zu pausieren, rufen Sie session.stopRecording() auf.

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 wiedergeben. Sitzungen werden in Echtzeit wiedergegeben und können nicht angepasst werden.

Eine zuvor aufgezeichnete Sitzung abspielen

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

Sobald die Wiedergabe durch den ersten Aufruf von session.resume() gestartet wurde, wird durch Pausieren der Sitzung durch Aufrufen von session.pause() die Verarbeitung aller Kamerabildframes und aller anderen aufgezeichneten Sensordaten im Datensatz ausgesetzt. Kamera-Bildframes und Sensor-Frame-Daten, die auf diese Weise verworfen werden, werden nicht noch einmal verarbeitet, wenn die Sitzung durch den Aufruf von session.resume() wieder fortgesetzt wird. Im Allgemeinen leidet das AR-Tracking für die Sitzung aufgrund der Lücke in den verarbeiteten Daten.

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

Um eine Wiedergabe am Anfang des Datasets neu zu starten, pausieren Sie die Sitzung und rufen Sie session.setPlaybackDatasetUri() auf. Geben Sie dabei vor dem Fortsetzen der Sitzung dieselbe MP4-Aufzeichnung an.

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 abspielen

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

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

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

Weiteres Vorgehen