

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

# Rekam Otomatis IVS ke Amazon S3 \$1 Streaming Latensi Rendah
<a name="record-to-s3"></a>

Bagian ini memberikan informasi tentang auto-record-to-S 3 fitur streaming latensi rendah Amazon IVS. Kami membahas penyimpanan data untuk streaming Amazon IVS yang direkam. Kami menjelaskan konten penyimpanan dan skema file metadata. Kami juga membahas pemutaran konten rekaman Anda.


| Untuk detail tentang... | Lihat... | 
| --- | --- | 
| Menyiapkan dan menghentikan perekaman video |   [Buat Saluran dengan Perekaman Opsional](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/getting-started-create-channel.html) dalam *Memulai Amazon IVS* | 
| API |  [Referensi API IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html) | 
| Biaya |  [Biaya Amazon IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/costs.html) | 

## Awalan S3
<a name="r2s3-prefix"></a>

Awalan S3 adalah struktur direktori unik untuk setiap live stream yang direkam. Semua file media dan metadata untuk streaming langsung ditulis dalam direktori ini. Untuk saluran dengan perekaman diaktifkan, awalan S3 dihasilkan ketika sesi langsung dimulai dan akan disediakan dalam CloudWatch acara di awal dan akhir rekaman.

Awalan S3 memiliki format berikut:

```
/ivs/v1/<aws_account_id>/<channel_id>/<year>/<month>/<day>/<hours>/<minutes>/<recording_id>
```

Di mana:
+ `aws_account_id`adalah ID akun AWS Anda (dibuat saat Anda membuat akun AWS), dari mana saluran dibuat.
+ `channel_id`adalah bagian ID sumber daya dari saluran ARN (bagian terakhir dari Nama Sumber Daya Amazon). Lihat ARN di. [Glosarium](ivs-glossary.md)
+ `<year>/<month>/<day>/<hours>/<minutes>`adalah stempel waktu UTC saat perekaman dimulai.
+ `recording_id`adalah ID unik yang dihasilkan untuk setiap sesi perekaman.

Contoh:

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs
```

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

Saat perekaman dimulai, segmen video dan file metadata ditulis ke bucket S3 yang dikonfigurasi untuk saluran. Konten ini tersedia untuk pasca-pemrosesan atau pemutaran sebagai video sesuai permintaan.

Perhatikan bahwa setelah streaming langsung dimulai dan EventBridge acara Mulai Perekaman dipancarkan, dibutuhkan sedikit waktu sebelum file manifes dan segmen video ditulis. Kami menyarankan Anda memutar ulang atau memproses streaming yang direkam hanya setelah acara Akhir Perekaman dikirim. (Lihat [Menggunakan Amazon EventBridge dengan IVS](eventbridge.md)).

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

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs/
   events
      recording-started.json
      recording-ended.json
   media
      hls
      thumbnails
```

`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 yang diberikan 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 semua konten media yang didukung, dalam dua subfolder:
+ `hls`berisi semua media dan file manifes yang dihasilkan selama sesi langsung dan dapat dimainkan dengan pemutar Amazon IVS. Ada dua jenis manifes HLS dalam folder ini, manifes master standar `master.m3u8` dan manifes yang diaktifkan rentang byte. `byte-range-multivariant.m3u8` Oleh karena itu, setiap folder rendisi memiliki keduanya `playlist.m3u8` dan file. `byte-range-variant.m3u8` (Lihat Daftar [Putar Byte-Range](#r2s3-byte-range-playlists) di bawah.)
+ `thumbnails`berisi gambar thumbnail yang dihasilkan selama sesi langsung. Thumbnail dibuat dan ditulis ke bucket setiap menit. (Untuk mengubah perilaku ini, ganti `thumbnailConfiguration` properti pada konfigurasi perekaman.)

**Penting:** Konten dalam `media` folder dihasilkan secara dinamis dan ditentukan oleh karakteristik segmen video pertama yang diterima; konten folder mungkin tidak mewakili karakteristik utama (misalnya, kualitas rendisi). *Jangan membuat asumsi tentang jalur statis.* Untuk menemukan rendisi HLS yang tersedia dan jalurnya, gunakan file metadata JSON yang dijelaskan di bawah ini.

## Daftar Putar Byte-Range
<a name="r2s3-byte-range-playlists"></a>

Fitur auto-record-to-S 3 mendukung pembuatan [daftar putar rentang byte, selain daftar putar](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.2) HLS standar. Daftar putar rentang byte sesuai dengan versi 4 dari spesifikasi HLS. Hal ini memungkinkan kliping konten yang lebih halus: dalam daftar putar rentang byte, setiap segmen dalam file indeks rendisi mereferensikan subrange byte dari potongan video, memberikan perincian lebih dari ukuran file media 10 detik standar. Dengan daftar putar rentang byte, durasi segmen sama dengan interval keyframe yang dikonfigurasi untuk streaming.

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

`thumbnailConfiguration`Properti pada konfigurasi perekaman memungkinkan Anda untuk mengaktifkan atau menonaktifkan perekaman thumbnail untuk sesi langsung dan memodifikasi interval di mana thumbnail dihasilkan untuk sesi langsung. Interval thumbnail dapat berkisar dari 1 detik hingga 60 detik; secara default, perekaman thumbnail diaktifkan, pada interval 60 detik. Untuk detailnya, lihat Referensi API [Streaming Latensi Rendah Amazon IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html).

Konfigurasi thumbnail juga dapat mencakup `storage` field (`SEQUENTIAL` and/or `LATEST`) dan resolusi (`LOWEST_RESOLUTION`,, `SD``HD`, atau`FULL_HD`). Di bawah ini adalah resolusi untuk setiap opsi: 

160 <= `LOWEST_RESOLUTION` <= 360

360 < `SD` <= 480

480 < `HD` <= 720

720 < `FULL_HD` <= 1080

Jika tidak `resolution` disetel untuk aliran yang menggunakan input video multitrack, thumbnail dari semua rendisi akan direkam. Untuk informasi tentang multitrack, lihat Video [Multitrack](multitrack-video.md).

## Gabungkan Aliran Terfragmentasi
<a name="r2s3-merge-fragmented-streams"></a>

`recordingReconnectWindowSeconds`Properti pada konfigurasi perekaman memungkinkan Anda menentukan jendela waktu (dalam detik) di mana, jika aliran Anda terganggu dan aliran baru dimulai, Amazon IVS mencoba merekam ke awalan S3 yang sama dengan aliran sebelumnya. Dengan kata lain, jika siaran terputus dan kemudian terhubung kembali dalam interval yang ditentukan, beberapa aliran dianggap sebagai siaran tunggal dan digabungkan bersama.

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

Untuk petunjuk cara menyiapkan fungsionalitas penggabungan aliran, lihat [Langkah 4: Buat Saluran dengan Rekaman Opsional](getting-started-create-channel.md) di *Memulai Amazon IVS*.

### Kelayakan
<a name="r2s3-merge-fragmented-streams-eligibility"></a>

Agar beberapa aliran merekam ke awalan S3 yang sama, kondisi tertentu harus dipenuhi untuk semua aliran: 
+ Lebar dan tinggi video harus sama.
+ Frame rate harus sama.
+ Perbedaan bitrate dari aliran berikutnya harus kurang dari atau sama dengan 50% dari bitrate dari aliran asli.
+ Codec video dan audio harus sama.

**Catatan:**
+ Paling banyak 20 aliran digabungkan, setelah itu awalan S3 baru dibuat.
+ Setelah 48 jam, awalan S3 baru dibuat. Misalnya, jika siaran pertama berlangsung selama 48 jam dan siaran lain dimulai dalam `recordingReconnectWindowSeconds` interval, siaran berikutnya *tidak* digabungkan ke awalan S3 pertama.
+ Penyambungan kembali cepat dapat menghasilkan siaran baru yang dimulai sebelum siaran sebelumnya selesai ditulis ke S3, dalam hal ini siaran baru *tidak* digabungkan ke awalan S3 sebelumnya. (Biasanya, menulis ke S3 selesai dalam 10 detik setelah siaran berakhir.) Penyambungan kembali cepat dapat terjadi dalam beberapa skenario, termasuk: 1) background/foreground transisi aplikasi seluler cepat, 2) ketika pengambilalihan aliran tidak dimungkinkan saat menggunakan fitur sambung ulang otomatis siaran seluler IVS SDKs, dan 3) saat memanggil [StopStream](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/API_StopStream.html)memicu sambungan ulang otomatis dari perangkat lunak klien streaming.

### Masalah yang Diketahui
<a name="r2s3-merge-fragmented-streams-known-issue"></a>

Jika `recordingReconnectWindowSeconds` diaktifkan dan Web Broadcast SDK digunakan, perekaman ke awalan S3 yang sama mungkin tidak berfungsi, karena Web Broadcast SDK secara dinamis mengubah bitrate dan kualitas.

## File Metadata JSON
<a name="r2s3-json-metadata"></a>

Saat peristiwa perubahan status perekaman terjadi, CloudWatch metrik Amazon yang sesuai dibuat dan file metadata ditulis dalam awalan S3. (Lihat [Memantau Streaming Latensi Rendah Amazon IVS](stream-health.md).)

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


| Bidang | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
| `channel_arn` | string | Ya | ARN dari saluran yang menyiarkan siaran langsung. | 
| `media` | object | Ya | Objek yang berisi objek yang disebutkan dari konten media yang tersedia untuk rekaman ini. Nilai-nilai yang valid: `"hls"`, `"thumbnails"`. | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | string | Ya | Nama daftar putar multivarian rentang byte HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | string | Ya | Nama daftar putar byte-range untuk rendisi ini. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | object | Bersyarat | Bidang enumerasi yang menjelaskan output thumbnail. Ini hanya tersedia ketika konfigurasi thumbnail. `recordingMode` `INTERVAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | string | Bersyarat | Jalur relatif dari awalan S3 tempat konten thumbnail disimpan. Ini hanya tersedia ketika konfigurasi thumbnail. `recordingMode` `INTERVAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ya | Ketinggian thumbnail. Default: resolusi rendisi sumber. Nilai ini dipengaruhi oleh input pengguna dalam konfigurasi perekaman terkait; khususnya, `thumbnailConfiguration.resolution ` nilainya. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ya | Lebar thumbnail. Default: resolusi rendisi sumber. Nilai ini dipengaruhi oleh input pengguna dalam konfigurasi perekaman terkait; khususnya, `thumbnailConfiguration.resolution` nilainya. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | object | Ya | Bidang enumerasi yang menjelaskan keluaran thumbnail terbaru. Ini hanya tersedia jika konfigurasi thumbnail disertakan. `storage` `LATEST` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ya | Ketinggian thumbnail. Default akan menjadi resolusi rendisi sumber. Nilai ini dipengaruhi oleh input pengguna dalam konfigurasi perekaman terkait; khususnya, `thumbnailConfiguration.resolution` nilainya. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ya | Lebar thumbnail. Default akan menjadi resolusi rendisi sumber. Nilai ini dipengaruhi oleh input pengguna dalam konfigurasi perekaman terkait; khususnya, `thumbnailConfiguration.resolution` nilainya. | 
| `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 | Ya | Stempel waktu RFC 3339 UTC saat perekaman dimulai. Lihat catatan di atas untuk`recording_ended_at`.  | 
| `recording_status` | string | Ya | Status rekaman. Nilai-nilai yang valid: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"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\$1started.json
<a name="r2s3-json-metadata-recording-started"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status : "RECORDING_STARTED",
   "media": {
      "hls": {
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Contoh: recording\$1ended.json
<a name="r2s3-json-metadata-recording-ended"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Contoh: recording\$1failed.json
<a name="r2s3-json-metadata-recording-failed"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED_WITH_FAILURE",
   "recording_status_message": "InternalServerException",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

## Menemukan Rendisi Rekaman
<a name="r2s3-recording-renditions"></a>

Saat Anda melakukan streaming konten ke saluran Amazon IVS, auto-record-to-s 3 menggunakan video sumber untuk menghasilkan beberapa rendisi. Menggunakan [Adaptive Bitrate Streaming](player.md) (ABR), Amazon IVS Player secara otomatis mengalihkan rendisi (bitrate) sesuai kebutuhan untuk mengoptimalkan pemutaran untuk berbagai kondisi jaringan.

Setiap rendisi yang dihasilkan selama streaming langsung direkam dalam jalur unik dalam awalan perekaman S3. Detail resolusi, jalur, dan nama file daftar putar disimpan dalam [file metadata JSON](#r2s3-json-metadata) selama awal dan penghentian perekaman. Jika `renditionSelection` nilai konfigurasi perekaman`ALL`, semua rendisi dipilih untuk direkam. Jika `renditionSelection` ya`CUSTOM`, pengguna harus memilih satu atau beberapa opsi berikut:`LOWEST_RESOLUTION`,, `SD``HD`, dan FULL\$1HD. Di bawah ini adalah resolusi untuk setiap opsi:

160 <= `LOWEST_RESOLUTION` <= 360

360 < `SD` <= 480

480 < `HD` <= 720

720 < `FULL_HD` <= 1080

**Penting:** *Jangan* membuat asumsi apa pun tentang jalur rendisi statis atau daftar rendisi yang dihasilkan, karena ini dapat berubah. *Jangan* berasumsi bahwa rendisi tertentu akan selalu tersedia untuk rekaman Amazon IVS. Untuk menentukan rendisi, resolusi, dan jalur yang tersedia, lihat file metadata.

`event/recording_ended.json`File `event/recording_started.json` atau dalam awalan perekaman berisi jalur dan nama file media dalam awalan perekaman. Semua `path` elemen relatif terhadap jalur sebelumnya dalam hierarki. Elemen di bawah `media > hls` menggambarkan aset HLS, dengan nama daftar putar master dan jalur yang ditentukan pada level ini.

Berikut adalah cuplikan kode Python yang menunjukkan cara membuat jalur daftar putar master menggunakan awalan perekaman S3 dan file metadata:

```
def get_master_playlist(metadata_json, s3_recording_prefix):
   return s3_recording_prefix + '/' + metadata_json['media']['hls']['path'] + '/' + metadata_json['media']['hls']['playlist']
```

Elemen di bawah `media > hls > renditions` menggambarkan daftar rendisi yang direkam. `resolution_width`Properti `resolution_height` dan dapat digunakan untuk mengidentifikasi resolusi video. `playlist`Elemen `path` dan dapat digunakan untuk menurunkan jalur daftar putar rendisi. Gunakan bidang ini untuk menentukan rendisi mana yang akan digunakan untuk pemrosesan pos apa pun.

Untuk menemukan daftar putar rendisi tertinggi yang tersedia untuk rekaman, Anda dapat berlangganan acara “Perubahan Status Rekaman IVS”. EventBridge (Lihat [Menggunakan Amazon EventBridge dengan IVS](eventbridge.md)). Di bawah ini adalah contoh skrip Python yang menggambarkan penggunaan fungsi lambda berlangganan peristiwa tersebut.

```
import json
import boto3
s3 = boto3.resource('s3')

def get_highest_rendition_playlist(bucket_name, prefix_name):
   object_path = "{}/events/recording-started.json".format(prefix_name)
   object = s3.Object(bucket_name, object_path)
   body = str(object.get()['Body'].read().decode('utf-8'))
   metadata = json.loads(body)
   media_path = metadata["media"]["hls"]["path"]
   renditions = metadata["media"]["hls"]["renditions"]

   highest_rendition = None
   highest_rendition_size = 0

   for rendition in renditions:
       current_rendition_size = rendition["resolution_height"]
       if (current_rendition_size > highest_rendition_size):
           highest_rendition_size = current_rendition_size
           highest_rendition = rendition

   highest_rendition_playlist = media_path + '/' + highest_rendition['path'] + '/' + highest_rendition['playlist']
   return highest_rendition_playlist


def lambda_handler(event, context):
   prefix_name = event["detail"]["recording_s3_key_prefix"]
   bucket_name = event["detail"]["recording_s3_bucket_name"]
   rendition_playlist = get_highest_rendition_playlist(bucket_name, prefix_name)
   print("Highest rendition playlist: {}/{}".format(prefix_name, rendition_playlist))

   return {
       'statusCode': 200,
       'body': rendition_playlist
   }
```

## Pemutaran Konten Rekaman dari Bucket Pribadi
<a name="r2s3-private-bucket-playback"></a>

Objek yang direkam dengan fitur Rekam Otomatis ke Amazon S3 bersifat pribadi secara default; karenanya, objek ini tidak dapat diakses untuk pemutaran menggunakan URL S3 langsung. Jika Anda mencoba membuka manifes master HLS (file m3u8) untuk pemutaran menggunakan pemutar Amazon 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 Amazon
<a name="r2s3-cdn-oai"></a>

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 Distribusi Anda dapat diatur ke layanan 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).

### Pemutaran dari Amazon CloudFront
<a name="r2s3-cdn-playback"></a>

Setelah Anda mengatur distribusi menggunakan OAC untuk mendapatkan akses ke bucket pribadi Anda, file video Anda harus tersedia untuk dikonsumsi melalui CloudFront URL. CloudFront URL Anda adalah **nama domain Distribusi** pada tab **Detail** di CloudFront konsol AWS. Seharusnya seperti ini:

a1b23cdef4ghij.cloudfront.net.

Untuk melakukan streaming video yang direkam melalui distribusi, temukan kunci objek untuk `master.m3u8` file Anda. Seharusnya seperti ini:

```
ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

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

```
https://a1b23cdef4ghij.cloudfront.net/ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

Untuk memutar kembali dari browser web, pastikan untuk mengonfigurasi CORS di bucket keduanya CloudFront dan S3. Untuk CloudFront konfigurasi, ikuti petunjuk dalam [Membuat kebijakan permintaan asal untuk melampirkan kebijakan permintaan](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) **CORS-S3 Origin** dan kebijakan header respons **SimpleCORS** ke distribusi. CloudFront Lihat contoh halaman konsol konfigurasi di bawah ini:

![\[Contoh halaman konsol konfigurasi. Sebaiknya gunakan kebijakan cache dan kebijakan permintaan asal untuk mengontrol kunci cache dan permintaan asal.\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/images/CORS_Configuration.png)


Untuk konfigurasi S3 CORS, lihat konfigurasi [CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html) untuk membuat aturan yang sesuai untuk bucket S3 Anda.

Sekarang Anda dapat memutar video yang direkam seolah-olah Anda sedang bermain langsung dari ember.

Untuk informasi selengkapnya, lihat [Membatasi akses ke asal Amazon S3](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html).