IVS 지연 시간이 짧은 스트리밍과 함께 Amazon EventBridge 사용 - Amazon IVS

IVS 지연 시간이 짧은 스트리밍과 함께 Amazon EventBridge 사용

Amazon EventBridge를 사용하여 Amazon Interactive Video Service(IVS) 스트림을 모니터링할 수 있습니다.

Amazon IVS는 스트림의 상태에 대한 변경 이벤트를 Amazon EventBridge로 전송합니다. 전송되는 모든 이벤트가 유효합니다. 다만 이벤트는 '최선의 노력'을 기준으로 전송됩니다. 즉, 다음을 보장하지 않습니다.

  • 이벤트 전송 - 지정된 이벤트(예: 스트림 시작)가 발생할 수는 있으나, Amazon IVS에서 이에 대응하는 변경 이벤트가 EventBridge로 전송이 되지 않을 수도 있습니다. 이벤트가 전송이 될 때까지 Amazon IVS는 수 시간동안 이벤트 전송을 시도합니다.

  • 전송되는 이벤트는 지정된 기간에 도착합니다. 최대 몇 시간 이전의 이벤트도 수신할 수 있습니다.

  • 순서대로 이벤트 전송 - 특히, 이벤트가 서로 짧은 간격 안에 전송되는 경우 이벤트 순서가 잘못될 수 있습니다. 예를 들어, 스트림 업을 보기 전에 스트림 다운이 나타날 수 있습니다.

이벤트가 누락되거나 늦거나 순서가 맞지 않는 경우는 드물지만 알림 이벤트의 순서나 존재 여부에 종속되는 비즈니스에 중요한 프로그램을 작성하는 경우 이러한 가능성을 염두에 두고 처리해야 합니다.

다음 이벤트 중 하나에 대한 Eventbridge 규칙을 생성할 수 있습니다.

이벤트 유형 이벤트 전송된 시간
IVS 스트림 상태 변경 세션 생성 채널 스트림 키를 성공적으로 사용하여 스트림 세션을 생성했습니다. 이 이벤트는 동영상이 처리되거나 뷰어에게 전달되기 전에 스트림을 초기화할 때 발생합니다. 이 이벤트는 스트림이 초기화되었지만 잘못된 구성이나 제한 위반 등으로 인해 라이브 스트리밍에 실패했는지 여부를 판단하는 데 도움이 될 수 있습니다.
IVS 스트림 상태 변경 세션 종료

인코더의 연결이 끊어지고 Amazon IVS가 더 이상 비디오를 수신하지 않습니다. 이 이벤트는 인코더가 미디어 전송을 중지한 시기를 결정하는 데 도움이 될 수 있습니다. 멀티트랙 스트림의 경우 code 필드는 세션이 종료된 이유에 대한 추가 세부 정보를 제공할 수 있습니다. 자세한 내용은 StreamEvent API 객체의 code 필드를 참조하세요.

참고: 인코더의 연결이 끊어지면 스트림 종료 이벤트 전에 세션 종료 이벤트가 올 수 있습니다. 이는 Amazon IVS가 여전히 비디오를 처리 중일 때 세션 종료 이벤트 후 시간이 약간 걸릴 수 있기 때문입니다.

IVS 스트림 상태 변경 스트림 시작 스트림이 처리 중이며 시청자가 세그먼트를 볼 수 있습니다. 이 이벤트는 비디오 스트림이 처리되고 있으며 뷰어가 볼 수 있음을 나타냅니다. 이 이벤트는 스트림이 성공적으로 라이브 스트리밍되었는지 여부를 판단하는 데 도움이 될 수 있습니다.
IVS 스트림 상태 변경 스트림 종료 스트림 처리가 중지되고 더 이상 시청자에 대한 비디오 세그먼트가 생성되지 않습니다. 이 이벤트는 스트림이 종료되고 시청자가 새로운 비디오 세그먼트를 사용할 수 없는 시기를 결정하는 데 도움이 될 수 있습니다. (세션 종료의 참고 사항도 참조하세요.)
IVS 스트림 상태 변경 스트림 실패 처리 용량이 초과되었기 때문에 스트림이 처리되지 않고 사용할 수 없습니다.
IVS 스트림 상태 변경 스트림 인수 기존 스트림이 인수되었습니다.
IVS 스트림 상태 변경 스트림 인수 실패 기존 스트림을 인수하려는 시도가 거부되었습니다. code 필드는 스트림 인수가 실패한 이유에 대한 추가 세부 정보를 제공합니다. 몇 가지 값이 있습니다. 상세한 설명은 IVS 콘솔에서 제공되지만 IVS API 또는 EventBridge를 통해 전달되지는 않습니다.
  • StreamTakeoverMediaMismatch-브로드캐스트 클라이언트가 원래 스트림과 다른 미디어 속성(예: 코덱, 해상도 또는 비디오 트랙 유형)으로 인수를 시도했습니다.

  • StreamTakeoverInvalidPriority-브로드캐스트 클라이언트가 원래 스트림의 값과 같거나 더 낮은 우선순위 정수 값 또는 허용된 범위인 1~2,147,483,647을 벗어난 값으로 인수를 시도했습니다.

  • StreamTakeoverLimitBreached-브로드캐스트 클라이언트가 이 스트림에 허용되는 최대 인수 시도 횟수에 도달했습니다.

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" } }