View a markdown version of this page

Rekaman Komposit IVS | Streaming Real-Time - Amazon IVS

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

Rekaman Komposit IVS | Streaming Real-Time

Dokumen ini menjelaskan cara menggunakan fitur perekaman komposit dalam komposisi sisi server. Rekaman komposit memungkinkan Anda menghasilkan rekaman HLS dari tahap IVS dengan secara efektif menggabungkan semua penerbit panggung menjadi satu tampilan menggunakan server IVS, dan kemudian menyimpan video yang dihasilkan ke bucket S3.

Biaya penyimpanan dan permintaan S3 standar berlaku. Thumbnail tidak dikenakan biaya IVS tambahan. Untuk detailnya, lihat Harga Amazon IVS.

Prasyarat

Untuk menggunakan perekaman 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 panggung IVS dan token peserta untuk setiap penerbit.

  2. Buat EncoderConfiguration (objek yang mewakili bagaimana video yang direkam harus dirender).

  3. Buat bucket S3 dan StorageConfiguration (tempat konten rekaman akan disimpan).

    Penting: Jika Anda menggunakan bucket S3 yang ada, setelan Kepemilikan Ob jek harus diberlakukan pemilik Bucket atau lebih disukai pemilik Bucket. Untuk detailnya, lihat dokumentasi S3 tentang mengendalikan kepemilikan objek.

  4. Bergabunglah dengan panggung dan terbitkan ke sana.

  5. Saat Anda menerima EventBridge acara yang Dipublikasikan Peserta, StartComposition panggil dengan DestinationConfiguration objek S3 sebagai tujuan

  6. Setelah beberapa detik, Anda akan dapat melihat segmen HLS yang disimpan ke bucket S3 Anda.

Merekam panggung ke bucket S3 menggunakan komposisi sisi server.

Catatan: Kom posisi melakukan penutupan otomatis setelah 60 detik tidak aktif dari peserta penerbit di atas panggung. Pada titik itu, komposisi dihentikan dan transisi ke suatu STOPPED keadaan. Komposisi dihapus secara otomatis setelah beberapa menit di STOPPED negara bagian. Untuk detailnya, lihat Siklus Hidup Kom Server-Side posisi dalam Komposisi.

Contoh Perekaman Komposit: StartComposition dengan Tujuan Bucket S3

Contoh di bawah ini menunjukkan panggilan tipikal ke StartComposition 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 storageConfiguration objek. Untuk membuat komposisi dengan tata letak yang berbeda, lihat “Tata Letak” di Server-Side Komposisi dan Refer ensi API Real-Time Streaming IVS.

Permintaan

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

{ "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": {} } }

Bid recordingPrefix ang, hadir dalam StartComposition respons dapat digunakan untuk menentukan di mana konten rekaman akan disimpan.

Isi Rekaman

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

Perhatikan bahwa setelah komposisi menjadi live, acara “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 peristiwa “Perubahan Status Komposisi IVS (Akhir Sesi)” diterima. Untuk detailnya, lihat Menggunakan EventBridge dengan IVS Real-Time Streaming.

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

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

F events older berisi file metadata yang sesuai dengan peristiwa perekaman. File metadata JSON dihasilkan saat perekaman dimulai, berakhir dengan sukses, atau berakhir dengan kegagalan:

  • events/recording-started.json

  • events/recording-ended.json

  • events/recording-failed.json

F events older yang diberikan akan berisi recording-started.json dan recording-ended.json ataurecording-failed.json.

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

F media older berisi konten media yang didukung. hlsSubfolder 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

Ketika sebuah StorageConfiguration objek dibuat, IVS akan mendapatkan akses untuk menulis konten ke bucket S3 yang ditentukan. Akses ini diberikan dengan membuat modifikasi pada kebijakan bucket S3. Jika kebijakan untuk bucket diubah dengan cara yang menghapus akses IVS, rekaman yang sedang berlangsung dan yang 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

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

Bidang Tipe Diperlukan Deskripsi

stage_arn

string Ya ARN 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".

  • hls

object Ya

Bidang yang disebutkan yang menjelaskan output format Apple HLS.

    • duration_ms

integer Bersyarat

Durasi konten HLS yang direkam dalam milidetik. Ini hanya tersedia ketika recording_status ada "RECORDING_ENDED" atau"RECORDING_ENDED_WITH_FAILURE". Jika kegagalan terjadi sebelum perekaman dilakukan, ini adalah 0.

    • path

string Ya

Jalur relatif dari awalan S3 tempat konten HLS disimpan.

    • playlist

string Ya

Nama file daftar putar master HLS.

    • renditions

object Ya

Array rendering (varian HLS) objek metadata. Selalu ada setidaknya satu rendisi.

      • path

string Ya

Jalur relatif dari awalan S3 tempat konten HLS disimpan untuk rendisi ini.

      • playlist

string Ya

Nama file playlist media untuk rendisi ini.

      • resolution_height

int Bersyarat

Tinggi resolusi piksel dari video yang dikodekan. Ini hanya tersedia jika rendisi berisi trek video.

      • resolution_width

int Bersyarat

Lebar resolusi piksel dari video yang dikodekan. Ini hanya tersedia jika rendisi berisi trek video.

  • thumbnails

object Bersyarat

Bidang yang disebutkan yang menjelaskan output thumbnail. Ini hanya tersedia jika storage bidang konfigurasi thumbnail termasuk SEQUENTIAL

    • path

string Ya

Jalur relatif dari awalan S3 tempat konten thumbnail berurutan disimpan.

    • resolutions

object Ya

Array resolusi (varian thumbnail) objek metadata. Selalu ada setidaknya satu resolusi.

      • path

string Ya

Jalur relatif dari awalan S3 tempat konten thumbnail disimpan untuk resolusi ini.

      • resolution_height

int Ya

Tinggi resolusi piksel dari thumbnail.

      • resolution_width

int Ya

Lebar resolusi piksel dari thumbnail.

  • latest_thumbnail

object Bersyarat

Bidang yang disebutkan yang menjelaskan output thumbnail. Ini hanya tersedia jika storage bidang konfigurasi thumbnail disertakanLATEST.

    • path

string Ya

Jalur relatif dari awalan S3 tempat latest_thumbnail disimpan.

    • resolutions

object Ya

Array resolusi (varian thumbnail) objek metadata. Selalu ada setidaknya satu resolusi.

      • path

string Ya

Jalur relatif dari awalan S3 tempat thumbnail terbaru disimpan untuk resolusi ini.

      • resolution_height

int Ya

Tinggi resolusi piksel dari thumbnail terbaru.

      • resolution_width

int Ya

Lebar resolusi piksel dari thumbnail terbaru.

recording_ended_at

string Bersyarat

Stempel waktu RFC 3339 UTC saat rekaman berakhir. Ini hanya tersedia ketika recording_status ada "RECORDING_ENDED" atau"RECORDING_ENDED_WITH_FAILURE".

recording_started_atdan recording_ended_at merupakan cap waktu ketika peristiwa ini dihasilkan dan mungkin tidak persis sama dengan cap 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 recording_status tersedia kapanRECORDING_START_FAILED.

Lihat catatan di atas untukrecording_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 ketika recording_status ada "RECORDING_ENDED" atau"RECORDING_ENDED_WITH_FAILURE".

version

string Ya

Versi skema metadata.

Contoh: recording-started.json

{ "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

{ "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: recording-failed.json

{ "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

Secara default, konten yang direkam bersifat pribadi; oleh karena itu, 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 (Content Delivery Network).

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 Anda untuk dilayani dari bucket pribadi dengan membuat kontrol akses asal (OAC), yang merupakan CloudFront pengguna khusus yang memiliki izin baca pada bucket asal pribadi. Anda dapat membuat OAC setelah Anda membuat distribusi, melalui CloudFront konsol atau API. Lihat Membuat kontrol akses asal baru di Panduan CloudFront Pengembang Amazon.

Menyiapkan Pemutaran menggunakan CloudFront dengan CORS Diaktifkan

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

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

Tambahkan kebijakan CORS permisif ke bucket:

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

  2. Salin kebijakan CORS di bawah ini dan tempel di bawah berbagi Cross-origin sumber daya (CORS). Ini akan mengaktifkan 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 Distri CloudFront busi

Lihat Membuat CloudFront distribusi di Panduan Peng CloudFront embang.

Menggunakan konsol AWS, masukkan informasi berikut:

Untuk bidang ini... Pilih ini...
Domain Asal Bucket S3 yang 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 GET, HEAD dan OPTIONS
Perilaku cache default: Kunci cache dan permintaan asal CachingDisabled kebijakan
Perilaku cache default: Kebijakan permintaan asal CORS-S3Origin
Perilaku cache default: Kebijakan header respons SimpleCors
Firewall Aplikasi Web Aktifkan perlindungan keamanan

Kemudian simpan CloudFront distribusinya.

Langkah 3: Mengatur Kebijakan S3 Bucket

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

  2. Buka Distri CloudFront busi Anda, pastikan semua bidang distribusi berada dalam status yang ditentukan pada langkah sebelumnya, dan Sal in Kebijakan Bucket (gunakan tombol Kebijakan Salin).

  3. Buka bucket S3 Anda. Pada tab Izin, pilih Edit Bucket Policy dan tempel kebijakan bucket yang Anda salin pada langkah sebelumnya. Setelah langkah ini, kebijakan bucket harus memiliki CloudFront kebijakan secara eksklusif.

  4. 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 akhir, dengan CloudFront dan akses IVS, ditampilkan dalam Contoh: Kebijakan Bucket S3 dengan CloudFront dan Akses IVS.

Langkah 4: Putar Kembali Rekaman

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 disimpan di bucket S3.

  2. 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 Distri busi pada tab Detail di CloudFront konsol Amazon. Seharusnya seperti ini:

    a1b23cdef4ghij.cloudfront.net

  3. 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

  4. 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

  5. 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 di IVS Player SDK: Panduan Web.

Contoh: Kebijakan Bucket S3 dengan CloudFront dan Akses IVS

Cuplikan di bawah ini menggambarkan kebijakan bucket S3 yang memungkinkan CloudFront untuk membaca konten ke bucket pribadi dan IVS untuk menulis konten ke bucket. Catatan: Jangan menyalin dan menempelkan cuplikan di bawah ini ke bucket Anda sendiri. Kebijakan Anda harus berisi ID 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

  • Komposisi tidak ditulis ke bucket S3 - Pastikan bucket S3 dan StorageConfiguration objek dibuat dan di wilayah yang sama. Juga pastikan bahwa IVS memiliki akses ke bucket dengan memeriksa kebijakan bucket Anda; lihat Kebijakan Bucket untuk StorageConfiguration.

  • Saya tidak dapat menemukan komposisi saat tampil ListCompositions Komposisi adalah sumber sementara. 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

Daftar putar media yang ditulis oleh rekaman komposit memiliki #EXT-X-PLAYLIST-TYPE:EVENT tag 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 selesai dengan sukses.