在記錄以 Android 為目標的 AR Foundation 時新增自訂資料

錄製與播放 API 可讓你錄製工作階段,並用於取代即時攝影機畫面。不過,這些錄製內容僅包含影片和感應器資料。您也可以將自訂資料新增至工作階段錄影功能,並在播放期間將資料傳回給您,就像是相機影像的一部分。

ARCore 不會自動在錄音內容中加入任何自訂資料。而是可讓您在錄製期間將自訂資料新增至 ARCore 影格中,並在播放期間從影格擷取相同資料。您可以自行編寫應用程式,確保使用者在播放工作階段時能取得預期的資料。

自訂資料的用途

在錄音內容中加入自訂資料,讓 AR 應用程式發揮更多可能性。以下是一些特定的用途。

隨時隨地使用 AR

過去,使用者只能在適當地點使用 AR 體驗。如果他們想將 AR 檯燈放到客廳,就必須實際站在現場,看看檯燈可能在該處的樣子。他們可以運用自訂軌道錄下客廳一次,然後隨時隨地在場景中加入虛擬家具。

共同打造 AR 體驗

如果沒有直播課程要求,使用者還能擁有更多 AR 編輯選項,方便他們隨時隨地建立和存取獨特的 AR 內容。舉例來說,他們可以錄製特定環境、加入擴增實境效果,並與好友分享。

必要條件

請務必先瞭解基本 AR 概念,以及如何設定 ARCore 工作階段,然後再繼續操作。

初始化包含自訂資料的記錄

請按照下列步驟初始化使用自訂資料的記錄。如要開始、停止及查看錄製工作階段,請參閱「錄製及播放 AR 工作階段」。

  1. 取得 ARCoreRecordingConfig
  2. 使用自訂 UUID 建立新的 Track。所有自訂資料都會儲存在這裡。
  3. Track 新增至您在工作階段設定期間建立的 ARCoreRecordingConfig
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
 Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

系統會將所有新曲目視為個別的錄音,而每次錄製的曲目都會有專屬的 UUID。

使用額外資料設定測試群組

使用可描述工作階段記錄的其他資料設定測試群組。 舉例來說,您可以新增附註來說明錄製時段的位置和時間,藉此「標記」音軌:「這個場次是在下午的下午錄製」。

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

使用 MIME 類型設定測試群組

使用 MIME 類型設定測試群組,以說明記錄中記錄的資料類型,以便與外部工具相容。

如果您未指定類型,資料會歸類為 application/text。ARCore 在讀取資料時會忽略 MIME 類型。

// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";

記錄自訂資料軌

所有自訂軌跡資料都會記錄在頁框上。您在影格中記錄資料的時間,與播放期間會傳回資料的時間相同。舉例來說,如果您在 00:07:02 呼叫 RecordTrackData(),並提供值「A」值,則在播放曲目時,系統會在 00:07:02 標記傳回「A」。

如要錄製自訂資料來源,請呼叫 RecordTrackData()

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  recordingManager.RecordTrackData(trackGuid, lampData);
}

播放自訂資料軌

在播放期間從工作階段錄影中擷取自訂資料。

初始化播放

使用自訂資料初始化播放作業,與初始化一般工作階段錄影相同。

傳回自訂資料

呼叫 GetUpdatedTrackData() 即可擷取影格上記錄的自訂資料。您可以從同一個頁框擷取多個曲目資料,例如,如果你在錄製過程中於相同影格呼叫 RecordTrackData() 兩次,即可在播放期間取回兩個 TrackData 的執行個體。

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

TrackData 進入容器物件後,請擷取自訂資料的位元組。

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

後續步驟