Table of Contents

Запись файлов EIF в Unity

В этой статье объясняется, как записывать файлы EIF в Unity для использования при симуляции.

Перед началом

Запуск записи

Используйте FrameRecorder.enabled = true, чтобы начать запись, например:

if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
    var frameRecorder = Session.Assembly.FrameRecorder.Value;
    frameRecorder.enabled = true;
}

Важно отметить, что необходимо сначала проверить существование ARAssembly.FrameRecorder.

Примечание

ARAssembly.FrameRecorder в некоторых случаях, например при использовании FramePlayer, недоступен.

Значение по умолчанию FrameRecorder.enabled - false, что означает, что запись отключена. Даже ручная настройка в редакторе не будет иметь эффекта.

Запись начнется только во время работы сессии, когда FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.

Если FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, можно использовать событие OnReady для ожидания готовности записи.

Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
    // Можно начать запись
});

Можно использовать событие OnRecording для подтверждения успешного запуска:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Recording started: {file}");
});

При сбое запуска события не срабатывают, но можно проверить, не находится ли FrameRecorder.Status в состоянии Error.

Важно

Поведение при воспроизведении EIF в сцене зависит от устройства, использованного для записи, и выбранного на нем источника кадров (frame source) в тот момент. Поэтому при записи файлов EIF рекомендуется использовать то же устройство, что и целевое, или близкое к нему, чтобы гарантировать согласованность эффектов при воспроизведении с эффектами на целевом устройстве. Также необходимо уделить особое внимание тому, включена ли функция отслеживания движения (motion tracking) в сцене записи. Если при записи отслеживание движения было отключено, то при воспроизведении его также нельзя будет включить, и AR-функции, зависящие от него (например, карта плотного пространства, Mega и т.д.), не будут работать так же, как на устройстве.

Остановка записи

Используйте FrameRecorder.enabled = false, чтобы остановить запись, например:

frameRecorder.enabled = false;

Эта операция немедленно останавливает запись и блокирует выполнение до завершения записи файла.

Важно

Обязательно вызовите остановку записи, иначе записанный файл будет неполным, что может привести к невозможности использования части функций или всего файла:

  • При формате записи H264 невозможно перейти к определенной временной точке (seek) в файле EIF при воспроизведении; воспроизведение возможно только с начала.
  • При формате записи Obsolete файл EIF невозможно использовать.

Хранение и экспорт файлов

Можно использовать событие OnRecording для получения полного реального пути к записанному файлу:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Recording started: {file}");
});

При настройках по умолчанию записанный файл сохраняется в постоянном пути данных приложения. Доступ к этому пути можно получить через Application.persistentDataPath.

Можно изменить путь сохранения записанного файла через FrameRecorder.Configuration.FilePath. Этот путь должен быть установлен до запуска записи, и для его применения необходимо отключить AutoFilePath. Директорию необходимо создать заранее.

Важно

Необходимо гарантировать, что директория для сохранения записанных файлов существует и приложение имеет права на запись в нее, иначе запуск записи завершится ошибкой.

Например, следующий код демонстрирует, как сохранить записанный файл в пользовательской директории, генерируя имя файла на основе типа FrameSource, используемого в сессии, и текущего времени:

if (!Directory.Exists(SavePath))
{
    Directory.CreateDirectory(SavePath);
}
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.Configuration.AutoFilePath = false;
frameRecorder.Configuration.FilePath.Type = WritablePathType.Absolute;
frameRecorder.Configuration.FilePath.FolderPath = SavePath;
frameRecorder.Configuration.FilePath.FileName = ARSessionFactory.DefaultName(Session.Assembly.FrameSource.GetType()).Replace(" ", "") + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss.fff");

frameRecorder.enabled = true;

Также можно в редакторе, выбрав AR Session (EasyAR), в окне Inspector снять галочку Auto File Path у Frame Recorder и настроить путь:

alt text

Совет

Через FrameRecorder.RecordingConfiguration.FilePath можно изменить директорию хранения и имя файла (без расширения). Расширение файла добавляется автоматически в зависимости от формата записи.

  • При формате записи H264 расширение файла .mkveif
  • При формате записи Obsolete расширение файла .eif

Если файл сохранен в постоянном пути данных приложения или другом приватном пути приложения, можно экспортировать его на компьютер следующими способами:

  • На Android: подключите устройство к компьютеру через USB и используйте adb pull или другой способ для экспорта файла на компьютер. Файлы обычно находятся в /sdcard/Android/data/<имя пакета приложения>/files.
  • На iOS: используйте окно Devices в Xcode для экспорта файла на компьютер или получите доступ к приватной директории приложения через iTunes или Finder (общий доступ к файлам).
  • Через код сохраните файл в общедоступную директорию, например, в директорию загрузок на Android или в Фото на iOS.
Примечание

Для приложений iOS, если вы хотите получить доступ к приватной директории приложения через iTunes или Finder (общий доступ к файлам), перед сборкой необходимо добавить ключ UIFileSharingEnabled в Info.plist проекта XCode и установить его значение в YES:

alt text

Отображаемый текст после добавления может отличаться от добавленной строки; это нормально.

Смена формата записи

Измените формат записи через FrameRecorder.Configuration.Format. Это необходимо сделать до запуска записи.

Например, следующий код показывает, как принудительно установить формат записи в H264:

frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;

Также можно в редакторе, выбрав AR Session (EasyAR), в окне Inspector изменить Format у Frame Recorder:

alt text

Примечание

H264 недоступен на некоторых устройствах (например, Windows). Обычно рекомендуется использовать Auto, чтобы формат автоматически выбирался в зависимости от устройства.

Примечание

На устройствах XREAL данные, записанные в формате Obsolete, нельзя использовать для симуляции; они предназначены только для отправки отчетов о проблемах.

  • Для симуляции используйте данные, записанные в формате H264.
  • Для отправки отчетов о проблемах используйте данные, записанные в формате Obsolete.

Текущий формат записи можно проверить с помощью RecordingFormat.

Автоматический запуск записи при старте сессии

Установите AutoStart в true до запуска сессии, чтобы запись начиналась автоматически при старте сессии, например:

frameRecorder.AutoStart = true;

Также можно в редакторе, выбрав AR Session (EasyAR), в окне Inspector установить галочку Auto Start у Frame Recorder:

alt text

Примечание

Изменение FrameRecorder.enabled в редакторе не имеет эффекта.

Данные, пригодные для использования с Mega

При использовании Mega к содержимому файлов EIF и связанных файлов предъявляются особые требования. В старых версиях плагина Unity эта функциональность не была интегрирована, и данные, записанные этими версиями, нельзя использовать с Mega.

Данные, записанные в следующих случаях, можно использовать с Mega:

  • Данные, записанные с использованием плагина Unity версии 4000 или выше
  • Данные, записанные с помощью Mega Toolbox
  • Если данные записаны в формате Obsolete (например, файл x.eif), для их использования в той же директории должен существовать файл x.eif.json

Данные, записанные в следующих случаях, нельзя использовать с Mega:

  • Данные, записанные с использованием плагина Unity версии 4.6 или ниже
  • Данные, записанные с использованием нативного EasyAR Sense, без добавления того же содержимого, что и в плагине Unity

Кроме того, хотя Mega может работать без отслеживания движения, результат работы будет другим. Рекомендуется включать функцию отслеживания движения при записи файлов EIF, чтобы гарантировать, что эффекты при воспроизведении будут соответствовать большинству сценариев использования.

Следующие шаги