یک جلسه AR را در اندروید ضبط و پخش کنید

Recording & Playback API به شما این امکان را می دهد که یک بار در یک محیط معین داده های ویدئویی و AR را ضبط کنید و از آن محتوا برای جایگزینی یک جلسه دوربین زنده استفاده کنید.

پیش نیازها

قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.

سازگاری با سایر API های ARCore

با توجه به نحوه پردازش داده‌های جلسه، ARCore API ممکن است نتایج متفاوتی در حین پخش نسبت به نتایجی که در هنگام ضبط مشاهده می‌شود تولید کند. آنها همچنین ممکن است نتایج متفاوتی را در طول جلسات پخش بعدی ایجاد کنند. به عنوان مثال، تعداد ردیابی‌های شناسایی شده، زمان دقیق تشخیص آنها و وضعیت آنها در طول زمان ممکن است در حین پخش متفاوت باشد.

سازگاری با دوربین اشتراکی

جلساتی که از دوربین مشترک استفاده می کنند را می توان ضبط کرد. با این حال، پخش این جلسات با استفاده از حالت دوربین مشترک در حال حاضر در دسترس نیست.

سازگاری با Cloud Anchors

می‌توانید هنگام ضبط یا پخش یک جلسه، Cloud Anchors را میزبانی و حل کنید.

در حال ضبط

شروع، توقف و بررسی وضعیت ضبط جلسه ARCore.

یک جلسه ARCore را ضبط کنید

برای ضبط یک جلسه ARCore، جلسه را پیکربندی کنید و یک URI MP4 برای ضبط ارائه دهید. قبل از اولین فراخوانی session.resume() session.startRecording() فراخوانی کنید. ضبط به طور خودکار با از سرگیری جلسه شروع می شود. برای توقف خودکار ضبط هنگامی که جلسه متوقف می شود، RecordingConfig.setAutoStopOnPause() را فراخوانی کنید. برای ضبط یک جلسه جزئی، در حالی که جلسه در حال اجرا است session.startRecording() را فراخوانی کنید.

جاوا

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

کاتلین

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

ضبط یک جلسه را متوقف کنید

برای توقف ضبط بدون توقف جلسه AR در حال اجرا، session.stopRecording() را فراخوانی کنید.

جاوا

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

کاتلین

session.stopRecording()

وضعیت ضبط را بررسی کنید

session.getRecordingStatus() می توان در هر زمان برای تعیین وضعیت RecordingStatus فعلی استفاده کرد.

جاوا

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

کاتلین

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

پخش

جلسات AR قبلی ضبط شده را پخش کنید. جلسات در زمان واقعی پخش می شوند و پخش یا سرعت جلسه قابل تنظیم نیست.

یک جلسه ضبط شده قبلی را پخش کنید

برای پخش یک جلسه ضبط شده قبلی، قبل از اولین تماس با session.resume() session.setPlaybackDatasetUri() را فراخوانی کنید.

هنگامی که پخش به دلیل اولین تماس با session.resume() شروع شد، مکث جلسه با فراخوانی session.pause() پردازش تمام فریم های تصویر دوربین و سایر داده های حسگر ثبت شده در مجموعه داده را به حالت تعلیق در می آورد. فریم‌های تصویر دوربین و داده‌های قاب حسگر که به این روش دور ریخته می‌شوند، زمانی که جلسه دوباره با فراخوانی session.resume() از سر گرفته شود، دوباره پردازش نمی‌شوند. ردیابی AR برای جلسه به طور کلی به دلیل شکاف در داده های پردازش شده آسیب می بیند.

جاوا

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

کاتلین

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

پخش را از ابتدا مجدداً شروع کنید

برای شروع مجدد پخش از ابتدای مجموعه داده، جلسه را متوقف کرده و session.setPlaybackDatasetUri() را فراخوانی کنید و قبل از شروع مجدد جلسه، همان ضبط MP4 را مشخص کنید.

جاوا

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

کاتلین

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

یک جلسه متفاوت را پخش کنید

برای پخش یک مجموعه داده متفاوت، جلسه را موقتاً متوقف کنید و مجموعه داده جدید را قبل از شروع مجدد جلسه مشخص کنید.

جاوا

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

کاتلین

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

وضعیت پخش را بررسی کنید

در هر زمان از session.getPlaybackStatus() برای تعیین وضعیت PlaybackStatus فعلی استفاده کنید.

جاوا

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

کاتلین

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

بعدش چی