IVS 개별 참가자 레코딩 | 실시간 스트리밍
이 문서에서는 IVS Real-Time Streaming과 함께 개별 참가자 레코딩을 사용하는 방법을 설명합니다.
소개
개별 참가자 레코딩에서는 IVS 실시간 스트리밍 고객이 IVS 스테이지 게시자를 개별적으로 S3 버킷에 레코딩할 수 있습니다. 스테이지에 개별 참가자 레코딩을 사용할 수 있을 때 게시자가 스테이지에 게시하기 시작하면 해당 콘텐츠가 레코딩됩니다.
참고: 하나의 비디오에 모든 스테이지 참가자를 합쳐야 한다면 복합 레코딩 특성이 더 적합합니다. IVS 실시간 스트리밍 콘텐츠 레코딩 요약은 레코딩을 참조하세요.
워크플로
1. S3 버킷 생성
VOD를 작성하려면 S3 버킷이 필요합니다. 자세한 내용은 버킷 생성 방법에 대한 S3 설명서를 참조하세요. 참고로, 개별 참가자 레코딩은 S3 버킷은 IVS 스테이지와 동일한 AWS 리전에 생성되어야 합니다.
중요: 기존 S3 버킷을 사용하는 경우 객체 소유권 설정은 버킷 소유자 적용 또는 버킷 소유자 기본 설정으로 되어야 합니다. 자세한 내용은 객체 소유권 제어에 대한 S3 설명서를 참조하세요.
2. StorageConfiguration 객체 생성
버킷을 생성한 후 IVS 실시간 스트리밍 API를 직접적으로 호출하여 StorageConfiguration 객체를 생성합니다. 스토리지 구성이 생성되면 IVS는 제공된 S3 버킷에 작성하는 권한을 갖게 됩니다. 이 StorageConfiguration 객체를 여러 스테이지에서 재사용할 수 있습니다.
3. 참가자 토큰으로 스테이지 생성
이제 AutoParticipantRecordingConfiguration 객체 설정을 통해 개별 참가자 레코딩이 활성화된 IVS 스테이지는 물론 각 게시자의 참가자 토큰도 생성해야 합니다.
아래 요청에서는 참가자 토큰 2개와 개별 참가자 레코딩이 활성화된 스테이지가 생성됩니다.
POST /CreateStage HTTP/1.1 Content-type: application/json { "autoParticipantRecordingConfiguration": { "mediaTypes": ["AUDIO_VIDEO"], "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij" }, "name": "TestStage", "participantTokenConfigurations": [ { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "1" }, { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "2" } ] }
4. 활성 게시자로 스테이지 참여
참가자 토큰을 게시자에게 배포하고, 게시자가 스테이지에 참여하여 게시를 시작하도록 합니다.
사용자가 스테이지에 참여하여 IVS 실시간 스트리밍 브로드캐스트 SDK 중 하나를 사용하여 게시를 시작하면 참가자-레코딩 프로세스가 자동으로 시작되고 레코딩이 시작되었음을 나타내는 EventBridge 이벤트가 수신됩니다. (이벤트가 IVS 참가자 레코딩 상태 변경 - 레코딩 시작입니다.) 이와 동시에 구성된 S3 버킷에 VOD 및 메타데이터 파일 쓰기가 참가자-레코딩 프로세스가 시작됩니다. 참고: 매우 짧은 기간(5초 미만) 동안 연결된 참가자에게는 레코딩이 보장되지 않습니다.
각 레코딩의 S3 접두사를 가져오는 두 가지 방법이 있습니다.
-
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" } }
-
GetParticipant API 엔드포인트 - 참가자가 레코딩되는 S3 버킷과 접두사가 응답에 포함되어 있습니다. 요청은 다음과 같습니다.
POST /GetParticipant HTTP/1.1 Content-type: application/json { "participantID": "xYz1c2d3e4f", "sessionId": "st-ZyXwvu1T2s", "stageArn": "arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij" }
그리고 응답은 다음과 같습니다.
Content-type: application/json { "participant": { ... "recordingS3BucketName": "ivs-recordings", "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>", "recordingState": "ACTIVE", ... } }
5. VOD 재생
레코딩이 완료되면 IVS 플레이어
오디오만 레코딩
개별 참가자 레코딩을 설정할 때 S3 버킷에 오디오 HLS 세그먼트만 작성되도록 선택할 수 있습니다. 이 특성을 사용하려면 스테이지를 생성할 때 AUDIO_ONLY mediaType
을 선택합니다.
POST /CreateStage HTTP/1.1 Content-type: application/json { "autoParticipantRecordingConfiguration": { "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij", "mediaTypes": ["AUDIO_ONLY"] }, "name": "TestStage", "participantTokenConfigurations": [ { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "1" }, { "capabilities": ["PUBLISH", "SUBSCRIBE"], "duration": 20160, "userId": "2" } ] }
레코딩 콘텐츠
개별 참가자 레코딩이 활성 상태이면 스테이지가 생성될 때 제공된 S3 버킷에 HLS 비디오 세그먼트와 메타데이터 파일이 작성되는 것이 보이기 시작합니다. 이러한 콘텐츠는 온디맨드 비디오로 후처리 또는 재생에 사용할 수 있습니다.
참고로, 레코딩이 완료되면 IVS 참가자 레코딩 상태 변경 - 레코딩 종료 이벤트가 EventBridge 통해 발송됩니다. 이 이벤트가 수신된 후에만 레코딩된 스트림을 재생하거나 처리하는 것이 좋습니다. 자세한 내용은 IVS 실시간 스트리밍과 함께 Amazon EventBridge 사용을 참조하세요.
다음은 라이브 IVS 세션 레코딩의 샘플 디렉터리 구조 및 콘텐츠입니다.
s3://mybucket/stageId/stageSessionId/participantId/timestamp events recording-started.json recording-ended.json media hls multivariant.m3u8 high playlist.m3u8 1.mp4
events
폴더에는 레코딩 이벤트에 해당하는 메타데이터 파일이 들어 있습니다. JSON 메타데이터 파일은 레코딩이 시작되거나, 성공적으로 종료되거나, 실패로 종료될 때 생성됩니다.
-
events/recording-started.json
-
events/recording-ended.json
-
events/recording-failed.json
주어진 events
폴더에 recording-started.json
및 recording-ended.json
또는 recording-failed.json
이 포함되어 있습니다. 여기에는 레코딩된 세션 및 출력 형식과 관련된 메타데이터가 포함됩니다. 다음은 JSON 세부 정보입니다.
media
폴더에는 지원되는 미디어 콘텐츠가 있습니다. hls
하위 폴더에는 레코딩 세션 중에 생성된 모든 미디어 및 매니페스트 파일이 포함되어 있으며, 이는 IVS 플레이어에서 재생할 수 있습니다.
JSON 메타데이터 파일
이 메타데이터는 JSON 형식입니다. 이는 다음 정보로 구성됩니다.
필드 | 유형 | 필수 | 설명 |
---|---|---|---|
|
문자열 | 예 | 레코딩 소스로 사용되는 스테이지의 ARN입니다. |
|
문자열 | 예 |
|
|
문자열 | 예 | 레코딩된 참가자의 식별자를 나타내는 문자열입니다. |
|
문자열 | 조건 | 레코딩이 시작된 RFC 3339 UTC 타임스탬프입니다. |
|
문자열 | 조건 | 레코딩이 종료된 RFC 3339 UTC 타임스탬프입니다. 이는 참고: |
|
문자열 | 예 | 레코딩 상태입니다. 유효한 값: |
|
문자열 | 조건 | 상태에 대한 설명 정보입니다. 이는 |
|
객체 | 예 | 이 레코딩에 사용할 수 있는 미디어 콘텐츠의 열거된 객체를 포함하는 객체입니다. 유효한 값: |
|
객체 | 예 | Apple HLS 형식 출력을 설명하는 열거형 필드입니다. |
|
정수 | 조건 | 레코딩된 HLS 콘텐츠의 지속 시간(밀리초)입니다. 이는 |
|
문자열 | 예 | HLS 콘텐츠가 저장되는 S3 접두사의 상대 경로입니다. |
|
문자열 | 예 | HLS 마스터 재생 목록 파일의 이름입니다. |
|
객체 | 예 | 메타데이터 객체의 변환 배열(HLS 변형)입니다. 항상 하나 이상의 변환이 있습니다. |
|
문자열 | 예 | 이 변환에 대해 HLS 콘텐츠가 저장되는 S3 접두사의 상대 경로입니다. |
|
문자열 | 예 | 이 변환에 대한 미디어 재생 목록 파일의 이름입니다. |
|
문자열 | 예 | 메타데이터 스키마의 버전입니다. |
예: 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" } ] } } }
예: 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" } ] } } }
예: 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" } ] } } }