Registrazione di singoli partecipanti in IVS | Streaming in tempo reale
Questo documento spiega come utilizzare la registrazione dei singoli partecipanti con lo streaming IVS in tempo reale.
Si applicano i costi standard di archiviazione e richiesta di Amazon S3. Le miniature non comportano costi IVS aggiuntivi. Per ulteriori dettagli, consulta la pagina Prezzi di Amazon IVS
Introduzione
La registrazione di singoli partecipanti consente ai clienti che utilizzano lo streaming in tempo reale di registrare singolarmente i publisher di fase IVS in bucket S3. Quando la registrazione dei singoli partecipanti è abilitata per una fase, una volta che i publisher iniziano a pubblicare sulla fase i rispettivi contenuti vengono registrati.
Nota: se è necessario che tutti i partecipanti alla fase vengano mixati in un unico video, la soluzione migliore è la funzionalità di registrazione composita. Consulta la sezione Registrazione per un riepilogo della registrazione di contenuti in streaming in tempo reale in IVS.

Flusso di lavoro

1. Creare un bucket S3
Per la scrittura dei VOD occorre un bucket S3. Per i dettagli, consulta la documentazione di S3 su come creare un bucket. Occorre tenere presente che per la registrazione dei singoli partecipanti i bucket S3 devono essere creati nella stessa regione AWS della fase IVS.
Importante: se si utilizza un bucket S3 esistente, l'impostazione Proprietà dell'oggetto deve essere Proprietario del bucket applicato o Proprietario del bucket preferito. Per i dettagli, consulta la documentazione di S3 sul controllo della proprietà degli oggetti.
2. Creazione di un oggetto StorageConfiguration
Dopo aver creato un bucket, chiama l'API di streaming in tempo reale IVS per creare un oggetto StorageConfiguration. Una volta creata correttamente la configurazione di archiviazione, IVS disporrà dell'autorizzazione a scrivere nel bucket S3 fornito. È possibile riutilizzare questo oggetto StorageConfiguration in più fasi.
3. Creazione di una fase con i token dei partecipanti
Ora è necessario creare una fase IVS con la registrazione dei singoli partecipanti abilitata (impostando l'oggetto AutoParticipantRecordingConfiguration), oltre ai token dei partecipanti per ogni publisher.
La richiesta seguente crea una fase con due token dei partecipanti e la registrazione dei singoli partecipanti abilitata.
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. Aggiunta alla fase come publisher attivo
Distribuisci i token dei partecipanti ai publisher e invitali ad aggiungersi alla fase e iniziare a pubblicare su di essa.
Quando si aggiungono alla fase e iniziano a pubblicare su di essa utilizzando uno degli SDK di trasmissione in streaming in tempo reale IVS, il processo di registrazione dei partecipanti si avvia automaticamente e ti invia un evento EventBridge che segnala l'inizio della registrazione. L'evento è Modifica dello stato di registrazione dei partecipanti IVS - Avvio della registrazione. Contemporaneamente, il processo di registrazione dei partecipanti inizia a scrivere i file VOD e di metadati nel bucket S3 configurato. Nota: non è garantita la registrazione dei partecipanti collegati per periodi estremamente brevi (meno di 5 secondi).
Esistono due modi per ottenere il prefisso S3 per ogni registrazione:
-
Ascoltare l'evento EventBridge:
{ "version": "0", "id": "12345678-1a23-4567-a1bc-1a2b34567890", "detail-type": "IVS Participant Recording State Change", "source": "aws.ivs", "account": "123456789012", "time": "2024-03-13T22:19:04Z", "region": "us-east-1", "resources": ["arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij"], "detail": { "session_id": "st-ZyXwvu1T2s", "event_name": "Recording Start", "participant_id": "xYz1c2d3e4f", "recording_s3_bucket_name": "ivs-recordings", "recording_s3_key_prefix": "<stage_id>/<session_id>/<participant_id>/2024-01-01T12-00-55Z" } }
-
Usa l'operazione dell'API GetParticipant: la risposta include il bucket S3 e il prefisso in cui è in corso la registrazione di un partecipante. Ecco la richiesta:
POST /GetParticipant HTTP/1.1 Content-type: application/json { "participantID": "xYz1c2d3e4f", "sessionId": "st-ZyXwvu1T2s", "stageArn": "arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij" }
Ed ecco la risposta:
Content-type: application/json { "participant": { ... "recordingS3BucketName": "ivs-recordings", "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>", "recordingState": "ACTIVE", ... } }
5. Riproduzione del VOD
Una volta completata la registrazione, è possibile guardarla utilizzando il lettore IVS
Registrazione solo audio
Quando si configura la registrazione dei singoli partecipanti, è possibile scegliere di scrivere nel bucket S3 soltanto i segmenti audio HLS. Per utilizzare questa funzione, scegli AUDIO_ONLY mediaType
quando crei la fase:
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" } ] }
Registrazione solo miniatura
Quando si configura la registrazione dei singoli partecipanti, è possibile scegliere di scrivere nel bucket S3 soltanto le miniature. Per utilizzare questa funzionalità, imposta mediaType
a NONE
quando crei la fase. Ciò garantisce che non vengano generati segmenti HLS; le miniature vengono comunque create e scritte nel bucket S3.
POST /CreateStage HTTP/1.1 Content-type: application/json { "autoParticipantRecordingConfiguration": { "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij", "mediaTypes": ["NONE"], "thumbnailConfiguration": { "recordingMode": "INTERVAL", "storage": ["LATEST", "SEQUENTIAL"], "targetIntervalSeconds": 60 } }, "name": "TestStage", "participantTokenConfigurations": [ { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "1" }, { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "2" } ] }
Contenuto della registrazione
Quando la registrazione dei singoli partecipanti è attiva, i segmenti video, i file di metadati e le miniature HLS verranno scritti nel bucket S3 indicato durante la creazione della fase. Questo contenuto è disponibile per la post-elaborazione o la riproduzione come video on demand.
Si noti che dopo il completamento di una registrazione, tramite EventBridge viene inviato un evento Modifica dello stato di registrazione dei partecipanti IVS - Fine della registrazione. Consigliamo di riprodurre o elaborare i flussi registrati solo dopo l'invio dell'evento di fine della registrazione. Per maggiori dettagli, consulta Utilizzo di EventBridge con lo streaming in tempo reale IVS.
Di seguito è riportato un esempio di contenuti e della struttura di directory di una registrazione di una sessione IVS live:
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
La cartella events
contiene i file di metadati corrispondenti all'evento di registrazione. I file di metadati JSON vengono generati quando la registrazione inizia, termina correttamente o termina con errori:
-
events/recording-started.json
-
events/recording-ended.json
-
events/recording-failed.json
Una determinata cartella events
contiene recording-started.json
e recording-ended.json
o recording-failed.json
. Questi contengono metadati relativi alla sessione registrata e ai relativi formati di output. I dettagli JSON sono riportati di seguito.
La cartella media
contiene i contenuti multimediali supportati. La sottocartella hls
contiene tutti i file multimediali e i file manifesto generati durante la sessione di registrazione ed è riproducibile con il lettore IVS. Se configurate, le sottocartelle thumbnails
e latest_thumbnail
contengono file multimediali in miniatura JPEG generati durante la sessione di composizione.
File di metadati JSON
Questi metadati sono in formato JSON. Tale controllo contiene le seguenti informazioni:
Campo | Tipo | Campo obbligatorio | Descrizione |
---|---|---|---|
|
stringa | Sì | ARN della fase utilizzata come origine della registrazione. |
|
string | Sì | Stringa che rappresenta il valore |
|
string | Sì | Stringa che rappresenta l'identificatore del partecipante registrato. |
|
string | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione inizia. Questo non è disponibile quando |
|
string | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione termina. Questo valore è disponibile solo quando Nota: |
|
string | Sì | Lo stato della registrazione. Valori validi: |
|
string | Condizionale | Le informazioni descrittive sullo stato. Questo valore è disponibile solo quando |
|
oggetto | Sì | L'oggetto che contiene gli oggetti enumerati del contenuto multimediale disponibile per la registrazione. Valore valido: |
|
oggetto | Sì | Il campo enumerato che descrive l'output in formato Apple HLS. |
|
intero | Condizionale | La durata del contenuto HLS registrato, in millisecondi. Questo valore è disponibile solo quando |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS. |
|
stringa | Sì | Il nome del file della playlist principale HLS. |
|
oggetto | Sì | L'array di rendering (variante HLS) degli oggetti di metadati. È presente sempre almeno un rendering. |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS per questo rendering. |
|
stringa | Sì | Il nome del file della playlist multimediale per questo rendering. |
|
oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo |
|
string | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto delle miniature sequenziale. |
|
oggetto | Sì | L'array di rendering (variante miniatura) degli oggetti di metadati. È presente sempre almeno un rendering. |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto della miniatura per questo rendering. |
|
oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo |
|
string | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato |
|
oggetto | Sì | L'array di rendering (variante miniatura) degli oggetti di metadati. È presente sempre almeno un rendering. |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzata l’ultima miniatura per questo rendering. |
|
string | Sì | La versione dello schema dei metadati. |
Esempio: 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" } ] } } }
Esempio: 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" } ] } } }
Esempio: 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" } ] } } }