Gravar arquivos EIF no Unity
Este artigo descreve como gravar arquivos EIF no Unity para uso em execução simulada.
Antes de começar
- Compreender os conceitos básicos de gravar arquivos EIF e usá-los para execução simulada
- Compreender os conceitos básicos, composição e fluxo de trabalho da sessão AR
- Aprender como acessar o componente de gravação através de acessar componentes de funcionalidade AR na sessão
Iniciar 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;
}
Note que é necessário verificar primeiro se ARAssembly.FrameRecorder existe.
Nota
ARAssembly.FrameRecorder não pode ser usado em alguns casos, como ao usar FramePlayer.
FrameRecorder.enabled tem valor padrão false, indicando que a gravação está desativada, e mesmo se configurado manualmente no editor será ineficaz.
A gravação só começará quando a sessão estiver em execução e FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Se FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, você pode usar o evento OnReady para aguardar a preparação da gravação.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// Pode iniciar a gravação
});
Você pode usar o evento OnRecording para confirmar o início bem-sucedido:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Gravação iniciada: {file}");
});
Falhas no início não disparam eventos, mas você pode verificar se FrameRecorder.Status é Error.
Importante
O efeito de execução ao reproduzir EIF na cena está relacionado ao dispositivo usado na gravação e à fonte de quadros (frame source) selecionada naquele momento. Portanto, ao gravar arquivos EIF, recomenda-se usar o mesmo dispositivo ou um dispositivo semelhante ao dispositivo de destino para garantir que o efeito na reprodução corresponda ao efeito no dispositivo de destino. Além disso, é importante atentar se o rastreamento de movimento estava ativado durante a gravação; se não estiver ativado durante a gravação, também não poderá ser ativado durante a reprodução, e funcionalidades AR dependentes de rastreamento de movimento (como mapa espacial denso, Mega, etc.) não funcionarão de forma consistente com o dispositivo.
Parar gravação
Use FrameRecorder.enabled = false para parar a gravação, por exemplo:
frameRecorder.enabled = false;
Esta ação para imediatamente a gravação e bloqueia até que o arquivo seja gravado completamente.
Importante
É obrigatório chamar a parada da gravação, caso contrário o arquivo gravado estará incompleto, o que pode causar falhas em partes ou em toda a funcionalidade do arquivo:
Armazenamento e exportação de arquivos
Você pode usar o evento OnRecording para obter o caminho completo do arquivo:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Gravação iniciada: {file}");
});
Na configuração padrão, o arquivo é armazenado no caminho de dados persistentes do aplicativo, acessível através de Application.persistentDataPath.
Você pode modificar o caminho de armazenamento através de FrameRecorder.Configuration.FilePath. O caminho deve ser definido antes de iniciar a gravação e AutoFilePath deve estar desativado. O diretório deve ser criado antecipadamente.
Importante
É necessário garantir que o diretório de armazenamento exista e seja gravável pelo aplicativo, caso contrário a gravação falhará ao iniciar.
Por exemplo, este código mostra como armazenar o arquivo em um diretório personalizado, gerando o nome do arquivo com base no tipo de FrameSource usado na 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), na janela Inspector desmarcar Auto File Path do Frame Recorder e configurar:

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 será adicionada automaticamente de acordo com o formato de gravação.
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:
- Android: conectar via USB e usar
adb pullou outro método para exportar, geralmente em/sdcarad/Android/data/<app package name>/files. - iOS: exportar via janela Devices do Xcode, ou via compartilhamento de arquivos do iTunes ou Finder para acessar o diretório privado do aplicativo.
- Através de código, armazenar o arquivo em um diretório público, como a pasta de downloads no Android ou o álbum de fotos no iOS.
Nota
Para aplicativos iOS, se desejar acessar o diretório privado via compartilhamento de arquivos do iTunes ou Finder, adicione a chave UIFileSharingEnabled com valor YES no Info.plist do projeto XCode antes da compilação:

O texto exibido após adicionar pode diferir da string adicionada, o que é normal.
Alterar formato de gravação
Altere o formato de gravação através de FrameRecorder.Configuration.Format, obrigatoriamente antes de iniciar a gravação.
Por exemplo, este código força o formato para H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Você também pode, no editor, selecionar AR Session (EasyAR), na janela Inspector modificar Format:

Nota
H264 não está disponível em alguns dispositivos (como Windows). Geralmente recomenda-se usar Auto, que seleciona automaticamente o formato adequado ao dispositivo.
Nota
No XREAL, gravar dados no formato Obsolete não pode ser usado para execução simulada, sendo usado apenas para relatar problemas.
Você pode verificar o formato atual usando RecordingFormat.
Gravar automaticamente ao iniciar a sessão
Defina AutoStart como true antes de iniciar a sessão para iniciar a gravação automaticamente, por exemplo:
frameRecorder.AutoStart = true;
Você também pode, no editor, selecionar AR Session (EasyAR), na janela Inspector marcar Auto Start do Frame Recorder:

Nota
Modificar FrameRecorder.enabled no editor é ineficaz.
Dados utilizáveis pelo Mega
Ao usar o Mega, existem requisitos especiais para o conteúdo do arquivo EIF e arquivos relacionados. Versões antigas do plugin Unity não integravam essa funcionalidade, portanto dados gravados nessas versões não podem ser usados com o Mega.
Dados gravados nas seguintes situações podem ser usados com o Mega:
- Dados gravados com Unity plugin 4000 ou superior
- Dados gravados com Mega Toolbox
- Se os dados foram gravados no formato Obsolete, por exemplo arquivo
x.eif, é necessário que exista o arquivox.eif.jsonno mesmo diretório
Dados gravados nas seguintes situações não podem ser usados com o Mega:
- Dados gravados com Unity plugin 4.6 ou inferior
- Dados gravados com EasyAR Sense nativo, sem adicionar conteúdo equivalente ao do plugin Unity
Além disso, embora o Mega possa funcionar sem rastreamento de movimento, o efeito é diferente. Recomenda-se ativar o rastreamento de movimento ao gravar arquivos EIF, garantindo que o efeito na reprodução atenda à maioria dos cenários de uso.
Próximos passos
- Experimente usar arquivos EIF para execução simulada
- Experimente usar a ferramenta de validação de sessão