Table of Contents

Gravando arquivos EIF no unity

Este artigo descreve como gravar arquivos EIF no unity para uso em simulação.

Antes de começar

Iniciando a gravação

Use FrameRecorder.enabled = true para iniciar a gravação, por exemplo:

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

Observe que é necessário verificar primeiro se ARAssembly.FrameRecorder existe.

Nota

ARAssembly.FrameRecorder não pode ser usado em alguns casos, como quando se usa FramePlayer.

FrameRecorder.enabled é false por padrão, o que significa que a gravação está desativada. Mesmo se configurado manualmente no editor, será ineficaz.

A gravação começará durante a execução da sessão quando FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.

Se FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, você pode usar o evento OnReady para aguardar até que a gravação esteja pronta.

Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
    // Pode começar a gravar
});

Você pode usar o evento OnRecording para confirmar o sucesso da inicialização:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Gravação iniciada: {file}");
});

Falhas na inicialização não disparam eventos, mas você pode verificar se FrameRecorder.Status é Error para confirmar.

Importante

O efeito de execução ao reproduzir EIF na cena está relacionado ao dispositivo usado durante a gravação e à fonte de quadros escolhida naquele momento. Portanto, ao gravar arquivos EIF, recomenda-se usar o mesmo dispositivo ou um dispositivo semelhante ao alvo para garantir consistência durante a reprodução. Também é necessário focar em verificar se o rastreamento de movimento está ativado na cena gravada. Se não estiver ativado durante a gravação, também não poderá ser ativado durante a reprodução, e funcionalidades AR que dependem de rastreamento de movimento (como mapas espaciais densos, Mega, etc.) não funcionarão de forma consistente com o dispositivo.

Parando a gravação

Use FrameRecorder.enabled = false para parar a gravação, por exemplo:

frameRecorder.enabled = false;

Essa ação interrompe a gravação imediatamente e bloqueia até que o arquivo seja gravado completamente.

Importante

Você deve chamar parar gravação, caso contrário, o arquivo gravado estará incompleto, o que pode causar falhas em partes ou na totalidade das funcionalidades:

  • Quando o formato de gravação é H264, o arquivo EIF não pode saltar para um ponto específico durante a reprodução (seek), só pode ser reproduzido desde o início
  • Quando o formato de gravação é Obsolete, o arquivo EIF não pode ser usado

Armazenamento e exportação de arquivos

Você pode usar o evento OnRecording para obter o caminho completo real do arquivo gravado:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Gravação iniciada: {file}");
});

Por padrão, os arquivos gravados são armazenados no caminho de dados persistentes do aplicativo, que pode ser acessado via Application.persistentDataPath.

Você pode alterar o caminho de armazenamento via FrameRecorder.Configuration.FilePath. Este caminho deve ser definido antes de iniciar a gravação e só terá efeito após AutoFilePath ser desativado. O diretório deve ser criado antecipadamente.

Importante

Você deve garantir que o diretório de armazenamento do arquivo gravado exista e que o aplicativo tenha permissão de escrita, caso contrário, a gravação falhará ao iniciar.

Por exemplo, o código a seguir mostra como armazenar o arquivo gravado em um diretório personalizado e gerar um nome de arquivo com base no tipo de FrameSource usado pela sessão e na hora atual:

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;

Você também pode, no editor, selecionar AR Session (EasyAR), desmarcar Auto File Path em Frame Recorder na janela Inspector e configurar:

alt text

Dica

Através de FrameRecorder.RecordingConfiguration.FilePath você pode modificar o diretório de armazenamento e o nome do arquivo (sem extensão). A extensão do arquivo será adicionada automaticamente com base no formato de gravação.

  • Quando o formato de gravação é H264, a extensão do arquivo é .mkveif
  • Quando o formato de gravação é Obsolete, a extensão do arquivo é .eif

Se o arquivo estiver armazenado no caminho de dados persistentes do aplicativo ou em outro caminho privado, você pode exportá-lo para o computador das seguintes maneiras:

  • Na plataforma Android, conecte-se ao computador via USB e use adb pull ou outro método para exportar o arquivo. Normalmente, o arquivo está em /sdcard/Android/data/<app package name>/files.
  • Na plataforma iOS, você pode exportar o arquivo para o computador através da janela Devices do Xcode, ou acessar o diretório privado do aplicativo via iTunes ou compartilhamento de arquivos do Finder.
  • Através de código, armazene o arquivo em um diretório público, como o diretório de downloads do Android ou o álbum de fotos do iOS.
Nota

Para aplicativos iOS, se você deseja acessar o diretório privado do aplicativo via iTunes ou compartilhamento de arquivos do Finder, é necessário adicionar a chave UIFileSharingEnabled ao Info.plist do projeto Xcode antes do empacotamento e definir o valor como YES:

alt text

O texto exibido após a adição pode ser diferente da string adicionada, o que é normal.

Alterando o formato de gravação

Altere o formato de gravação via FrameRecorder.Configuration.Format. Deve ser definido antes de iniciar a gravação.

Por exemplo, o código a seguir mostra como definir o formato de gravação como H264:

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

Você também pode, no editor, selecionar AR Session (EasyAR), modificar Format na janela Inspector:

alt text

Nota

H264 não pode ser usado em alguns dispositivos (como Windows). Geralmente, recomenda-se usar Auto, que escolherá o formato adequado automaticamente com base no dispositivo.

Nota

No XREAL, dados gravados no formato Obsolete não podem ser usados para simulação, sendo usados apenas para relatar problemas.

  • Ao simular, use dados gravados no formato H264.
  • Ao relatar problemas, use dados gravados no formato Obsolete.

Você pode usar RecordingFormat para verificar o formato de gravação atual.

Gravação automática ao iniciar a sessão

Defina AutoStart como true antes de iniciar a sessão para iniciar a gravação quando a sessão for iniciada, por exemplo:

frameRecorder.AutoStart = true;

Você também pode, no editor, selecionar AR Session (EasyAR), marcar Auto Start em Frame Recorder na janela Inspector:

alt text

Nota

Modificar FrameRecorder.enabled no editor é ineficaz.

Dados utilizáveis com mega

Ao usar Mega, existem requisitos especiais para o conteúdo do arquivo EIF e arquivos relacionados. Em versões antigas do plug-in Unity, essa funcionalidade não foi integrada, então os dados gravados nessas versões não podem ser usados com Mega.

Os dados gravados nas seguintes situações podem ser usados com Mega:

  • Dados gravados com Unity plug-in versão 4000 ou superior
  • Dados gravados com Mega Toolbox
  • Se os dados foram gravados no formato Obsolete, por exemplo, arquivo x.eif, é necessário que o arquivo x.eif.json exista no mesmo diretório para que possa ser usado

Os dados gravados nas seguintes situações não podem ser usados com Mega:

  • Dados gravados com Unity plug-in versão 4.6 ou inferior
  • Dados gravados com EasyAR Sense nativo e sem adicionar o mesmo conteúdo presente no plug-in Unity

Além disso, embora o Mega possa funcionar sem rastreamento de movimento, o efeito de execução é diferente. Recomenda-se ativar o rastreamento de movimento ao gravar arquivos EIF para garantir que o efeito durante a reprodução atenda à maioria dos cenários de uso.

Próximos passos