Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Rekaman Peserta Individu IVS | Streaming Real-Time
Dokumen ini menjelaskan cara menggunakan perekaman 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.
Pengantar
Perekaman peserta individu memungkinkan pelanggan streaming real-time IVS merekam penerbit panggung IVS secara individual ke dalam bucket S3. Ketika perekaman peserta individual diaktifkan untuk panggung, konten penerbit direkam setelah mereka mulai menerbitkan ke panggung.
Catatan: Jika Anda perlu menggabungkan semua peserta panggung dalam satu video, fitur perekaman komposit lebih cocok. Lihat Mer ekam untuk ringkasan perekaman konten streaming real-time IVS.
Alur kerja
1. Buat Bucket S3
Anda akan membutuhkan bucket S3 untuk menulis VOD. Untuk detailnya, lihat dokumentasi S3 tentang cara membuat bucket. Perhatikan bahwa untuk perekaman peserta individual, bucket S3 harus dibuat di wilayah AWS yang sama dengan tahap IVS.
Penting: Jika Anda menggunakan bucket S3 yang ada:
-
Setelan Kepemilikan Objek harus diberlakukan pemilik Buc ket atau lebih disukai pemilik Bucket.
-
Set elan Enkripsi Default harus berupa Server-side enkripsi dengan kunci terkelola Amazon S3 (SSE-S3).
Untuk detailnya, lihat dokumentasi S3 tentang mengendalikan kepemilikan objek dan melindungi data dengan enkripsi.
2. Buat Ob StorageConfiguration jek
Setelah membuat bucket, panggil API streaming real-time IVS untuk membuat StorageConfiguration 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
Sekarang Anda perlu membuat tahap IVS dengan perekaman 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
Bagikan token peserta ke penerbit Anda, dan minta mereka bergabung dengan panggung dan mulai menerbitkannya.
Ketika mereka bergabung dengan panggung dan mulai menerbitkannya menggunakan salah satu SDK siaran streaming real-time IVS, proses perekaman peserta dimulai secara otomatis dan mengirimi Anda EventBridge acara yang menunjukkan bahwa perekaman dimulai. (Acara ini adalah Perubahan Status Perekaman Peserta IVS - Mulai Perekaman.) Bersamaan dengan itu, proses perekaman peserta mulai menulis VOD dan file metadata ke bucket S3 yang dikonfigurasi. Catatan: Peserta yang terhubung untuk durasi yang sangat singkat (kurang dari 5 detik) 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 API — Respons menyertakan bucket S3 dan awalan ke 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 jawabannya:
Content-type: application/json { "participant": { ... "recordingS3BucketName": "ivs-recordings", "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>", "recordingState": "ACTIVE", ... } }
5. Putar Kembali VOD
Setelah rekaman selesai, Anda dapat menontonnya menggunakan pemutar IVS.
Audio-Only Rekaman
Saat menyiapkan perekaman peserta individu, Anda dapat memilih untuk hanya memiliki segmen audio HLS 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" } ] }
Thumbnail-Only Rekaman
Saat menyiapkan rekaman peserta individual, Anda dapat memilih untuk hanya menulis thumbnail 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
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, peristiwa Perubahan Status Perekaman Peserta IVS - Akhir Perekaman dikirim melalui. EventBridge Kami menyarankan Anda memutar ulang atau memproses streaming yang direkam hanya setelah acara ini diterima. Untuk detailnya, lihat Menggunakan EventBridge dengan IVS Real-Time Streaming.
Berikut ini adalah contoh struktur direktori 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
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 tertentu 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 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
Pro recordingReconnectWindowSeconds perti pada konfigurasi perekaman memungkinkan Anda untuk menentukan jendela waktu (dalam detik) di mana, jika penerbit panggung memutuskan sambungan dari panggung dan kemudian menyambung kembali, IVS mencoba merekam ke awalan S3 yang sama seperti sesi sebelumnya. Dengan kata lain, jika penerbit memutuskan sambungan 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: Peristiwa Akhir Perekaman dan file metadata JSON yang berakhir perekaman ditunda setidaknyarecordingReconnectWindowSeconds, karena IVS menunggu untuk memastikan aliran baru tidak dimulai.
Untuk petunjuk tentang cara mengatur fungsionalitas merge-stream, lihat Langkah 2: Membuat Panggung dengan Rekaman Peserta Opsional di Mem ulai dengan Amazon IV Real-Time S Streaming.
Kelayakan
Agar beberapa rekaman digabungkan menggunakan awalan S3 yang sama, kondisi tertentu harus dipenuhi untuk semua rekaman:
-
Nilai
recordingReconnectWindowSecondsproperti AutoParticipantRecordingConfiguration untuk panggung diatur lebih besar dari 0. -
Yang
StorageConfigurationArndigunakan untuk menulis artefak VOD adalah sama untuk setiap rekaman. -
Perbedaan waktu dalam detik antara saat peserta meninggalkan dan kembali ke panggung kurang dari atau sama dengan
recordingReconnectWindowSeconds.
Perhatikan bahwa nilai default recordingReconnectWindowSeconds adalah 0, yang menonaktifkan penggabungan.
Sinkronisasi Beberapa Rekaman Peserta
Rekaman peserta individu menyertakan EXT-X-PROGRAM-DATE-TIME tag dalam daftar putar HLS, yang memberikan cap waktu UTC yang tepat dengan akurasi milidetik untuk menyinkronkan rekaman dari beberapa peserta selama pasca-pemrosesan.
Saat Anda merekam beberapa peserta secara individual dan ingin membuat komposisi yang disinkronkan (seperti tata letak berdampingan atau gambar-dalam-gambar), Anda dapat menggunakan cap 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
#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-TIMETag memberikan waktu UTC yang tepat untuk segmen pertama dan pada setiap titik diskontinuitas, memungkinkan sinkronisasi yang tepat dengan rekaman peserta lain.
Alur Kerja Sinkronisasi
Untuk menyinkronkan beberapa rekaman peserta, EXT-X-PROGRAM-DATE-TIME ekstrak cap 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, cap 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 merekam peserta individu.
File Metadata JSON
Metadata ini dalam format JSON. Ini terdiri dari informasi berikut:
| Bidang | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
|
string | Ya | ARN panggung yang digunakan sebagai sumber rekaman. |
|
string | Ya | String mewakili panggung |
|
string | Ya | String yang mewakili pengidentifikasi peserta yang direkam. |
|
string | Bersyarat | Stempel waktu RFC 3339 UTC saat perekaman dimulai. Ini tidak |
|
string | Bersyarat | Stempel waktu RFC 3339 UTC saat rekaman berakhir. Ini hanya tersedia ketika Catatan: |
|
string | Ya | Status rekaman. Nilai yang valid: |
|
string | Bersyarat | Informasi deskriptif tentang status. Ini hanya tersedia ketika |
|
object | Ya | Objek yang berisi objek yang disebutkan dari konten media yang tersedia untuk rekaman ini. Nilai valid: |
|
object | Ya | Bidang yang disebutkan yang menjelaskan output format Apple HLS. |
|
integer | Bersyarat | Durasi konten HLS yang direkam dalam milidetik. Ini hanya tersedia ketika |
|
string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan. |
|
string | Ya | Nama file daftar putar master HLS. |
|
object | Ya | Array rendering (varian HLS) objek metadata. Selalu ada setidaknya satu rendisi. |
|
string | Ya | Jalur relatif dari awalan S3 tempat konten HLS disimpan untuk rendisi ini. |
|
string | Ya | Nama file playlist media untuk rendisi ini. |
|
object | Bersyarat | Bidang yang disebutkan yang menjelaskan output thumbnail. Ini hanya tersedia jika |
|
string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail berurutan disimpan. |
|
object | Ya | Array rendering (varian thumbnail) objek metadata. Selalu ada setidaknya satu rendisi. |
|
string | Ya | Jalur relatif dari awalan S3 tempat konten thumbnail disimpan untuk rendisi ini. |
|
object | Bersyarat | Bidang yang disebutkan yang menjelaskan output thumbnail. Ini hanya tersedia jika |
|
string | Ya | Jalur relatif dari awalan S3 tempat |
|
object | Ya | Array rendering (varian thumbnail) objek metadata. Selalu ada setidaknya satu rendisi. |
|
string | Ya | Jalur relatif dari awalan S3 tempat thumbnail terbaru disimpan untuk rendisi ini. |
|
string | Ya | Versi skema metadata. |
Contoh: recording-started.json
{ "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
{ "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: recording-failed.json
{ "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
Rekaman peserta individu disimpan dalam format HLS, terdiri dari daftar putar dan segmen MP4 (fMP4) yang terfragmentasi. Untuk mengonversi rekaman HLS menjadi satu file MP4, 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