

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Perekaman IVS \$1 Streaming Waktu Nyata
<a name="rt-recording"></a>

Ada dua opsi perekaman untuk streaming real-time IVS:
+ Dengan rekaman peserta individu, setiap media penerbit direkam dalam file terpisah.
+ Sebaliknya, rekaman komposit menggabungkan media dari semua penerbit menjadi satu tampilan dan merekamnya dalam satu file.

Rekaman peserta individu tidak dikenakan biaya Amazon IVS tambahan, sementara rekaman komposit dikenakan biaya untuk tarif per jam untuk video yang dikodekan. Kedua opsi perekaman menimbulkan penyimpanan S3 standar dan biaya permintaan. Untuk detail selengkapnya, lihat [harga Amazon IVS](https://aws.amazon.com/ivs/pricing/).

Untuk solusi yang lebih dapat disesuaikan, pertimbangkan untuk menggunakan proyek [IVSStageSaver](https://github.com/aws-samples/amazon-ivs-stage-recorder) r sumber terbuka sebagai dasar untuk layanan perekaman yang dihosting sendiri.

## Rekaman Peserta Individu
<a name="ind-par-rec"></a>

Opsi ini sangat ideal untuk streaming langsung dengan satu penerbit atau ketika rekaman terpisah dari setiap penerbit diperlukan, terutama untuk tujuan moderasi. Untuk detail selengkapnya, lihat [Rekaman Peserta Individu](rt-individual-participant-recording.md).

![\[Merekam setiap media penerbit dalam file terpisah menggunakan rekaman partisipan individu.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Rekaman Komposit
<a name="comp-rec"></a>

Opsi ini menggabungkan media dari beberapa penerbit menjadi satu tampilan dan mencatatnya dalam satu file, ideal untuk pengalaman. video-on-demand Untuk detail selengkapnya, lihat [Perekaman Komposit](rt-composite-recording.md).

![\[Merekam panggung ke bucket S3 menggunakan komposisi sisi server.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Composite_Recording.png)


## Thumbnail
<a name="thumbnails"></a>

Rekaman thumbnail untuk streaming real-time IVS dapat diatur untuk rekaman peserta individu dan rekaman komposit (multi-peserta). Untuk mengaktifkan atau menonaktifkan perekaman thumbnail dan menyesuaikan interval di mana thumbnail dihasilkan:
+ Untuk rekaman peserta individu, gunakan `thumbnailConfiguration` properti.
+ Untuk rekaman komposit, gunakan `thumbnailConfigurations` properti.

Interval thumbnail berkisar dari 1 hingga 86400 detik (24 jam); secara default, perekaman thumbnail dinonaktifkan. Untuk detailnya, lihat [Referensi API Streaming Waktu Nyata Amazon IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/Welcome.html).

Konfigurasi thumbnail mencakup `storage` bidang, yang dapat diatur ke. `SEQUENTIAL` and/or `LATEST` `storage`Bidang menentukan perilaku penyimpanan S3 untuk thumbnail:
+ `SEQUENTIAL`menyimpan semua thumbnail secara serial. Ini adalah opsi default.
+ `LATEST`hanya menyimpan thumbnail terbaru, menimpa yang sebelumnya.

Jika Anda menentukan keduanya `SEQUENTIAL` dan`LATEST`, thumbnail ditulis ke dua jalur S3 terpisah, satu untuk arsip sekuensial dan satu untuk thumbnail terbaru.

# Rekaman Peserta Individu IVS \$1 Streaming Waktu Nyata
<a name="rt-individual-participant-recording"></a>

Dokumen ini menjelaskan cara menggunakan rekaman peserta individu dengan streaming real-time IVS.

Biaya penyimpanan dan permintaan S3 standar berlaku. Thumbnail tidak dikenakan biaya IVS tambahan. Untuk detailnya, lihat [Harga Amazon IVS](https://aws.amazon.com/ivs/pricing/).

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

Rekaman peserta individu memungkinkan pelanggan streaming real-time IVS untuk merekam penerbit panggung IVS satu per satu ke dalam ember S3. Ketika rekaman peserta individu diaktifkan untuk sebuah panggung, konten penerbit direkam setelah mereka mulai menerbitkan ke panggung.

**Catatan:** Jika Anda perlu membuat semua peserta panggung dicampur dalam satu video, fitur perekaman komposit lebih cocok. Lihat [Merekam](rt-recording.md) untuk ringkasan perekaman real-time-streaming konten IVS.

![\[Merekam setiap media penerbit dalam file terpisah menggunakan rekaman partisipan individu.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Alur kerja
<a name="ind-part-rec-workflow"></a>

![\[Alur kerja untuk merekam setiap media penerbit dalam file terpisah menggunakan rekaman partisipan individu.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. Buat Bucket S3
<a name="ind-part-rec-create-s3-bucket"></a>

Anda akan membutuhkan ember S3 untuk menulis VODs. Untuk detailnya, lihat dokumentasi S3 tentang [cara membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). Perhatikan bahwa untuk perekaman peserta individu, bucket S3 harus dibuat di wilayah AWS yang sama dengan tahap IVS.

**Penting**: Jika Anda menggunakan bucket S3 yang ada:
+ Pengaturan **Kepemilikan Objek** harus **diberlakukan oleh pemilik Bucket** atau **pemilik Bucket lebih disukai**.
+ Pengaturan **Enkripsi Default** harus berupa **enkripsi sisi server dengan kunci terkelola Amazon S3 (SSE-S3**).

Untuk detailnya, lihat dokumentasi S3 tentang [mengendalikan kepemilikan objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) dan [melindungi data dengan enkripsi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).

### 2. Buat StorageConfiguration Objek
<a name="ind-part-rec-create-storageconfig-object"></a>

Setelah membuat bucket, panggil API streaming real-time IVS untuk [membuat StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html) objek. Setelah konfigurasi penyimpanan berhasil dibuat, IVS akan memiliki izin untuk menulis ke bucket S3 yang disediakan. Anda dapat menggunakan kembali StorageConfiguration objek ini pada beberapa tahap.

### 3. Buat Panggung dengan Token Peserta
<a name="ind-part-rec-create-stage-with-part-tokens"></a>

Sekarang Anda perlu [membuat tahap IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html) dengan rekaman peserta individu diaktifkan (dengan mengatur AutoParticipantRecordingConfiguration objek), serta token peserta untuk setiap penerbit.

Permintaan di bawah ini membuat panggung dengan dua token peserta dan rekaman peserta individu diaktifkan.

```
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. Bergabunglah dengan Panggung sebagai Penerbit Aktif
<a name="ind-part-rec-join-stage-as-active-pub"></a>

Bagikan token peserta ke penerbit Anda, dan minta mereka bergabung dengan panggung dan mulai [mempublikasikannya](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html).

Ketika mereka bergabung dengan panggung dan mulai mempublikasikannya menggunakan salah satu [siaran streaming real-time IVS SDKs](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html), proses perekaman peserta dimulai secara otomatis dan mengirimi Anda [EventBridgeacara](eventbridge.md) yang menunjukkan bahwa rekaman dimulai. (Acara ini adalah Perubahan Status Rekaman Peserta IVS - Merekam Mulai.) Secara bersamaan, proses perekaman peserta mulai menulis file VOD dan metadata ke bucket S3 yang dikonfigurasi. Catatan: Peserta yang terhubung untuk jangka waktu yang sangat singkat (kurang dari 5 d) tidak dijamin akan direkam.

Ada dua cara untuk mendapatkan awalan S3 untuk setiap rekaman:
+ Dengarkan EventBridge acara:

  ```
  {
     "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"
     }
  }
  ```
+ Gunakan operasi [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html)API — Responsnya mencakup bucket S3 dan awalan tempat peserta direkam. Berikut permintaannya:

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

  Dan inilah tanggapannya:

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

### 5. Mainkan Kembali VOD
<a name="ind-part-rec-play-back-vod"></a>

Setelah rekaman selesai, Anda dapat menontonnya menggunakan pemutar [IVS](https://debug.ivsdemos.com/?p=ivs). Lihat [Pemutaran Konten yang Direkam dari Bucket Pribadi](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback) untuk petunjuk tentang pengaturan CloudFront distribusi untuk pemutaran VOD.

## Rekaman Hanya Audio
<a name="ind-part-rec-audio-only-recordings"></a>

Saat menyiapkan rekaman peserta individu, Anda dapat memilih untuk hanya memiliki segmen HLS audio yang ditulis ke bucket S3 Anda. Untuk menggunakan fitur ini, pilih `AUDIO_ONLY mediaType` saat membuat panggung:

```
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"
      }
   ]
}
```

## Rekaman Khusus Thumbnail
<a name="ind-part-rec-recording-thumbnail-only"></a>

Saat menyiapkan rekaman peserta individu, Anda dapat memilih untuk hanya memiliki thumbnail yang ditulis ke bucket S3 Anda. Untuk menggunakan fitur ini, atur `mediaType` ke `NONE` saat membuat panggung. Ini memastikan bahwa tidak ada segmen HLS yang dihasilkan; thumbnail masih dibuat dan ditulis ke bucket S3 Anda.

```
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"
      }
   ]
}
```

## Isi Rekaman
<a name="ind-part-rec-recording-contents"></a>

Saat perekaman peserta individu aktif, segmen video HLS, file metadata, dan thumbnail akan mulai ditulis ke bucket S3 yang disediakan saat panggung dibuat. Konten ini tersedia untuk pasca-pemrosesan atau pemutaran sebagai video sesuai permintaan.

Perhatikan bahwa setelah rekaman diselesaikan, acara Perubahan Status Perekaman Peserta IVS - Perekaman Akhir dikirim melalui. EventBridge Kami menyarankan Anda memutar kembali atau memproses streaming yang direkam hanya setelah acara ini diterima. Untuk detailnya, lihat [Menggunakan EventBridge dengan IVS Real-Time Streaming](eventbridge.md).

Berikut ini adalah struktur direktori sampel dan isi rekaman sesi IVS langsung:

```
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`Folder berisi file metadata yang sesuai dengan peristiwa perekaman. File metadata JSON dihasilkan saat perekaman dimulai, berakhir dengan sukses, atau diakhiri dengan kegagalan:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

`events`Folder tertentu berisi `recording-started.json` dan salah satu `recording-ended.json` atau`recording-failed.json`. Ini berisi metadata yang terkait dengan sesi rekaman dan format outputnya. Rincian JSON diberikan di bawah ini.

`media`Folder berisi konten media yang didukung. `hls`Subfolder berisi semua media dan file manifes yang dihasilkan selama sesi perekaman dan dapat dimainkan dengan pemutar IVS. Jika dikonfigurasi, `latest_thumbnail` subfolder `thumbnails` dan berisi file media thumbnail JPEG yang dihasilkan selama sesi perekaman.

## Gabungkan Rekaman Peserta Individu yang Terfragmentasi
<a name="ind-part-rec-merge-frag"></a>

`recordingReconnectWindowSeconds`Properti pada konfigurasi perekaman memungkinkan Anda menentukan jendela waktu (dalam detik) di mana, jika penerbit panggung terputus dari panggung dan kemudian menyambung kembali, IVS mencoba merekam ke awalan S3 yang sama dengan sesi sebelumnya. Dengan kata lain, jika penerbit terputus dan kemudian menyambung kembali dalam interval yang ditentukan, beberapa rekaman dianggap sebagai rekaman tunggal dan digabungkan bersama.

Jika perekaman thumbnail diaktifkan dalam `SEQUENTIAL` mode, maka thumbnail juga digabungkan di bawah yang sama. `recordingS3Prefix` Saat rekaman digabungkan, penghitung thumbnail dimulai ulang dari nilai thumbnail sebelumnya yang ditulis untuk rekaman sebelumnya.

**Peristiwa Perubahan Status Perekaman IVS di Amazon EventBridge:** Perekaman peristiwa Akhir dan file metadata JSON yang berakhir perekaman ditunda setidaknya`recordingReconnectWindowSeconds`, karena IVS menunggu untuk memastikan aliran baru tidak dimulai.

Untuk petunjuk cara menyiapkan fungsionalitas penggabungan aliran, lihat [Langkah 2: Membuat Tahap dengan Perekaman Peserta Opsional](getting-started-create-stage.md) dalam *Memulai Streaming Waktu Nyata Amazon IVS*.

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

Agar beberapa rekaman digabungkan menggunakan awalan S3 yang sama, kondisi tertentu harus dipenuhi untuk semua rekaman:
+ Nilai `recordingReconnectWindowSeconds` properti AutoParticipantRecordingConfiguration untuk tahap ditetapkan lebih besar dari 0.
+ Yang `StorageConfigurationArn` digunakan untuk menulis artefak VOD adalah sama untuk setiap rekaman.
+ Perbedaan waktu dalam detik antara saat peserta meninggalkan dan bergabung kembali dengan panggung kurang dari atau sama dengan. `recordingReconnectWindowSeconds`

Perhatikan bahwa nilai default `recordingReconnectWindowSeconds` adalah 0, yang menonaktifkan penggabungan.

## Sinkronkan Beberapa Rekaman Peserta
<a name="ind-part-rec-sync-multiple"></a>

Rekaman peserta individu menyertakan `EXT-X-PROGRAM-DATE-TIME` tag dalam daftar putar HLS, yang memberikan stempel waktu UTC yang tepat dengan akurasi milidetik untuk menyinkronkan rekaman dari beberapa peserta selama pasca-pemrosesan.

Saat Anda merekam beberapa peserta satu per satu dan ingin membuat komposisi yang disinkronkan (seperti side-by-side atau picture-in-picture tata letak), Anda dapat menggunakan stempel waktu ini untuk menyelaraskan rekaman secara akurat, bahkan jika peserta bergabung dengan panggung pada waktu yang berbeda atau mengalami diskontinuitas yang berpotensi disebabkan oleh gangguan jaringan.

Daftar putar HLS setiap peserta menyertakan `EXT-X-PROGRAM-DATE-TIME` tag yang menandai:
+ Awal rekaman (segmen pertama).
+ Setiap titik diskontinuitas selama perekaman; misalnya, ketika jahitan terjadi.

Stempel waktu ini menggunakan presisi milidetik dan disinkronkan di semua peserta menggunakan referensi waktu yang sama.

### Contoh Daftar Putar 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`Tag memberikan waktu UTC yang tepat untuk segmen pertama dan pada setiap titik diskontinuitas, memungkinkan sinkronisasi yang tepat dengan rekaman peserta lain.

### Alur Kerja Sinkronisasi
<a name="ind-part-rec-sync-multiple-workflow"></a>

Untuk menyinkronkan beberapa rekaman peserta, ekstrak `EXT-X-PROGRAM-DATE-TIME` stempel waktu dari daftar putar HLS masing-masing peserta dan gunakan untuk menghitung offset waktu. Offset ini kemudian dapat diterapkan selama komposisi pasca-pemrosesan menggunakan alat pemrosesan video seperti. FFmpeg Ketika diskontinuitas hadir dalam rekaman, stempel waktu pada titik-titik tersebut memberikan referensi waktu yang diperlukan untuk mempertahankan sinkronisasi yang akurat di seluruh rekaman.

Catatan: Untuk output yang disinkronkan secara real-time tanpa pasca-pemrosesan, pertimbangkan untuk menggunakan komposisi sisi server alih-alih perekaman peserta individu.

## File Metadata JSON
<a name="ind-part-rec-json-metadata-files"></a>

Metadata ini dalam format JSON. Ini terdiri dari informasi berikut: 


| Bidang | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
| `stage_arn` | string | Ya | ARN panggung digunakan sebagai sumber rekaman. | 
| `session_id` | string | Ya | String mewakili panggung `session_id` di mana peserta direkam. | 
| `participant_id` | string | Ya | String yang mewakili pengidentifikasi peserta yang direkam. | 
| `recording_started_at` | string | Bersyarat | Stempel waktu RFC 3339 UTC saat perekaman dimulai. Ini tidak tersedia kapan`recording_status`. `RECORDING_START_FAILED` Juga, lihat catatan di bawah ini untuk`recording_ended_at`. | 
| `recording_ended_at` | string | Bersyarat | Stempel waktu RFC 3339 UTC saat rekaman berakhir. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. **Catatan:** `recording_started_at` dan `recording_ended_at` merupakan stempel waktu saat peristiwa ini dihasilkan dan mungkin tidak sama persis dengan stempel waktu segmen video HLS. Untuk menentukan durasi rekaman secara akurat, gunakan `duration_ms` bidang. | 
| `recording_status` | string | Ya | Status rekaman. Nilai yang valid:`"RECORDING_STARTED"`,`"RECORDING_ENDED"`,`"RECORDING_START_FAILED"`,`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | string | Bersyarat | Informasi deskriptif tentang status. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `media` | object | Ya | Objek yang berisi objek yang disebutkan dari konten media yang tersedia untuk rekaman ini. Nilai valid: `"hls"`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Ya | Bidang yang disebutkan yang menjelaskan output format Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | integer | Bersyarat | Durasi konten HLS yang direkam dalam milidetik. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. Jika terjadi kegagalan sebelum perekaman dilakukan, ini adalah 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Nama file daftar putar master HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Ya | Array rendisi (varian HLS) objek metadata. Selalu ada setidaknya satu rendisi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Nama file playlist media untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Bersyarat | Bidang enumerasi yang menjelaskan output thumbnail. Ini hanya tersedia jika bidang konfigurasi thumbnail termasuk `storage` `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail berurutan disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Ya | Array rendisi (varian thumbnail) objek metadata. Selalu ada setidaknya satu rendisi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail disimpan untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Bersyarat | Bidang enumerasi yang menjelaskan output thumbnail. Ini hanya tersedia jika `storage` bidang konfigurasi thumbnail disertakan. `LATEST` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat `latest_thumbnail` disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | object | Ya | Array rendisi (varian thumbnail) objek metadata. Selalu ada setidaknya satu rendisi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat thumbnail terbaru disimpan untuk rendisi ini. | 
| `version` | string | Ya | Versi skema metadata. | 

### Contoh: 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"
            }
         ]
      }
   }
}
```

### Contoh: 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"
            }
         ]
      }
   }
}
```

### Contoh: perekaman-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"
            }
         ]
      }
   }
}
```

## Mengonversi Rekaman ke MP4
<a name="ind-part-rec-convert-rec-mp4"></a>

Rekaman peserta individu disimpan dalam format HLS, yang terdiri dari daftar putar dan segmen terfragmentasi MP4 (fMP4). Untuk mengonversi rekaman HLS menjadi satu MP4 file, instal FFmpeg dan jalankan perintah berikut:

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

# Rekaman Komposit IVS \$1 Streaming Waktu Nyata
<a name="rt-composite-recording"></a>

[Dokumen ini menjelaskan cara menggunakan fitur perekaman komposit dalam komposisi sisi server.](server-side-composition.md) Rekaman komposit memungkinkan Anda menghasilkan rekaman HLS dari tahap IVS dengan menggabungkan semua penerbit panggung secara efektif ke dalam satu tampilan menggunakan server IVS, dan kemudian menyimpan video yang dihasilkan ke ember S3.

Biaya penyimpanan dan permintaan S3 standar berlaku. Thumbnail tidak dikenakan biaya IVS tambahan. Untuk detailnya, lihat [Harga Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Prasyarat
<a name="comp-rec-prerequisites"></a>

Untuk menggunakan rekaman komposit, Anda harus memiliki panggung dengan penerbit aktif dan bucket S3 untuk digunakan sebagai tujuan perekaman. Di bawah ini, kami menjelaskan satu kemungkinan alur kerja yang menggunakan EventBridge peristiwa untuk merekam komposisi ke bucket S3. Atau, Anda dapat memulai dan menghentikan komposisi berdasarkan logika aplikasi Anda sendiri.

1. Buat [tahap IVS](getting-started-create-stage.md) dan token peserta untuk setiap penerbit.

1. Buat [EncoderConfiguration](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_CreateEncoderConfiguration.html)(objek yang mewakili bagaimana video yang direkam harus dirender).

1. Buat [ember S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) dan a [StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html)(tempat konten rekaman akan disimpan).

   **Penting**: Jika Anda menggunakan bucket S3 yang sudah ada, setelan **Kepemilikan Objek** harus **diberlakukan oleh pemilik Bucket** atau lebih disukai **pemilik Bucket**. Untuk detailnya, lihat dokumentasi S3 tentang [pengendalian kepemilikan objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).

1. [Bergabunglah dengan panggung dan publikasikan ke sana](getting-started-pub-sub.md).

1. Saat Anda menerima [EventBridge acara](eventbridge.md) Peserta Published, hubungi [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html)dengan DestinationConfiguration objek S3 sebagai tujuan

1. Setelah beberapa detik, Anda akan dapat melihat segmen HLS disimpan ke ember S3 Anda.

![\[Merekam panggung ke bucket S3 menggunakan komposisi sisi server.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Composite_Recording_Workflow.png)


**Catatan:** Komposisi melakukan shutdown otomatis setelah 60 detik tidak aktif dari peserta penerbit di atas panggung. Pada saat itu, komposisi dihentikan dan transisi ke keadaan. `STOPPED` Komposisi secara otomatis dihapus setelah beberapa menit di `STOPPED` negara bagian. Untuk detailnya, lihat [Siklus Hidup Komposisi](ssc-overview.md#ssc-composition-endpoint) dalam Komposisi Sisi *Server*.

## Contoh Perekaman Komposit: StartComposition dengan Tujuan Bucket S3
<a name="comp-rec-example"></a>

Contoh di bawah ini menunjukkan panggilan tipikal ke [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html)operasi, menentukan S3 sebagai satu-satunya tujuan untuk komposisi. Setelah komposisi bertransisi ke `ACTIVE` status, segmen video dan metadata akan mulai ditulis ke bucket S3 yang ditentukan oleh objek. `storageConfiguration` Untuk membuat komposisi dengan layout yang berbeda, lihat “Layouts” di [Server-Side Composition](ssc-overview.md#ssc-api-layouts) dan [IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_LayoutConfiguration.html) Real-Time Streaming API Reference.

### Permintaan
<a name="comp-rec-example-request"></a>

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

{
   "destinations": [
      {
         "s3": {
            "encoderConfigurationArns": [
              "arn:aws:ivs:ap-northeast-1:927810967299:encoder-configuration/PAAwglkRtjge"
            ],
            "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:927810967299:storage-configuration/ZBcEbgbE24Cq",
	    "thumbnailConfigurations": [
	       {
		  "storage": ["LATEST", "SEQUENTIAL"],
		  "targetIntervalSeconds": 30
               }
	    ]
	 }
      }
   ],
   "idempotencyToken": "db1i782f1g9",
   "stageArn": "arn:aws:ivs:ap-northeast-1:927810967299:stage/WyGkzNFGwiwr"
}
```

### Respons
<a name="comp-rec-example-response"></a>

```
{
    "composition": {
        "arn": "arn:aws:ivs:ap-northeast-1:927810967299:composition/s2AdaGUbvQgp",
        "destinations": [
            {
                "configuration": {
                    "name": "",
                    "s3": {
                        "encoderConfigurationArns": [
                            "arn:aws:ivs:ap-northeast-1:927810967299:encoder-configuration/PAAwglkRtjge"
                        ],
                        "recordingConfiguration": {
                            "format": "HLS"
                        },
                        "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:927810967299:storage-configuration/ZBcEbgbE24Cq",
	                "thumbnailConfigurations": [
	                   {
		              "storage": ["LATEST", "SEQUENTIAL"],
		              "targetIntervalSeconds": 30
                           }
	                ]
                    }
                },
                "detail": {
                    "s3": {
                        "recordingPrefix": "MNALAcH9j2EJ/s2AdaGUbvQgp/2pBRKrNgX1ff/composite"
                    }
                },
                "id": "2pBRKrNgX1ff",
                "state": "STARTING"
            }
        ],
        "layout": null,
        "stageArn": "arn:aws:ivs:ap-northeast-1:927810967299:stage/WyGkzNFGwiwr",
        "startTime": "2023-11-01T06:25:37Z",
        "state": "STARTING",
        "tags": {}
    }
}
```

`recordingPrefix`Bidang, yang ada dalam StartComposition respons dapat digunakan untuk menentukan di mana konten rekaman akan disimpan. 

## Isi Rekaman
<a name="comp-rec-contents"></a>

Saat komposisi bertransisi ke `ACTIVE` status, segmen video HLS, file metadata, dan thumbnail (jika dikonfigurasi) akan mulai ditulis ke bucket S3 yang ditentukan selama panggilan berlangsung. StartComposition Konten ini tersedia untuk pasca-pemrosesan atau pemutaran sebagai video sesuai permintaan.

Perhatikan bahwa setelah komposisi menjadi live, peristiwa “Perubahan Status Komposisi IVS” dipancarkan, dan mungkin perlu sedikit waktu sebelum file manifes, segmen video, dan thumbnail ditulis. Kami menyarankan Anda memutar ulang atau memproses streaming yang direkam hanya setelah acara “Perubahan Status Komposisi IVS (Akhir Sesi)” diterima. Untuk detailnya, lihat [Menggunakan EventBridge dengan IVS Real-Time Streaming](eventbridge.md).

Berikut ini adalah struktur direktori sampel dan isi rekaman sesi IVS langsung:

```
MNALAcH9j2EJ/s2AdaGUbvQgp/2pBRKrNgX1ff/composite
   events
      recording-started.json
      recording-ended.json
   media
      hls
      thumbnails
      latest_thumbnail
```

`events`Folder berisi file metadata yang sesuai dengan peristiwa perekaman. File metadata JSON dihasilkan saat perekaman dimulai, berakhir dengan sukses, atau diakhiri dengan kegagalan:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

`events`Folder tertentu akan berisi `recording-started.json` dan salah satu `recording-ended.json` atau`recording-failed.json`.

Ini berisi metadata yang terkait dengan sesi rekaman dan format outputnya. Rincian JSON diberikan di bawah ini.

`media`Folder berisi konten media yang didukung. `hls`Subfolder berisi semua media dan file manifes yang dihasilkan selama sesi komposisi dan dapat dimainkan dengan pemutar IVS. Manifes HLS terletak di `multivariant.m3u8` folder. Jika dikonfigurasi, `latest_thumbnail` subfolder `thumbnails` dan berisi file media thumbnail JPEG yang dihasilkan selama sesi komposisi.

## Kebijakan Bucket untuk StorageConfiguration
<a name="comp-rec-bucket-policy"></a>

Saat StorageConfiguration objek dibuat, IVS akan mendapatkan akses untuk menulis konten ke bucket S3 yang ditentukan. Akses ini diberikan dengan melakukan modifikasi pada kebijakan bucket S3. *Jika kebijakan untuk bucket diubah dengan cara yang menghapus akses IVS, rekaman yang sedang berlangsung dan baru akan gagal.*

Contoh di bawah ini menunjukkan kebijakan bucket S3 yang memungkinkan IVS menulis ke bucket S3:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CompositeWrite-y1d212y",
            "Effect": "Allow",
            "Principal": {
                "Service": "ivs-composite.ap-northeast-1.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "Bool": {
                    "aws:SecureTransport": "true"
                }
            }
        }
    ]
}
```

------

## File Metadata JSON
<a name="comp-rec-json"></a>

Metadata ini dalam format JSON. Ini terdiri dari informasi berikut: 


| Bidang | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
| `stage_arn` | string | Ya | ARN dari panggung yang digunakan sebagai sumber komposisi. | 
| `media` | object | Ya | Objek yang berisi objek yang disebutkan dari konten media yang tersedia untuk rekaman ini. Nilai yang valid:`"hls"`.  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html) | object | Ya | Bidang yang disebutkan yang menjelaskan output format Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | integer | Bersyarat | Durasi konten HLS yang direkam dalam milidetik. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. Jika terjadi kegagalan sebelum perekaman dilakukan, ini adalah 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya |  Nama file daftar putar master HLS.  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | object | Ya | Array rendisi (varian HLS) objek metadata. Selalu ada setidaknya satu rendisi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Nama file playlist media untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Bersyarat | Tinggi resolusi piksel dari video yang dikodekan. Ini hanya tersedia ketika rendisi berisi trek video. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Bersyarat | Lebar resolusi piksel dari video yang dikodekan. Ini hanya tersedia ketika rendisi berisi trek video. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | object | Bersyarat | Bidang enumerasi yang menjelaskan output thumbnail. Ini hanya tersedia jika bidang konfigurasi thumbnail termasuk `storage` `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail berurutan disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | object | Ya | Array resolusi (varian thumbnail) objek metadata. Setidaknya selalu ada satu resolusi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail disimpan untuk resolusi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Ya | Tinggi resolusi piksel dari thumbnail. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Ya | Lebar resolusi piksel dari thumbnail. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | object | Bersyarat | Bidang enumerasi yang menjelaskan output thumbnail. Ini hanya tersedia jika `storage` bidang konfigurasi thumbnail disertakan. `LATEST` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat `latest_thumbnail` disimpan. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | object | Ya | Array resolusi (varian thumbnail) objek metadata. Setidaknya selalu ada satu resolusi. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | string | Ya | Jalur relatif dari awalan S3 tempat thumbnail terbaru disimpan untuk resolusi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Ya | Tinggi resolusi piksel dari thumbnail terbaru. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Ya | Lebar resolusi piksel dari thumbnail terbaru. | 
| `recording_ended_at` | string | Bersyarat | Stempel waktu RFC 3339 UTC saat rekaman berakhir. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. `recording_started_at`dan `recording_ended_at` merupakan stempel waktu saat peristiwa ini dihasilkan dan mungkin tidak sama persis dengan stempel waktu segmen video HLS. Untuk menentukan durasi rekaman secara akurat, gunakan `duration_ms` bidang.  | 
| `recording_started_at` | string | Bersyarat | Stempel waktu RFC 3339 UTC saat perekaman dimulai. Ini tidak tersedia kapan`recording_status`. `RECORDING_START_FAILED` Lihat catatan di atas untuk`recording_ended_at`.  | 
| `recording_status` | string | Ya | Status rekaman. Nilai yang valid:`"RECORDING_STARTED"`,`"RECORDING_ENDED"`,`"RECORDING_START_FAILED"`,`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | string | Bersyarat | Informasi deskriptif tentang status. Ini hanya tersedia jika `recording_status` ada `"RECORDING_ENDED"` atau`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `version` | string | Ya | Versi skema metadata. | 

### Contoh: recording-started.json
<a name="comp-rec-json-ex-rec-start"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-11-01T06:01:36Z",
  "recording_status": "RECORDING_STARTED",
  "media": {
    "hls": {
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

### Contoh: recording-ended.json
<a name="comp-rec-json-ex-rec-end"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-10-27T17:00:44Z",
  "recording_ended_at": "2023-10-27T17:08:24Z",
  "recording_status": "RECORDING_ENDED",
  "media": {
    "hls": {
      "duration_ms": 460315,
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

### Contoh: perekaman-failed.json
<a name="comp-rec-json-ex-rec-fail"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-10-27T17:00:44Z",
  "recording_ended_at": "2023-10-27T17:08:24Z",
  "recording_status": "RECORDING_ENDED_WITH_FAILURE",
  "media": {
    "hls": {
      "duration_ms": 460315,
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

## Pemutaran Konten Rekaman dari Bucket Pribadi
<a name="comp-rec-playback"></a>

Secara default, konten yang direkam bersifat pribadi; karenanya, objek ini tidak dapat diakses untuk pemutaran menggunakan URL S3 langsung. Jika Anda mencoba membuka daftar putar multivariat HLS (file m3u8) untuk pemutaran menggunakan pemutar IVS atau pemutar lain, Anda akan mendapatkan kesalahan (misalnya, “Anda tidak memiliki izin untuk mengakses sumber daya yang diminta”). Sebagai gantinya, Anda dapat memutar kembali file-file ini dengan Amazon CloudFront CDN (Jaringan Pengiriman Konten).

CloudFront distribusi dapat dikonfigurasi untuk menyajikan konten dari bucket pribadi. Biasanya ini lebih disukai daripada memiliki bucket yang dapat diakses secara terbuka di mana pembacaan melewati kontrol yang ditawarkan oleh. CloudFront Anda dapat mengatur distribusi agar dilayani dari bucket pribadi dengan membuat kontrol akses asal (OAC), yang merupakan CloudFront pengguna khusus yang memiliki izin membaca di bucket asal pribadi. Anda dapat membuat OAC setelah membuat distribusi, melalui CloudFront konsol atau API. Lihat [Membuat kontrol akses asal baru](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#create-oac-overview-s3) di *Panduan CloudFront Pengembang Amazon*.

### Menyiapkan Pemutaran menggunakan CloudFront CORS Diaktifkan
<a name="comp-rec-playback-setup"></a>

Contoh ini mencakup bagaimana pengembang dapat mengatur CloudFront distribusi dengan CORS diaktifkan, memungkinkan pemutaran rekaman mereka dari domain apa pun. Ini sangat berguna selama fase pengembangan, tetapi Anda dapat memodifikasi contoh di bawah ini agar sesuai dengan kebutuhan produksi Anda.

#### Langkah 1: Buat Bucket S3
<a name="comp-rec-playback-setup-step1"></a>

Buat bucket S3 yang akan digunakan untuk menyimpan rekaman. Perhatikan bahwa bucket harus berada di wilayah yang sama dengan yang Anda gunakan untuk alur kerja IVS Anda.

Tambahkan kebijakan CORS permisif ke bucket:

1. Di konsol AWS, buka tab **S3 Bucket Permissions**.

1. Salin kebijakan CORS di bawah ini dan tempel di bawah **Cross-origin resource sharing (CORS)**. Ini akan memungkinkan akses CORS pada bucket S3.

   ```
   [
       {
           "AllowedHeaders": [
               "*"
           ],
           "AllowedMethods": [
               "PUT",
               "POST",
               "DELETE",
               "GET"
           ],
           "AllowedOrigins": [
               "*"
           ],
           "ExposeHeaders": [
               "x-amz-server-side-encryption",
               "x-amz-request-id",
               "x-amz-id-2"
           ]
       }
   ]
   ```

#### Langkah 2: Buat CloudFront Distribusi
<a name="comp-rec-playback-setup-step2"></a>

Lihat [Membuat CloudFront distribusi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html) di *Panduan CloudFront Pengembang*.

Menggunakan konsol AWS, masukkan informasi berikut:


| Untuk bidang ini... | Pilih ini... | 
| --- | --- | 
| Domain Asal | Bucket S3 dibuat pada langkah sebelumnya | 
| Akses Asal | Pengaturan kontrol akses asal (disarankan), menggunakan parameter default | 
| Perilaku cache default: Kebijakan Protokol Penampil | Arahkan ulang HTTP ke HTTPS | 
| Perilaku cache default: Metode HTTP yang diizinkan | DAPATKAN, KEPALA, dan OPSI | 
| Perilaku cache default: Kunci cache dan permintaan asal | CachingDisabled kebijakan | 
| Perilaku cache default: Kebijakan permintaan asal | CORS-S3asal | 
| Perilaku cache default: Kebijakan header respons | SimpleCORS | 
| Firewall Aplikasi Web | Aktifkan perlindungan keamanan | 

Kemudian simpan CloudFront distribusinya.

#### Langkah 3: Siapkan Kebijakan Bucket S3
<a name="comp-rec-playback-setup-step3"></a>

1. Hapus semua StorageConfiguration yang telah Anda atur untuk bucket S3. Ini akan menghapus kebijakan bucket apa pun yang ditambahkan secara otomatis saat membuat kebijakan untuk bucket tersebut.

1. Buka CloudFront Distribusi Anda, pastikan semua bidang distribusi berada di status yang ditentukan pada langkah sebelumnya, dan **Salin Kebijakan Bucket** (gunakan tombol **Salin kebijakan**). 

1. Pergi ke ember S3 Anda. Pada tab **Izin**, pilih **Edit Kebijakan Bucket** dan tempel kebijakan bucket yang Anda salin di langkah sebelumnya. Setelah langkah ini, kebijakan bucket harus memiliki CloudFront kebijakan secara eksklusif. 

1. Buat StorageConfiguration, tentukan bucket S3.

Setelah StorageConfiguration dibuat, Anda akan melihat dua item dalam kebijakan bucket S3, satu memungkinkan CloudFront untuk membaca konten dan satu lagi memungkinkan IVS untuk menulis konten. Contoh kebijakan bucket final, with CloudFront dan akses IVS, ditampilkan di [Contoh: Kebijakan Bucket S3 dengan CloudFront dan Akses IVS](#comp-rec-playback-example).

#### Langkah 4: Putar Kembali Rekaman
<a name="comp-rec-playback-setup-step4"></a>

Setelah berhasil mengatur CloudFront distribusi dan memperbarui kebijakan bucket, Anda harus dapat memutar ulang rekaman menggunakan pemutar IVS:

1. Berhasil memulai Komposisi dan pastikan Anda memiliki rekaman yang tersimpan di bucket S3.

1. Setelah mengikuti Langkah 1 hingga Langkah 3 dalam contoh ini, file video harus tersedia untuk dikonsumsi melalui CloudFront URL. CloudFront URL Anda adalah **nama domain Distribusi** pada tab **Detail** di CloudFront konsol Amazon. Seharusnya seperti ini: 

   `a1b23cdef4ghij.cloudfront.net`

1. Untuk memutar video yang direkam melalui CloudFront distribusi, temukan kunci objek untuk `multivariant.m3u8` file Anda di bawah bucket s3. Seharusnya seperti ini:

   `FDew6Szq5iTt/9NIpWJHj0wPT/fjFKbylPb3k4/composite/media/hls/multivariant.m3u8`

1. Tambahkan kunci objek ke akhir CloudFront URL Anda. URL akhir Anda akan menjadi seperti ini:

   `https://a1b23cdef4ghij.cloudfront.net/FDew6Szq5iTt/9NIpWJHj0wPT/fjFKbylPb3k4/composite/media/hls/multivariant.m3u8`

1. Anda sekarang dapat menambahkan URL akhir ke atribut sumber pemutar IVS untuk menonton rekaman lengkap. Untuk menonton video yang direkam, Anda dapat menggunakan demo di [Memulai](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/web-getting-started.html) di *IVS Player SDK: Panduan Web*.

### Contoh: Kebijakan Bucket S3 dengan CloudFront dan Akses IVS
<a name="comp-rec-playback-example"></a>

Cuplikan di bawah ini mengilustrasikan kebijakan bucket S3 yang memungkinkan membaca konten CloudFront ke bucket pribadi dan IVS untuk menulis konten ke bucket. **Catatan: Jangan menyalin dan menempelkan cuplikan di bawah ini ke ember Anda sendiri. Kebijakan Anda harus berisi IDs yang relevan dengan CloudFront distribusi Anda dan StorageConfiguration.**

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CompositeWrite-7eiKaIGkC9DO",
      "Effect": "Allow",
      "Principal": {
        "Service": "ivs-composite.ap-northeast-1.amazonaws.com"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::eicheane-test-1026-2-ivs-recordings/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        },
        "Bool": {
          "aws:SecureTransport": "true"
        }
      }
    },
    {
      "Sid": "AllowCloudFrontServicePrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::eicheane-test-1026-2-ivs-recordings/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::844311324168:distribution/E1NG4YMW5MN25A"
        }
      }
    }
  ]
}
```

------

## Pemecahan masalah
<a name="comp-rec-troubleshooting"></a>
+ **Komposisi tidak ditulis ke bucket S3 — Pastikan bucket** dan StorageConfiguration objek S3 dibuat dan berada di wilayah yang sama. Pastikan juga bahwa IVS memiliki akses ke bucket dengan memeriksa kebijakan bucket Anda; lihat [Kebijakan Bucket untuk StorageConfiguration](#comp-rec-bucket-policy).
+ **Saya tidak dapat menemukan komposisi saat tampil *ListCompositions*—** Komposisi adalah sumber daya fana. Setelah mereka beralih ke keadaan akhir, mereka dihapus secara otomatis setelah beberapa menit.
+ **Komposisi saya berhenti secara otomatis —** Komposisi akan berhenti secara otomatis jika tidak ada penerbit di atas panggung selama lebih dari 60 detik.

## Masalah yang Diketahui
<a name="comp-rec-issues"></a>

Daftar putar media yang ditulis oleh rekaman komposit memiliki tag `#EXT-X-PLAYLIST-TYPE:EVENT` saat komposisi sedang berlangsung. Ketika komposisi selesai, tag diperbarui ke`#EXT-X-PLAYLIST-TYPE:VOD`. Untuk pengalaman pemutaran yang lancar, kami sarankan Anda menggunakan daftar putar ini hanya setelah komposisi berhasil diselesaikan.