Android をターゲットとする AR Foundation で録画中にカスタムデータを追加する

Recording & Playback API を使用すると、セッションを録画して、リアルタイムのカメラフィードに代えて使用できます。ただし、これらの録画には動画とセンサーデータのみが含まれます。セッション レコーディングにカスタムデータを追加し、カメラ画像の一部であるかのように、再生中にデータを返すこともできます。

ARCore では、カスタムデータが自動的に録画に含まれることはありません。録画中に ARCore フレームにカスタムデータを追加し、再生中にそのフレームから同じデータを取得できます。ユーザーがセッションを再生したときに期待どおりのデータが返されるようにアプリをプログラムするのは、デベロッパーの責任です。

カスタムデータのユースケース

録画にカスタムデータを追加すると、AR アプリの可能性を広げることができます。具体的なユースケースを次にいくつか示します。

外出先で AR を使用する

これまで、ユーザーは適切な場所とタイミングでのみ AR 体験にアクセスできました。リビングルームに AR ランプを置きたい場合、その場所に実際に立ってランプがどのように見えるかを確認する必要がありました。カスタム トラックを使用すると、リビングルームを一度録画しておけば、いつでも仮想の家具をシーンに追加できます。

AR エクスペリエンスを共同制作する

ライブ セッションの要件がないため、ユーザーは AR 編集のオプションをさらに多く利用できます。これにより、いつでもどこでも独自の AR コンテンツを作成してアクセスできます。たとえば、特定の環境を撮影し、拡張現実のエフェクトを追加して、友人と共有できます。

前提条件

続行する前に、AR の基本コンセプトARCore セッションを構成する方法を理解してください。

カスタムデータで記録を初期化する

カスタムデータを使用して録音を初期化する手順は次のとおりです。録画セッションを開始、停止、確認するには、AR セッションを録画して再生するをご覧ください。

  1. ARCoreRecordingConfig を取得します。
  2. カスタム UUID で新しい Track を作成します。すべてのカスタムデータはここに保存されます。
  3. セッション構成時に作成した ARCoreRecordingConfigTrack を追加します。
// 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 で値「A」を指定して RecordTrackData() を呼び出すと、トラックの再生時に 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() を 2 回呼び出した場合、再生時に TrackData の 2 つのインスタンスが返されます。

// 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!
}

次のステップ