Aufzeichnung einzelner IVS-Teilnehmer | Echtzeit-Streaming
In diesem Dokument wird erklärt, wie Sie die Aufzeichnung einzelner Teilnehmer mit IVS-Streaming in Echtzeit verwenden können.
Es fallen standardmäßige S3-Speicher- und Anforderungskosten an. Für Thumbnails fallen keine zusätzlichen IVS-Gebühren an. Details finden Sie unter Preise für Amazon IVS
Einführung
Die Aufzeichnung einzelner Teilnehmer ermöglicht es IVS-Echtzeit-Streaming-Kunden, IVS-Bühnen-Publisher einzeln in S3-Buckets aufzuzeichnen. Wenn die Aufzeichnung einzelner Teilnehmer für eine Bühne aktiviert ist, werden Publisher-Inhalte aufgezeichnet, sobald sie mit der Veröffentlichung für die Bühne beginnen.
Hinweis: Wenn Sie alle Teilnehmer der Bühne in einem einzigen Video mischen möchten, ist das Feature für zusammengesetzte Aufzeichnung besser geeignet. Eine Zusammenfassung der Aufzeichnung von IVS-Echtzeit-Streaming-Inhalten finden Sie unter Aufzeichnung.

Workflow

1. Erstellen eines S3-Bucket
Es muss ein S3-Bucket vorhanden sein, um VODs zu schreiben. Einzelheiten finden Sie in der S3-Dokumentation zum Erstellen von Buckets. Beachten Sie, dass für die Aufzeichnung einzelner Teilnehmer die S3-Buckets in derselben AWS-Region wie die IVS-Bühne erstellt werden müssen.
Wichtig: Wenn Sie einen vorhandenen S3-Bucket verwenden, muss die Einstellung Objekteigentümerschaft entweder Bucket-Eigentümer erzwungen oder Bucket-Eigentümer bevorzugt sein. Einzelheiten finden Sie in der S3-Dokumentation zum Steuern der Eigentümerschaft von Objekten.
2. Erstellen eines StorageConfiguration-Objekts
Rufen Sie nach dem Erstellen eines Buckets die IVS-Echtzeit-Streaming-API auf, um ein StorageConfiguration-Objekt zu erstellen. Sobald die Speicherkonfiguration erfolgreich erstellt wurde, hat IVS die Berechtigung, in den bereitgestellten S3-Bucket zu schreiben. Sie können dieses StorageConfiguration-Objekt für mehrere Bühnen wiederverwenden.
3. Erstellen einer Bühne mit Teilnehmer-Token
Jetzt müssen Sie eine IVS-Bühne erstellen, für welche die Aufzeichnung einzelner Teilnehmer aktiviert ist (indem Sie das AutoParticipantRecordingConfiguration-Objekt festlegen), sowie Teilnehmer-Token für jeden Publisher erstellen.
Mit der folgenden Anforderung wird eine Bühne mit zwei Teilnehmer-Token und aktivierter Aufzeichnung einzelner Teilnehmer erstellt.
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. Beitritt zur Bühne als aktiver Publisher
Verteilen Sie die Teilnehmer-Token an Ihre Publisher und lassen Sie sie der Bühne beitreten und mit der Veröffentlichung dafür beginnen.
Wenn sie der Bühne beitreten und mithilfe eines der Broadcast-SDKs für Echtzeit-Streaming von IVS beginnen, auf ihr zu veröffentlichen, startet der Aufzeichnungsvorgang für die Teilnehmer automatisch und sendet Ihnen ein EventBridge-Ereignis, das angibt, dass die Aufzeichnung gestartet wurde. (Das Ereignis lautet „Statusänderung der IVS-Teilnehmeraufzeichnung – Aufzeichnungsstart“.) Gleichzeitig beginnt der Prozess der Teilnehmeraufzeichnung mit dem Schreiben der VOD- und Metadatendateien in den konfigurierten S3-Bucket. Hinweis: Es kann nicht garantiert werden, dass Teilnehmer, die über einen extrem kurzen Zeitraum (weniger als 5 Sekunden) miteinander verbunden sind, aufgezeichnet werden.
Es gibt zwei Möglichkeiten, das S3-Präfix für jede Aufzeichnung zu erhalten:
-
Hören Sie das EventBridge-Ereignis ab:
{ "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" } }
-
Verwenden Sie den API-Vorgang GetParticipant – die Antwort enthält den S3-Bucket und das Präfix für den Ort, an dem ein Teilnehmer aufgezeichnet wird. Hier ist die Anforderung:
POST /GetParticipant HTTP/1.1 Content-type: application/json { "participantID": "xYz1c2d3e4f", "sessionId": "st-ZyXwvu1T2s", "stageArn": "arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij" }
Und hier ist die Antwort:
Content-type: application/json { "participant": { ... "recordingS3BucketName": "ivs-recordings", "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>", "recordingState": "ACTIVE", ... } }
5. Wiedergabe des VOD
Nachdem die Aufzeichnung abgeschlossen ist, können Sie sie mit dem IVS-Player
Nur Audioaufzeichnung
Wenn Sie die Aufzeichnung für einzelne Teilnehmer einrichten, können Sie festlegen, dass nur Audio-HLS-Segmente in Ihren S3-Bucket geschrieben werden. Um dieses Feature zu verwenden, wählen Sie bei der Erstellung der Bühne AUDIO_ONLY mediaType
aus:
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" } ] }
Nur Thumbnail-Aufzeichnung
Wenn Sie die Aufzeichnung für einzelne Teilnehmer einrichten, können Sie festlegen, dass nur Thumbnails in Ihren S3-Bucket geschrieben werden. Um dieses Feature zu verwenden, legen Sie beim Erstellen der Stufe für mediaType
NONE
fest. Dadurch wird sichergestellt, dass keine HLS-Segmente generiert werden. Thumbnails werden trotzdem erstellt und in Ihren S3-Bucket geschrieben.
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" } ] }
Inhalte der Aufnahme
Wenn die Aufzeichnung einzelner Teilnehmer aktiv ist, werden HLS-Videosegmente und Thumbnails in den S3-Bucket geschrieben, der bei der Erstellung der Stufe bereitgestellt wurde. Dieser Inhalt ist für die Nachbearbeitung oder Wiedergabe als On-Demand-Video verfügbar.
Beachten Sie, dass nach Abschluss einer Aufzeichnung das Ereignis „Statusänderung der IVS-Teilnehmeraufzeichnung – Aufzeichnungsende“ über EventBridge gesendet wird. Es wird empfohlen, aufgezeichnete Streams erst wiederzugeben oder zu verarbeiten, nachdem dieses Ereignis empfangen wurde. Einzelheiten finden Sie unter Verwenden von EventBridge mit IVS-Echtzeit-Streaming.
Nachfolgend finden Sie eine Beispielverzeichnisstruktur und den Inhalt einer Aufzeichnung einer Live-IVS-Sitzung:
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
Der Ordner events
enthält die Metadatendateien, die dem Aufzeichnungsereignis entsprechen. JSON-Metadatendateien werden generiert, wenn die Aufzeichnung gestartet, erfolgreich beendet oder mit Fehlern beendet wird:
-
events/recording-started.json
-
events/recording-ended.json
-
events/recording-failed.json
Ein angegebener events
-Ordner enthält recording-started.json
und entweder recording-ended.json
oder recording-failed.json
. Diese enthalten Metadaten, die sich auf die aufgezeichnete Sitzung und ihre Ausgabeformate beziehen. JSON-Details sind unten angegeben.
Der Ordner media
enthält die unterstützten Medieninhalte. Der Unterordner hls
enthält alle Medien und Manifestdateien, die während der Aufzeichnungssitzung generiert wurden, und kann mit dem IVS-Player abgespielt werden. Falls konfiguriert, enthalten die Ordner thumbnails
und die Unterordner latest_thumbnail
JPEG-Thumbnail-Mediendateien, die während der Aufzeichnungssitzung generiert wurden.
JSON-Metadatendateien
Diese Metadaten weisen das JSON-Format auf. Es enthält die folgenden Informationen:
Feld | Typ | Erforderlich | Beschreibung |
---|---|---|---|
|
Zeichenfolge | Ja | ARN der Bühne, die als Quelle für die Aufzeichnung verwendet wird. |
|
Zeichenfolge | Ja | Zeichenfolge, welche die |
|
Zeichenfolge | Ja | Zeichenfolge, die die Kennung des aufgezeichneten Teilnehmers darstellt. |
|
Zeichenfolge | Bedingt | RFC 3339 UTC-Zeitstempel, wenn die Aufnahme gestartet wurde. Dies ist nicht verfügbar, wenn sich der |
|
Zeichenfolge | Bedingt | RFC 3339 UTC-Zeitstempel, wenn die Aufnahme beendet wurde. Dies ist nur verfügbar, wenn Hinweis: |
|
Zeichenfolge | Ja | Aufzeichnungsstatus. Zulässige Werte: |
|
Zeichenfolge | Bedingt | Beschreibende Informationen über den Status. Dies ist nur verfügbar, wenn |
|
object | Ja | Objekt, das die Aufzählungsobjekte von Medieninhalten enthält, die für diese Aufzeichnung verfügbar sind. Zulässiger Wert: |
|
object | Ja | Aufzählungsfeld, das die Ausgabe des Apple HLS-Formats beschreibt. |
|
Ganzzahl | Bedingt | Dauer des aufgezeichneten HLS-Inhalts in Millisekunden. Dies ist nur verfügbar, wenn |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem HLS-Inhalt gespeichert wird. |
|
Zeichenfolge | Ja | Name der HLS-Master-Wiedergabeliste. |
|
Objekt | Ja | Array von Formatversionen (HLS-Varianten) von Metadatenobjekten. Es ist immer mindestens eine Formatvariante vorhanden. |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem HLS-Inhalt für diese Formatvariante gespeichert wird. |
|
Zeichenfolge | Ja | Name der Medienwiedergabelistdatei für diese Formatvariante. |
|
object | Bedingt | Aufzählungsfeld, das die Ausgabe von Miniaturansichten beschreibt. Diese Funktion ist nur verfügbar, wenn das Feld der Konfiguration |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem sequentieller Thumbnail-Inhalt gespeichert wird. |
|
object | Ja | Array von Formatversionen (Thumbnail-Varianten) von Metadatenobjekten. Es ist immer mindestens eine Formatvariante vorhanden. |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem Thumbnail-Inhalt für diese Formatvariante gespeichert wird. |
|
object | Bedingt | Aufzählungsfeld, das die Ausgabe von Miniaturansichten beschreibt. Diese Funktion ist nur verfügbar, wenn das Feld der Konfiguration |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem |
|
object | Ja | Array von Formatversionen (Thumbnail-Varianten) von Metadatenobjekten. Es ist immer mindestens eine Formatvariante vorhanden. |
|
Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem das neueste Thumbnail für diese Formatvariante gespeichert wird. |
|
Zeichenfolge | Ja | Die Version des Metadatenschemas. |
Beispiel: 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" } ] } } }
Beispiel: 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" } ] } } }
Beispiel: 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" } ] } } }