

# IVS 個々の参加者の録画 \| リアルタイムストリーミング
<a name="rt-individual-participant-recording"></a>

このドキュメントでは、IVS Real-Time Streaming で個々の参加者の録画を使用する方法について説明します。

標準の S3 ストレージとリクエストのコストが適用されます。サムネイルでは追加の IVS 料金は発生しません。詳細については、「[Amazon IVS の料金](https://aws.amazon.com/ivs/pricing/)」を参照してください。

## 序章
<a name="ind-part-rec-introduction"></a>

個々の参加者の録画により、IVS Real-Time Streaming のお客様は IVS ステージパブリッシャーを個別に S3 バケットに録画できます。ステージで個々の参加者の録画が有効になっている場合、パブリッシャーコンテンツは、ステージへの公開が開始されると録画されます。

**注:** すべてのステージ参加者を 1 つのビデオに混在させる必要がある場合は、composite recording 機能が適しています。IVS リアルタイムストリーミングコンテンツの録画の概要については、「[録画](rt-recording.md)」を参照してください。

![個々の参加者の録画を使用して、各パブリッシャーのメディアを個別のファイルに録画します。](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## ワークフロー
<a name="ind-part-rec-workflow"></a>

![個々の参加者の録画を使用して、各パブリッシャーのメディアを個別のファイルに記録するためのワークフロー。](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. S3 バケットの作成
<a name="ind-part-rec-create-s3-bucket"></a>

VOD を書き込むには S3 バケットが必要です。詳細については、[バケットの作成方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)に関する S3 ドキュメントを参照してください。個々の参加者の録画には、IVS ステージと同じ AWS リージョンに S3 バケットを作成する必要があります。

**重要**: 既存の S3 バケットを使用する場合:
+ [**オブジェクト所有権**] の設定は [**バケット所有者に強制する**] か、[**バケット所有者を優先する**] にする必要があります。
+ **[デフォルトの暗号化]** 設定は、**[Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)]** である必要があります。

詳細については、[オブジェクトの所有権の制御](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)と[暗号化によるデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)に関する S3 ドキュメントを参照してください。

### 2. StorageConfiguration オブジェクトを作成する
<a name="ind-part-rec-create-storageconfig-object"></a>

バケットを作成したら、IVS Real-Time Streaming API を呼び出して [StorageConfiguration オブジェクトを作成](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html)します。ストレージ設定が正常に作成されると、IVS は提供された S3 バケットに書き込むアクセス許可を持ちます。この StorageConfiguration オブジェクトは、複数のステージで再利用できます。

### 3. 属性を使用してステージ参加者トークンを作成します。
<a name="ind-part-rec-create-stage-with-part-tokens"></a>

次に、個々の参加者の録画を有効にして (AutoParticipantRecordingConfiguration オブジェクトを設定して)、各パブリッシャーの参加者トークンと [IVS ステージを作成](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html)する必要があります。

以下のリクエストは、2 つの参加者トークンと個々の参加者記録が有効になっているステージを作成します。

```
POST /CreateStage HTTP/1.1
Content-type: application/json

{
   "autoParticipantRecordingConfiguration": { 
      "mediaTypes": ["AUDIO_VIDEO"],
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "thumbnailConfiguration": {
         "recordingMode": "INTERVAL",
         "storage": ["LATEST", "SEQUENTIAL"],
         "targetIntervalSeconds": 60
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

### 4. ステージにアクティブパブリッシャーとして参加させる
<a name="ind-part-rec-join-stage-as-active-pub"></a>

参加者トークンをパブリッシャーに配布し、ステージに参加させ、[パブリッシュ](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html)を開始します。

ステージに参加し、[IVS Real-Time Streaming Broadcast SDK ](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html)のいずれかを使用してステージへの公開を開始すると、参加者録画プロセスが自動的に開始され、録画が開始されたことを示す [EventBridge イベント](eventbridge.md)が送信されます。(イベントは IVS 参加者の録画状態の変更 - 録画開始。) 同時に、参加者録画プロセスは、設定された S3 バケットへの VOD およびメタデータファイルの書き込みを開始します。注: 非常に短い期間 (5 秒未満) で接続された参加者は、録画される保証はありません。

各録画の S3 プレフィックスを取得するには、次の 2 つの方法があります。
+ EventBridge イベントを再生します。

  ```
  {
     "version": "0",
     "id": "12345678-1a23-4567-a1bc-1a2b34567890",
     "detail-type": "IVS Participant Recording State Change",
     "source": "aws.ivs",
     "account": "123456789012",
     "time": "2024-03-13T22:19:04Z",
     "region": "us-east-1",
     "resources": ["arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij"],
     "detail": {
        "session_id": "st-ZyXwvu1T2s",
        "event_name": "Recording Start",
        "participant_id": "xYz1c2d3e4f",
        "recording_s3_bucket_name": "ivs-recordings",
        "recording_s3_key_prefix": "<stage_id>/<session_id>/<participant_id>/2024-01-01T12-00-55Z"
     }
  }
  ```
+ [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html) API オペレーションの使用 — レスポンスには、参加者が録画されている S3 バケットとプレフィックスが含まれます。リクエストは次のとおりです。

  ```
  POST /GetParticipant HTTP/1.1
  Content-type: application/json
  {
     "participantID": "xYz1c2d3e4f",
     "sessionId": "st-ZyXwvu1T2s",
     "stageArn": "arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij"
  }
  ```

  そして、次のレスポンスがあります。

  ```
  Content-type: application/json
  {
     "participant": {
        ...
        "recordingS3BucketName": "ivs-recordings",
        "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>",
        "recordingState": "ACTIVE",
        ...
     }
  }
  ```

### 5. VOD を再生する
<a name="ind-part-rec-play-back-vod"></a>

録画が確定したら、[IVS プレイヤー](https://debug.ivsdemos.com/?p=ivs)を使用して録画を視聴できます。VOD 再生用に CloudFront ディストリビューションを設定する手順については、[プライベートバケットからの録画コンテンツの再生](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback)を参照してください。

## 音声のみの録音
<a name="ind-part-rec-audio-only-recordings"></a>

個々の参加者の録画/録音を設定する場合、S3 バケットに書き込むよう選択できるのはオーディオ HLS セグメントのみです。この機能を使用するには、ステージの作成時に `AUDIO_ONLY mediaType` を選択します。

```
POST /CreateStage HTTP/1.1
Content-type: application/json

{
   "autoParticipantRecordingConfiguration": { 
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "mediaTypes": ["AUDIO_ONLY"],
      "thumbnailConfiguration": {
         "recordingMode": "DISABLED"
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

## サムネイルのみの録画
<a name="ind-part-rec-recording-thumbnail-only"></a>

個々の参加者の録画を設定する場合、S3 バケットに書き込むよう選択できるのはサムネイルのみです。この機能を使用するには、ステージの作成時に `mediaType` を `NONE` に設定します。これで HLS セグメントが生成されなくなります。サムネイルは引き続き作成され、S3 バケットに書き込まれます。

```
POST /CreateStage HTTP/1.1
Content-type: application/json
{
   "autoParticipantRecordingConfiguration": { 
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "mediaTypes": ["NONE"],
      "thumbnailConfiguration": {
         "recordingMode": "INTERVAL",
         "storage": ["LATEST", "SEQUENTIAL"],
         "targetIntervalSeconds": 60
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

## 録画の内容
<a name="ind-part-rec-recording-contents"></a>

個々の参加者の録画がアクティブになると、ステージの作成時に提供された S3 バケットに HLS ビデオセグメント、メタデータファイル、サムネイルの書き込みが開始します。このコンテンツは、後処理またはオンデマンド動画再生として利用できます。

録画が確定すると、IVS 参加者の録画状態が変更される (録画終了イベントが EventBridge を介して送信される) ことに注意してください。録画したストリームの再生または処理は、必ず Recording End イベントの送信後に行うことをお勧めします。詳細については、「[IVS Real-Time Streaming で Amazon EventBridge を使用する](eventbridge.md)」を参照してください。

以下は、ライブの IVS セッションの録画のディレクトリ構造およびコンテンツの例です。

```
s3://mybucket/stageId/stageSessionId/participantId/timestamp
   events
      recording-started.json
      recording-ended.json
   media
      hls
	 multivariant.m3u8
         high
            playlist.m3u8
            1.mp4
      thumbnails
         high
            1.jpg
            2.jpg
      latest_thumbnail
         high
            thumb.jpg
```

`events`フォルダには、録画イベントに対応するメタデータファイルが含まれています。JSON メタデータファイルは、録画が開始された時、正常に終了した時、失敗して終了した時に生成されます。
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

該当する `events` フォルダには、`recording-started.json`、および `recording-ended.json` または `recording-failed.json` のどちらかが含まれます。これらには、録画されたセッションとその出力形式に関連するメタデータが含まれます。JSON の詳細を以下に示します。

`media` フォルダには、サポートされているメディアコンテンツが含まれています。`hls` サブフォルダには、録画セッション中に生成されたすべてのメディアファイルとマニフェストファイルが含まれており、IVS プレイヤーで再生できます。設定されている場合、 `thumbnails` と `latest_thumbnail` のサブフォルダには、録画セッション中に生成された JPEG サムネイルメディアファイルが含まれます。

## フラグメント化された個々の参加者の記録をマージする
<a name="ind-part-rec-merge-frag"></a>

記録設定の `recordingReconnectWindowSeconds` プロパティを使用すると、ステージパブリッシャーがステージから切断してから再接続した場合に IVS が前のセッションと同じ S3 プレフィックスに記録を試みる際、時間枠 (秒単位) を指定できます。つまり、パブリッシャーが切断してから指定された時間内で再接続した場合、複数の記録は 1 つの記録として見なされてマージされます。

サムネイル記録が `SEQUENTIAL` モードで有効になっている場合、サムネイルも同じ `recordingS3Prefix` の下でマージされます。記録がマージされると、サムネイルカウンターは前の記録用に書き込まれた前のサムネイル値から再開始されます。

**Amazon EventBridge の IVS 記録状態変更イベント:** IVS が新しいストリームが開始されないことを確認するために待機するため、Recording End イベントおよび recording-ended JSON メタデータファイルは最低 `recordingReconnectWindowSeconds` 遅延されます。

マージストリーム機能の設定手順については、「*Amazon IVS Real-Time Streaming の開始方法*」の「[ステップ 2: ステージを作成する](getting-started-create-stage.md)」を参照してください。

### 対象
<a name="ind-part-rec-merge-frag-eligibility"></a>

同じ S3 プレフィックスを使用して複数の記録をマージするには、すべての記録が特定の条件を満たす必要があります。
+ ステージの AutoParticipantRecordingConfiguration の `recordingReconnectWindowSeconds` プロパティにおける値は 0 より大きく設定されます。
+ VOD アーティファクトの書き込みに使用される `StorageConfigurationArn` は各記録において同様です。
+ 参加者がステージを離れてから再参加するまでの秒単位の時間差は `recordingReconnectWindowSeconds` 以下です。

`recordingReconnectWindowSeconds` のデフォルト値は 0 であり、マージが無効になることに注意してください。

## 複数の参加者の記録を同期させる
<a name="ind-part-rec-sync-multiple"></a>

個々の参加者の録画には、HLS プレイリストの `EXT-X-PROGRAM-DATE-TIME` タグが含まれます。これにより、後処理中に複数の参加者の記録を同期するための正確な UTC タイムスタンプをミリ秒の精度で提供します。

複数の参加者を個別に録画し、同期されたコンポジション (サイドバイサイドレイアウトやピクチャーインピクチャーレイアウトなど) を作成する場合は、参加者がさまざまなタイミングでステージに参加したり、ネットワークの中断によって不連続になったりした場合でも、これらのタイムスタンプを使用して録画を正確に調整できます。

各参加者の HLS プレイリストには、以下を示す `EXT-X-PROGRAM-DATE-TIME` タグが含まれています。
+ 録画の開始 (最初のセグメント）。
+ ステッチングが発生したときなど、録画中の不連続ポイント。

これらのタイムスタンプは、ミリ秒単位の精度を持ち、同じタイムリファレンスを使用してすべての参加者間で同期されます。

### HLS プレイリストの例
<a name="ind-part-rec-sync-multiple-hls-playlist"></a>

```
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:12
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="init-0.mp4"
#EXT-X-PROGRAM-DATE-TIME:2024-01-01T12:00:00.000Z
#EXTINF:3.30091,
0.mp4
#EXTINF:5.63794,
1.mp4
#EXTINF:2.74290,
2.mp4
#EXT-X-DISCONTINUITY
#EXT-X-MAP:URI="init-1.mp4"
#EXT-X-PROGRAM-DATE-TIME:2024-01-01T12:00:52.772Z
#EXTINF:2.54412,
3.mp4
#EXTINF:5.63649,
4.mp4
```

`EXT-X-PROGRAM-DATE-TIME` タグは、最初のセグメントと各不連続ポイントの正確な UTC 時間を提供し、他の参加者の録画との正確な同期を可能にします。

### 同期ワークフロー
<a name="ind-part-rec-sync-multiple-workflow"></a>

複数の参加者の録画を同期させるには、各参加者の HLS プレイリストから `EXT-X-PROGRAM-DATE-TIME` タイムスタンプを抽出し、それを使用してタイムオフセットを計算します。これらのオフセットは、FFmpeg などのビデオ処理ツールを使用して後処理コンポジション中に適用できます。録画に途切れが発生している場合でも、その時点のタイムスタンプが正確な同期を保つためのタイミング基準を提供します。これにより、録画全体を通じて正確な同期が維持されます。

注: 後処理なしでリアルタイムに同期された出力を得たい場合は、参加者ごとの個別録画ではなくサーバーサイドコンポジションの利用を検討してください。

## JSON メタデータファイル
<a name="ind-part-rec-json-metadata-files"></a>

このメタデータは JSON 形式です。これには、以下の情報が含まれています。


| フィールド | Type | 必須 | 説明 | 
| --- | --- | --- | --- | 
| `stage_arn` | 文字列 | はい | 録画のソースとして使用されているステージの ARN。 | 
| `session_id` | string | はい | 参加者が録画されるステージの `session_id` を表す文字列。 | 
| `participant_id` | string | はい | 録画された参加者の識別子を表す文字列。 | 
| `recording_started_at` | string | 条件付き | 録画開始時の RFC 3339 UTC タイムスタンプ。`recording_status` が `RECORDING_START_FAILED` の場合、これは使用できません。また、`recording_ended_at` については、以下の注を参照してください。 | 
| `recording_ended_at` | string | 条件付き | 録画終了時の RFC 3339 UTC タイムスタンプ。これは、`recording_status` が `"RECORDING_ENDED"` または `"RECORDING_ENDED_WITH_FAILURE"` のときにのみ利用できます。<br />**注:** `recording_started_at` および `recording_ended_at` は、これらのイベントが生成されたときのタイムスタンプであり、HLS ビデオセグメントのタイムスタンプと完全に一致しない場合があります。録画時間を正確に決定するには、`duration_ms`フィールドを使用してください。 | 
| `recording_status` | 文字列 | はい | 録画ステータス。有効な値は、`"RECORDING_STARTED"`、`"RECORDING_ENDED"`、`"RECORDING_START_FAILED"`、`"RECORDING_ENDED_WITH_FAILURE"` です。 | 
| `recording_status_message` | string | 条件付き | ステータスの詳細情報。これは、`recording_status` が `"RECORDING_ENDED"` または `"RECORDING_ENDED_WITH_FAILURE"` のときにのみ利用できます。 | 
| `media` | オブジェクト | はい | この録画に使用できるメディアコンテンツの列挙型オブジェクトを含むオブジェクト。有効な値: `"hls"`。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | はい | Apple HLS 形式の出力を記述する列挙型フィールド。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 整数 | 条件付き | 録画された HLS コンテンツの継続時間 (ミリ秒単位)。これは、`recording_status` が `"RECORDING_ENDED"` または `"RECORDING_ENDED_WITH_FAILURE"` のときにのみ利用できます。録画完了前に障害が発生した場合は、0 になります。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | HLS コンテンツが格納されている S3 プレフィックスからの相対パス。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | HLS マスタープレイリストファイルの名前。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | はい | メタデータオブジェクトのレンディション (HLS バリアント) の配列。レンディションは必ず 1 つ以上。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | このレンディションの HLS コンテンツが格納されている S3 プレフィックスからの相対パス。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | このレンディションのメディアプレイリストファイルの名前。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | 条件付き | サムネイル出力を記述する列挙型フィールド。これを使用できるのは、サムネイル設定の `storage` フィールドに `SEQUENTIAL` が含まれる場合のみです。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | はい | シーケンシャルサムネイルコンテンツが格納されている S3 プレフィックスからの相対パス。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | はい | メタデータオブジェクトのレンディション (サムネイルバリアント) の配列。レンディションは必ず 1 つ以上。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | このレンディションのサムネイルコンテンツが格納されている S3 プレフィックスからの相対パス。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | 条件付き | サムネイル出力を記述する列挙型フィールド。これを使用できるのは、サムネイル設定の `storage` フィールドに `LATEST` が含まれる場合のみです。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | はい | `latest_thumbnail` が格納されている S3 プレフィックスからの相対パス。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | オブジェクト | はい | メタデータオブジェクトのレンディション (サムネイルバリアント) の配列。レンディションは必ず 1 つ以上。 | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | 文字列 | はい | このレンディションの最新のサムネイルが格納されている S3 プレフィックスからの相対パス。 | 
| `version` | string | はい | メタデータスキーマのバージョン。 | 

### 例: recording-started.json
<a name="ind-part-rec-json-ex-rec-start"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T13:17:17Z",
   "recording_status": "RECORDING_STARTED",
   "media": {
      "hls": {
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

### 例: recording-ended.json
<a name="ind-part-rec-json-ex-rec-end"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T19:44:19Z",
   "recording_ended_at": "2024-03-13T19:55:04Z",
   "recording_status": "RECORDING_ENDED",
   "media": {
      "hls": {
         "duration_ms": 645237,
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

### 例: recording-failed.json
<a name="ind-part-rec-json-ex-rec-failed"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T19:44:19Z",
   "recording_ended_at": "2024-03-13T19:55:04Z",
   "recording_status": "RECORDING_ENDED_WITH_FAILURE",
   "media": {
      "hls": {
         "duration_ms": 645237,
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

## 記録を MP4 に変換する
<a name="ind-part-rec-convert-rec-mp4"></a>

個々の参加者の記録は、プレイリストとフラグメント化された MP4 (fMP4) セグメントで構成される HLS 形式で保存されます。HLS 記録を単一の MP4 ファイルに変換するには、FFmpeg をインストールして次のコマンドを実行します。

```
ffmpeg -i /path/to/playlist.m3u8 -i /path/to/playlist.m3u8 -map 0:v -map 1:a -c copy output.mp4
```