IVS 지연 시간이 짧은 스트리밍과 함께 Amazon EventBridge 사용
Amazon EventBridge를 사용하여 Amazon Interactive Video Service(IVS) 스트림을 모니터링할 수 있습니다.
Amazon IVS는 스트림의 상태에 대한 변경 이벤트를 Amazon EventBridge로 전송합니다. 전송되는 모든 이벤트가 유효합니다. 다만 이벤트는 '최선의 노력'을 기준으로 전송됩니다. 즉, 다음을 보장하지 않습니다.
-
이벤트 전송 - 지정된 이벤트(예: 스트림 시작)가 발생할 수는 있으나, Amazon IVS에서 이에 대응하는 변경 이벤트가 EventBridge로 전송이 되지 않을 수도 있습니다. 이벤트가 전송이 될 때까지 Amazon IVS는 수 시간동안 이벤트 전송을 시도합니다.
-
전송되는 이벤트는 지정된 기간에 도착합니다. 최대 몇 시간 이전의 이벤트도 수신할 수 있습니다.
-
순서대로 이벤트 전송 - 특히, 이벤트가 서로 짧은 간격 안에 전송되는 경우 이벤트 순서가 잘못될 수 있습니다. 예를 들어, 스트림 업을 보기 전에 스트림 다운이 나타날 수 있습니다.
이벤트가 누락되거나 늦거나 순서가 맞지 않는 경우는 드물지만 알림 이벤트의 순서나 존재 여부에 종속되는 비즈니스에 중요한 프로그램을 작성하는 경우 이러한 가능성을 염두에 두고 처리해야 합니다.
다음 이벤트 중 하나에 대한 Eventbridge 규칙을 생성할 수 있습니다.
이벤트 유형 | 이벤트 | 전송된 시간 |
---|---|---|
IVS 스트림 상태 변경 | 세션 생성 | 채널 스트림 키를 성공적으로 사용하여 스트림 세션을 생성했습니다. 이 이벤트는 동영상이 처리되거나 뷰어에게 전달되기 전에 스트림을 초기화할 때 발생합니다. 이 이벤트는 스트림이 초기화되었지만 잘못된 구성이나 제한 위반 등으로 인해 라이브 스트리밍에 실패했는지 여부를 판단하는 데 도움이 될 수 있습니다. |
IVS 스트림 상태 변경 | 세션 종료 | 인코더의 연결이 끊어지고 Amazon IVS가 더 이상 비디오를 수신하지 않습니다. 이 이벤트는 인코더가 미디어 전송을 중지한 시기를 결정하는 데 도움이 될 수 있습니다. 멀티트랙 스트림의 경우 참고: 인코더의 연결이 끊어지면 스트림 종료 이벤트 전에 세션 종료 이벤트가 올 수 있습니다. 이는 Amazon IVS가 여전히 비디오를 처리 중일 때 세션 종료 이벤트 후 시간이 약간 걸릴 수 있기 때문입니다. |
IVS 스트림 상태 변경 | 스트림 시작 | 스트림이 처리 중이며 시청자가 세그먼트를 볼 수 있습니다. 이 이벤트는 비디오 스트림이 처리되고 있으며 뷰어가 볼 수 있음을 나타냅니다. 이 이벤트는 스트림이 성공적으로 라이브 스트리밍되었는지 여부를 판단하는 데 도움이 될 수 있습니다. |
IVS 스트림 상태 변경 | 스트림 종료 | 스트림 처리가 중지되고 더 이상 시청자에 대한 비디오 세그먼트가 생성되지 않습니다. 이 이벤트는 스트림이 종료되고 시청자가 새로운 비디오 세그먼트를 사용할 수 없는 시기를 결정하는 데 도움이 될 수 있습니다. (세션 종료의 참고 사항도 참조하세요.) |
IVS 스트림 상태 변경 | 스트림 실패 | 처리 용량이 초과되었기 때문에 스트림이 처리되지 않고 사용할 수 없습니다. |
IVS 스트림 상태 변경 | 스트림 인수 | 기존 스트림이 인수되었습니다. |
IVS 스트림 상태 변경 | 스트림 인수 실패 | 기존 스트림을 인수하려는 시도가 거부되었습니다. code 필드는 스트림 인수가 실패한 이유에 대한 추가 세부 정보를 제공합니다. 몇 가지 값이 있습니다. 상세한 설명은 IVS 콘솔에서 제공되지만 IVS API 또는 EventBridge를 통해 전달되지는 않습니다.
|
IVS 스트림 상태 변경 | 결핍 시작 | 스트림이 스트리머로부터 데이터를 수신하지 않습니다. 이때 스트림을 '결핍' 상태라고 합니다. |
IVS 스트림 상태 변경 | 결핍 종료 | 결핍 상태의 스트림이 스트리머로부터 데이터를 수신하기 시작하고 스트림은 다시 정상 상태가 됩니다. |
IVS 한도 위반 | 수집 비트 전송률 | 수신 스트림의 비트 전송률이 Amazon IVS 한도를 초과합니다. |
IVS 한도 위반 | 수집 해상도 | 수신 스트림의 해상도가 Amazon IVS 한도를 초과합니다. |
IVS 한도 위반 | 동시 브로드캐스트 | 동시에 스트리밍되는 총 채널 수가 Amazon IVS 한도를 초과합니다. |
IVS 한도 위반 | 동시 시청자 | 동시에 채널을 보는 총 시청자 수가 Amazon IVS 한도를 초과합니다. |
IVS 레코딩 상태 변경 | 레코딩 시작 | 스트림이 처리되기 시작하고 레코딩 접두사가 생성되고 검증됩니다. 세그먼트가 채널에 대해 구성된 스토리지 위치에 기록됩니다. 라이브 스트림이 시작되고 레코딩 시작 이벤트가 생성된 후 매니페스트 파일과 비디오 세그먼트가 채널에 구성된 S3 버킷에 기록되기까지 약간의 시간이 걸립니다. 레코딩 종료 이벤트가 전송된 후에만 레코딩된 스트림을 재생하거나 처리하는 것이 좋습니다. |
IVS 레코딩 상태 변경 | 레코딩 종료 | 이 채널에 대한 스트림이 종료되고 레코딩이 중지됩니다. |
IVS 레코딩 상태 변경 | 레코딩 시작 실패 | 스트림이 시작되지만 오류로 인해 레코딩이 시작되지 않습니다(예: S3 버킷이 없거나 올바른 리전에 없는 경우). 이 라이브 스트림은 레코딩되지 않습니다. |
IVS 레코딩 상태 변경 | 레코딩 종료 실패 | 레코딩 중에 발생한 오류로 인해 레코딩이 실패하고 종료됩니다(예: 마스터 재생 목록 작성 시도가 실패하는 경우). 일부 객체는 여전히 구성된 스토리지 위치에 기록될 수 있습니다. |
스트림 ID에 대한 참고 사항: 많은 이벤트에서 stream_id
필드는 채널이 라이브로 방송될 때마다 지정되는 고유한 스트림 식별자입니다. 지정된 채널에서 각 라이브 스트림에는 새 stream_id
가 있습니다. 따라서, 각 채널 ARN에는 대응하는 많은 스트림 ID가 있을 수 있습니다. 고객은 스트림 ID를 통해 동일한 채널에서 서로 다른 스트림 세션을 구분할 수 있습니다.
일부 이벤트의 대기 시간에 대한 참고 사항: 인코더 구성 설정, 특히 IDR/키프레임 간격은 스트림 시작 타이밍과 관련 이벤트의 지연 시간(스트림 시작 및 레코딩 시작)에 영향을 줍니다. 키프레임 간격이 짧을수록 이 지연 시간이 줄어듭니다. IDR/Keyframe
설정에 대한 자세한 내용은 Amazon IVS 스트리밍 구성의 '지연 시간 단축'을 참조하세요.
Amazon IVS에 대한 Amazon EventBridge 규칙 생성
Amazon IVS에서 생성되는 이벤트에서 트리거되는 규칙을 생성할 수 있습니다. Amazon EventBridge 사용 설명서의Create a rule in Amazon EventBridge 단계를 따르세요. 서비스를 선택할 때 Interactive Video Service(IVS)를 선택합니다.
예제: 스트림 상태 변경
세션 생성됨: 이 이벤트는 채널 스트림 키를 성공적으로 사용하여 스트림 세션을 생성했을 때 전송됩니다.
{ "version": "0", "id": "aa5b7a40-36cf-8dc4-5554-32d70e047215", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "535011710559", "time": "2024-09-09T16:17:26Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-west-2:535011710559:channel/UCGaMPGLCbcE" ], "detail": { "event_name": "Session Created", "channel_name": "", "stream_id": "st-1AuTyMDASvHUTSb8p5PvbsO" } }
세션 종료됨: 이 이벤트는 인코더 연결이 해제되고 IVS가 더 이상 비디오를 수신하지 않을 때 전송됩니다.
{ "version": "0", "id": "6f2723f3-ee31-9e48-b030-ac865e261a8e", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "535011710559", "time": "2024-09-09T16:17:26Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-west-2:535011710559:channel/UCGaMPGLCbcE" ], "detail": { "event_name": "Session Ended", "channel_name": "", "code": "MultitrackInputNotAllowed", "stream_id": "st-1AuTyMDASvHUTSb8p5PvbsO" } }
스트림 시작: 이 이벤트는 스트림이 처리 중이며 시청자가 세그먼트를 볼 수 있는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Stream Start", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
스트림 종료: 이 이벤트는 스트림 처리가 중지되고 더 이상 시청자에 대한 비디오 세그먼트가 생성되지 않는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Stream End", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
스트림 실패: 이 이벤트는 처리 용량이 초과되었기 때문에 스트림이 처리되지 않고 사용할 수 없는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Stream Failure", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "reason": "Transcode capacity exceeded. Please try again." } }
스트림 인수: 이 이벤트는 기존 스트림이 인수될 때 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Stream Takeover", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
스트림 인수 실패: 이 이벤트는 기존 스트림을 인수하려는 시도가 거부될 때 전송됩니다. 이는 일치하지 않는 코덱/해상도/비디오 트랙 유형, 잘못된 우선순위 정수 또는 스트림당 최대 인수 횟수를 초과하기 때문일 수 있습니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream State Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Stream Takeover Failure", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "code": "StreamTakeoverInvalidPriority" } }
예제: 스트림 상태 변경
결핍 시작: 이 이벤트는 스트림이 스트리머로부터 데이터를 수신하지 않는 경우 전송됩니다. 이때 스트림을 '결핍' 상태라고 합니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream Health Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Starvation Start", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
결핍 종료: 이 이벤트는 결핍 상태의 스트림이 스트리머로부터 데이터를 수신하기 시작하고 스트림은 다시 정상 상태가 되는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Stream Health Change", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "event_name": "Starvation End", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
예제: 한도 위반
모든 한도 위반 이벤트는 위반된 한도 이름, 한도 값 및 한도를 초과한 정도(위반 시 한도에 의해 차감된 값)가 포함됩니다.
수집 비트 전송률: 이 이벤트는 수신 스트림의 비트 전송률이 Amazon IVS 한도를 초과하는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Limit Breach", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "limit_name": "Ingest Bitrate", "limit_value": 1234, "exceeded_by": 3, "limit_unit": "bits per second", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
수집 해상도: 이 이벤트는 수신 스트림의 해상도(총 픽셀 수 또는 엣지당 픽셀 수)가 Amazon IVS 한도를 초과하는 경우 전송됩니다.
최대 총 픽셀 수 초과됨:
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Limit Breach", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890" ], "detail": { "limit_name": "Ingest Resolution", "limit_value": 495000, "exceeded_by": 426600, "limit_unit": "total pixels", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
엣지당 최대 픽셀 수 초과됨:
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Limit Breach", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [ "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"TBD ], "detail": { "limit_name": "Ingest Resolution", "limit_value": 855, "exceeded_by": 45, "limit_unit": "pixels per edge", "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn" } }
동시 브로드캐스트: 이 이벤트는 동시에 스트리밍되는 총 채널 수가 Amazon IVS 한도를 초과하는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Limit Breach", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [], "detail": { "limit_name": "Concurrent Broadcasts", "limit_value": 2, "exceeded_by": 3, "limit_unit": "active streams" } }
동시 시청자: 이 이벤트는 동시에 채널을 보는 총 시청자 수가 Amazon IVS 한도를 초과하는 경우 전송됩니다.
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "IVS Limit Breach", "source": "aws.ivs", "account": "aws_account_id", "time": "2017-06-12T10:23:43Z", "region": "us-east-1", "resources": [], "detail": { "limit_name": "Concurrent Viewers", "limit_value": 10, "exceeded_by": 11, "limit_unit": "viewers" } }
예제: 레코딩 상태 변경
모든 레코딩 상태 변경 이벤트에 대해 이 라이브 스트림의 모든 객체가 저장되는 최상위 경로는 recording_s3_key_prefix
입니다. 실패하는 경우 실패의 원인은 recording_status_reason
입니다. recording_duration_ms
필드는 레코딩 지속 시간(밀리초)입니다.
레코딩 시작: 이 이벤트는 스트림이 처리되기 시작하고 세그먼트가 채널에 대해 구성된 스토리지 위치에 기록될 때 전송됩니다.
{ "version": "0", "id": "12345678-1a23-4567-a1bc-1a2b34567890", "detail-type": "IVS Recording State Change", "source": "aws.ivs", "account": "123456789012", "time": "2020-06-23T20:12:36Z", "region": "us-west-2", "resources": [ "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij" ], "detail": { "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "recording_status": "Recording Start", "recording_status_reason": "", "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings", "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs", "recording_duration_ms": 0, "recording_session_id": "a6RfV23ES97iyfoQ" } }
레코딩 종료: 이 이벤트는 이 채널에 대한 스트림이 종료되고 레코딩이 중지되는 경우 전송됩니다.
{ "version": "0", "id": "12345678-1a23-4567-a1bc-1a2b34567890", "detail-type": "IVS Recording State Change", "source": "aws.ivs", "account": "123456789012", "time": "2020-06-24T07:51:32Z", "region": "us-west-2", "resources": [ "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij" ], "detail": { "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "recording_status": "Recording End", "recording_status_reason": "", "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings", "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs", "recording_duration_ms": 99370264, "recording_session_id": "a6RfV23ES97iyfoQ", "recording_session_stream_ids": ["st-254sopYUvi6F78ghpO9vn0A", "st-1A2b3c4D5e6F78ghij9Klmn"] } }
레코딩 시작 실패: 이 이벤트는 스트림이 시작되지만 오류로 인해 레코딩이 시작되지 않는 경우(예: S3 버킷이 없거나 올바른 리전에 없는 경우) 전송됩니다. 이 라이브 스트림은 레코딩되지 않습니다.
{ "version": "0", "id": "12345678-1a23-4567-a1bc-1a2b34567890", "detail-type": "IVS Recording State Change", "source": "aws.ivs", "account": "123456789012", "time": "2020-06-23T20:12:36Z", "region": "us-west-2", "resources": [ "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij" ], "detail": { "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "recording_status": "Recording Start Failure", "recording_status_reason": "ValidationException", "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings", "recording_s3_key_prefix": "", "recording_duration_ms": 0, "recording_session_id": "a6RfV23ES97iyfoQ" } }
레코딩 종료 실패: 이 이벤트는 레코딩 중에 발생한 오류로 인해 레코딩이 실패하고 종료되는 경우 전송됩니다. 일부 객체는 여전히 구성된 스토리지 위치에 기록될 수 있습니다.
{ "version": "0", "id": "12345678-1a23-4567-a1bc-1a2b34567890", "detail-type": "IVS Recording State Change", "source": "aws.ivs", "account": "123456789012", "time": "2020-06-24T07:51:32Z", "region": "us-west-2", "resources": [ "arn:aws:ivs:us-west-2:123456a7-ab1c-2d34-e5f6-1a2b3c4d5678" ], "detail": { "channel_name": "Your Channel", "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn", "recording_status": "Recording End Failure", "recording_status_reason": "InternalServerException", "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings", "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs", "recording_duration_ms": 0, "recording_session_id": "a6RfV23ES97iyfoQ" } }