Table of Contents

Merekam file EIF di Unity

Artikel ini menjelaskan cara merekam file EIF di Unity untuk digunakan dalam simulasi.

Sebelum memulai

Memulai perekaman

Gunakan FrameRecorder.enabled = true untuk memulai perekaman, contoh:

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

Perlu diperhatikan, di sini perlu memeriksa apakah ARAssembly.FrameRecorder ada.

Catatan

ARAssembly.FrameRecorder dalam beberapa kasus, seperti saat menggunakan FramePlayer, tidak dapat digunakan.

FrameRecorder.enabled nilai defaultnya false, artinya perekaman dalam keadaan mati, bahkan jika dikonfigurasi manual di editor pun tidak akan efektif.

Perekaman akan dimulai saat session berjalan, ketika FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.

Jika FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, Anda bisa menggunakan event OnReady untuk menunggu perekaman siap.

Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
    // dapat memulai perekaman
});

Anda dapat menggunakan event OnRecording untuk memastikan keberhasilan memulai:

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

Kegagalan memulai tidak memicu event apa pun, tetapi dapat diperiksa dengan melihat apakah FrameRecorder.Status adalah Error.

Penting

Efek saat menjalankan EIF di dalam scene bergantung pada perangkat yang digunakan saat perekaman dan frame source yang dipilih saat itu. Oleh karena itu, saat merekam file EIF, disarankan menggunakan perangkat yang sama atau mendekati dengan perangkat target untuk menjamin efek saat pemutaran konsisten dengan efek di perangkat target. Perlu juga memfokuskan perhatian pada apakah fitur pelacakan gerak diaktifkan dalam scene perekaman. Jika fitur pelacakan gerak tidak diaktifkan saat perekaman, maka saat pemutaran tidak dapat diaktifkan, dan fungsi AR yang bergantung pada pelacakan gerak (seperti peta ruang padat, Mega, dll.) juga tidak akan bekerja selaras dengan perangkat.

Menghentikan perekaman

Gunakan FrameRecorder.enabled = false untuk menghentikan perekaman, contoh:

frameRecorder.enabled = false;

Operasi ini akan segera menghentikan perekaman dan memblokir hingga file selesai ditulis.

Penting

Harus memanggil penghentian perekaman, jika tidak file rekaman tidak lengkap, akan menyebabkan sebagian fungsi atau seluruh file tidak dapat digunakan:

  • Ketika format perekaman adalah H264, file EIF tidak dapat melompat ke titik waktu yang ditentukan untuk diputar (seek), hanya dapat diputar dari awal
  • Ketika format perekaman adalah Obsolete, file EIF tidak dapat digunakan

Penyimpanan dan ekspor file

Anda dapat menggunakan event OnRecording untuk mendapatkan jalur lengkap file rekaman:

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

Dalam konfigurasi default, file rekaman akan disimpan di jalur data persisten aplikasi, yang dapat diakses melalui Application.persistentDataPath.

Anda dapat mengubah jalur penyimpanan file rekaman melalui FrameRecorder.Configuration.FilePath. Jalur ini harus ditetapkan sebelum perekaman dimulai, dan hanya akan efektif setelah AutoFilePath dimatikan. Direktori harus dibuat terlebih dahulu.

Penting

Harus memastikan direktori penyimpanan file rekaman ada dan aplikasi dapat menulis, jika tidak perekaman akan gagal saat dimulai.

Contoh, kode berikut menunjukkan cara menyimpan file rekaman di direktori kustom, dan menghasilkan nama file berdasarkan tipe FrameSource yang digunakan session dan waktu saat ini:

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;

Anda juga dapat di editor, pilih AR Session (EasyAR), di jendela Inspector batalkan centang Auto File Path Frame Recorder lalu konfigurasikan:

alt text

Kiat

Melalui FrameRecorder.RecordingConfiguration.FilePath Anda dapat mengubah direktori penyimpanan dan nama file (tanpa ekstensi). Ekstensi file akan ditambahkan secara otomatis berdasarkan format perekaman.

  • Ketika format perekaman adalah H264, ekstensi file adalah .mkveif
  • Ketika format perekaman adalah Obsolete, ekstensi file adalah .eif

Jika file disimpan di jalur data persisten aplikasi atau jalur pribadi aplikasi lainnya, Anda dapat mengekspor file ke komputer dengan cara berikut:

  • Platform Android dapat terhubung ke komputer melalui USB, lalu gunakan adb pull atau cara lain untuk mengekspor file ke komputer, file biasanya berada di /sdcarad/Android/data/<app package name>/files.
  • Platform iOS dapat mengekspor file ke komputer melalui jendela Devices Xcode, atau melalui berbagi file iTunes atau Finder untuk mengakses direktori pribadi aplikasi.
  • Melalui kode untuk menyimpan file ke direktori publik, seperti direktori unduhan Android atau album foto iOS.
Catatan

Untuk aplikasi iOS, jika ingin mengakses direktori pribadi aplikasi melalui berbagi file iTunes atau Finder, sebelum membangun, tambahkan kunci UIFileSharingEnabled di Info.plist proyek XCode, dan atur nilainya menjadi YES:

alt text

Teks yang ditampilkan setelah ditambahkan mungkin berbeda dengan string yang ditambahkan, ini normal.

Mengganti format perekaman

Ubah format perekaman melalui FrameRecorder.Configuration.Format, harus ditetapkan sebelum perekaman dimulai.

Contoh, kode berikut menunjukkan cara memaksakan format perekaman menjadi H264:

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

Anda juga dapat di editor, pilih AR Session (EasyAR), di jendela Inspector ubah Format:

alt text

Catatan

H264 tidak dapat digunakan di beberapa perangkat (seperti Windows), umumnya direkomendasikan menggunakan Auto, sehingga akan memilih format yang sesuai secara otomatis berdasarkan perangkat.

Catatan

Di XREAL, menggunakan format Obsolete untuk merekam data tidak dapat digunakan untuk simulasi, hanya digunakan untuk melaporkan masalah.

  • Saat simulasi, gunakan format H264 untuk merekam data.
  • Saat melaporkan masalah, gunakan format Obsolete untuk merekam data.

Anda dapat menggunakan RecordingFormat untuk melihat format perekaman saat ini.

Perekaman otomatis saat session dimulai

Atur AutoStart menjadi true sebelum session dimulai, untuk memulai perekaman saat session dimulai, contoh:

frameRecorder.AutoStart = true;

Anda juga dapat di editor, pilih AR Session (EasyAR), di jendela Inspector centang Auto Start Frame Recorder:

alt text

Catatan

Mengubah FrameRecorder.enabled di editor tidak efektif.

Data yang dapat digunakan untuk Mega

Saat menggunakan Mega, ada beberapa persyaratan khusus untuk konten file EIF dan terkait. Di versi lama plugin Unity, fungsi terkait tidak terintegrasi, sehingga data yang direkam dengan versi tersebut tidak dapat digunakan untuk Mega.

Data yang direkam dalam situasi berikut dapat digunakan untuk Mega:

  • Data yang direkam menggunakan plugin Unity versi 4000 atau lebih tinggi
  • Data yang direkam menggunakan Mega Toolbox
  • Jika data direkam menggunakan format Obsolete, misalnya file x.eif, perlu ada file x.eif.json di direktori yang sama untuk dapat digunakan

Data yang direkam dalam situasi berikut tidak dapat digunakan untuk Mega:

  • Data yang direkam menggunakan plugin Unity versi 4.6 atau lebih rendah
  • Menggunakan EasyAR Sense native, dan tidak menambahkan data yang sama seperti di plugin Unity

Selain itu, meskipun Mega dapat bekerja tanpa menggunakan pelacakan gerak, efek kerjanya berbeda. Disarankan untuk mengaktifkan fitur pelacakan gerak saat merekam file EIF, sehingga efek saat pemutaran dapat memenuhi sebagian besar skenario penggunaan.

Langkah selanjutnya