기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
PutMedia
이를 API 사용하여 Kinesis 비디오 스트림으로 미디어 데이터를 전송할 수 있습니다.
참고
엔드포인트를 GetDataEndpoint
API 가져오려면 먼저 를 호출해야 합니다. 그런 다음 PutMedia
--endpoint-url 파라미터를 사용하여 이 엔드포인트로 요청을 전송합니다.
요청에서 HTTP 헤더를 사용하여 매개 변수 정보 (예: 스트림 이름, 타임스탬프, 타임스탬프 값이 절대값인지 아니면 제작자가 녹화를 시작한 시점을 기준으로 하는지 여부) 를 제공합니다. 요청 본문을 사용하여 미디어 데이터를 전송합니다. Kinesis Video Streams는 이를 사용하여 미디어 데이터를 전송하는 Matroska MKV () 컨테이너 형식만 지원합니다. API
이를 사용하여 데이터를 전송하는 옵션은 다음과 같습니다. API
-
미디어 데이터 실시간 전송: 예를 들어 보안 카메라가 프레임을 생성하면서 실시간으로 프레임을 전송할 수 있습니다. 이 접근 방식은 비디오 녹화와 유선으로 전송되는 데이터 사이의 지연 시간을 최소화합니다. 이를 연속 프로듀서라고 합니다. 이 경우 소비자 애플리케이션은 실시간으로 또는 필요할 때 스트림을 읽을 수 있습니다.
-
미디어 데이터를 오프라인으로 전송 (일괄): 예를 들어 바디 카메라가 몇 시간 동안 비디오를 녹화하고 이를 기기에 저장할 수 있습니다. 나중에 카메라를 도킹 포트에 연결하면 카메라가
PutMedia
세션을 시작하여 Kinesis 비디오 스트림으로 데이터를 전송할 수 있습니다. 이 시나리오에서는 지연 시간이 문제가 되지 않습니다.
이 API 방법을 사용할 때는 다음 고려 사항을 참고하십시오.
-
streamName
또는streamARN
중 하나만 지정해야 하지만 두 가지 모두 지정해서는 안 됩니다. -
콘솔에서 또는 콘솔을 통해 미디어를 재생하려면 각 프래그먼트의 트랙 1에는 h.264로 인코딩된 비디오가 포함되어야 하고HLS, 프래그먼트 메타데이터의 CodeCid는 “V_ MPEGISO/AVC“여야 하며, 프래그먼트 메타데이터에는 형식이 지정된 h.264 코덱 개인 데이터가 포함되어야 합니다. AVCC 선택적으로 각 프래그먼트의 트랙 2에는 AAC 인코딩된 오디오가 포함되어야 하고, 프래그먼트 메타데이터의 CodeCid는 “A_ AAC “여야 하며, 프래그먼트 메타데이터에는 AAC 코덱 프라이빗 데이터가 포함되어야 합니다.
-
장기간 실행되는 단일
PutMedia
세션을 사용하고 페이로드에 대량의 미디어 데이터 프래그먼트를 전송하는 것이 더 쉬울 수도 있습니다. Kinesis Video Streams는 수신된 각 프래그먼트에 대해 하나 이상의 승인을 보냅니다. 잠재적인 네트워크 고려 사항으로 인해 이러한 승인이 생성될 때 모든 승인을 받지 못할 수 있습니다. -
서비스로부터 모든 승인을 실시간으로 받을 수 있도록 하기 위해 각 세션마다 프래그먼트 수가 적은 연속
PutMedia
세션을 여러 개 선택할 수 있습니다.
참고
여러 개의 동시 PutMedia
세션에서 동일한 스트림으로 데이터를 전송하는 경우 미디어 프래그먼트는 스트림에서 인터리빙됩니다. 애플리케이션 시나리오에서 이 문제가 없는지 확인해야 합니다.
를 사용할 때는 다음과 같은 제한이 적용됩니다 PutMedia
API.
-
클라이언트는 스트림당 초당
PutMedia
최대 5회까지 호출할 수 있습니다. -
클라이언트는 스트림당 초당 최대 5개의 프래그먼트를 전송할 수 있습니다.
-
Kinesis Video Streams는 세션 중에 최대 12.5MB/초 또는 100Mbps의 속도로 미디어 데이터를 읽습니다.
PutMedia
다음 제약 조건에 유의하십시오. 이러한 경우 Kinesis Video Streams는 응답으로 오류 승인을 보냅니다.
-
최대 허용 한도보다 긴 타임 코드가 있고 50MB를 초과하는 데이터를 포함하는 프래그먼트는 허용되지 않습니다.
-
3개 이상의 트랙을 포함하는 프래그먼트는 허용되지 않습니다. 모든 프래그먼트의 각 프레임은 프래그먼트 헤더에 정의된 트랙 중 하나와 동일한 트랙 번호를 가져야 합니다. 또한 모든 프래그먼트는 프래그먼트 헤더에 정의된 각 트랙에 대해 하나 이상의 프레임을 포함해야 합니다.
-
각 프래그먼트는 프래그먼트 메타데이터에 정의된 각 트랙에 대해 하나 이상의 프레임을 포함해야 합니다.
-
프래그먼트에서 가장 이른 프레임 타임스탬프는 이전 프래그먼트의 최신 프레임 타임스탬프 이후여야 합니다.
-
MKV스트림이 두 개 이상의 MKV 세그먼트를 포함하거나 허용되지 않는 MKV 요소 (예:
track*
) 를 포함하는 경우에도 오류 확인이 발생합니다.
Kinesis Video Streams는 수신되는 각 프래그먼트와 관련 메타데이터를 소위 “청크”에 저장합니다. 프래그먼트 메타데이터에는 다음이 포함됩니다.
-
요청 시작 시 제공된 MKV 헤더
PutMedia
-
프래그먼트에 대한 다음과 같은 Kinesis Video Streams 관련 메타데이터:
-
server_timestamp
- Kinesis Video Streams가 프래그먼트 수신을 시작한 시점의 타임스탬프입니다. -
producer_timestamp
- 타임스탬프: 프로듀서가 프래그먼트 녹화를 시작한 시점의 타임스탬프. Kinesis Video Streams는 요청에서 받은 세 가지 정보를 사용하여 이 값을 계산합니다.-
요청 본문에서 프래그먼트와 함께 수신된 프래그먼트 타임코드 값입니다.
-
두 개의 요청 헤더:
producerStartTimestamp
(제작자가 녹화를 시작한 시점) 및fragmentTimeCodeType
(페이로드의 프래그먼트 타임코드가 절대적인지 상대적인지 여부).
그러면 Kinesis Video Streams는 다음과
producer_timestamp
같이 프래그먼트에 대한 값을 계산합니다.fragmentTimeCodeType
상대적인 값인 경우producer_timestamp
=producerStartTimeStamp
+ 프래그먼트 타임코드fragmentTimeCodeType
절대값인 경우producer_timestamp
= 프래그먼트 타임코드 (밀리초로 변환) -
-
Kinesis Video Streams에서 할당한 고유한 프래그먼트 번호입니다.
-
참고
GetMedia
요청을 하면 Kinesis Video Streams는 이러한 청크의 스트림을 반환합니다. 클라이언트는 필요에 따라 메타데이터를 처리할 수 있습니다.
참고
이 작업은 AWS SDK Java용 에서만 사용할 수 있습니다. 다른 언어에서는 AWS SDKs 지원되지 않습니다.
참고
Kinesis Video Streams는 를 통해 수집 및 보관하는 동안 코덱 개인 데이터를 파싱하고 검증하지 않습니다. PutMedia API KVS를 통해 스트림을 사용할 때 코덱 전용 데이터에서 MPEG -TS 및 프래그먼트 패키징에 필요한 정보를 추출하고 MP4 검증합니다. HLS APIs
참고
Kinesis Video Streams 미디어를 호출한 후 오류가 발생하는 경우API, HTTP 상태 코드 및 응답 본문 외에도 다음과 같은 정보가 포함됩니다.
-
x-amz-ErrorType
HTTP헤더 - HTTP 상태 코드가 제공하는 내용 외에도 보다 구체적인 오류 유형을 포함합니다. -
x-amz-RequestId
HTTP헤더 — 문제를 신고하려는 경우 지원 팀에서 요청 ID를 제공하면 문제를 더 잘 진단할 수 있습니다. AWS
HTTP상태 코드와 ErrorType 헤더를 모두 사용하여 오류를 재시도할 수 있는지 여부와 조건에 대해 프로그래밍 방식으로 결정할 수 있으며, 클라이언트 프로그래머가 성공적으로 다시 시도하기 위해 취해야 할 조치에 대한 정보도 제공할 수 있습니다.
Request Syntax
POST /putMedia HTTP/1.1
x-amzn-stream-name: StreamName
x-amzn-stream-arn: StreamARN
x-amzn-fragment-timecode-type: FragmentTimecodeType
x-amzn-producer-start-timestamp: ProducerStartTimestamp
Payload
URI요청 파라미터
요청은 다음 URI 파라미터를 사용합니다.
- FragmentTimecodeType
-
이 값을
x-amzn-fragment-timecode-type
HTTP 헤더로 전달합니다.프래그먼트 (페이로드, HTTP 요청 본문) 의 타임코드가 절대적인지 상대적인지를 나타냅니다.
producerStartTimestamp
Kinesis Video Streams는 개요에 설명된 대로 이 정보를 사용하여 요청에서 수신한 프래그먼트에 대해 계산합니다producer_timestamp
. API유효 값:
ABSOLUTE | RELATIVE
필수 사항 여부: 예
- ProducerStartTimestamp
-
이 값을
x-amzn-producer-start-timestamp
HTTP 헤더로 전달합니다.이는 프로듀서가 미디어 녹화를 시작한 시점의 프로듀서 타임스탬프입니다 (요청에 있는 특정 프래그먼트의 타임스탬프는 아님).
- StreamARN
-
이 값을 헤더로 전달합니다.
x-amzn-stream-arn
HTTP미디어 콘텐츠를 작성하려는 Kinesis 비디오 스트림의 Amazon 리소스 이름 (ARN). 를 지정하지 않는 경우 를 지정해야 합니다.
streamARN
streamName
길이 제약: 최소 길이 1. 최대 길이는 1024입니다.
패턴:
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
- StreamName
-
이 값을
x-amzn-stream-name
HTTP 헤더로 전달합니다.미디어 콘텐츠를 작성하려는 Kinesis 비디오 스트림의 이름입니다. 를 지정하지 않는 경우 를 지정해야 합니다.
streamName
streamARN
길이 제약: 최소 길이 1. 최대 길이는 256입니다.
Pattern:
[a-zA-Z0-9_.-]+
요청 본문
요청은 다음의 이진 데이터를 허용합니다.
- Payload
-
Kinesis 비디오 스트림에 쓸 미디어 콘텐츠입니다. 현재 구현에서 Kinesis Video Streams는 단일 세그먼트의 Matroska MKV () 컨테이너 형식만 지원합니다. MKV 세그먼트는 하나 이상의 클러스터를 포함할 수 있습니다.
참고
각 MKV 클러스터는 Kinesis 비디오 스트림 프래그먼트에 매핑됩니다. 어떤 클러스터 기간을 선택하든 프래그먼트 지속 시간이 됩니다.
Response Syntax
HTTP/1.1 200
Payload
Response Elements
작업이 성공하면 서비스는 HTTP 200개의 응답을 다시 보냅니다.
응답은 다음을 HTTP 본문으로 반환합니다.
- Payload
-
Kinesis Video Streams가 요청을 성공적으로
PutMedia
수신한 후 서비스는 요청 헤더를 검증합니다. 그러면 서비스가 페이로드 읽기를 시작하고 먼저 200 응답을 보냅니다. HTTP그러면 서비스는 줄바꿈으로 구분된 일련의 JSON 객체 (
Acknowledgement
객체) 를 포함하는 스트림을 반환합니다. 확인은 미디어 데이터가 전송되는 동일한 연결에서 수신됩니다. 요청에는 여러 개의 승인이 있을 수 있습니다.PutMedia
Acknowledgement
각각은 다음과 같은 키-값 쌍으로 구성됩니다.-
AckEventType
- 승인이 나타내는 이벤트 유형.-
버퍼링: Kinesis Video Streams가 프래그먼트를 수신하기 시작했습니다. Kinesis Video Streams는 프래그먼트 데이터의 첫 바이트가 수신되면 첫 번째 버퍼링 승인을 보냅니다.
-
수신: Kinesis Video Streams가 전체 프래그먼트를 수신했습니다. 데이터를 유지하도록 스트림을 구성하지 않은 경우 프로듀서는 이 확인을 받으면 프래그먼트의 버퍼링을 중단할 수 있습니다.
-
지속됨: Kinesis Video Streams가 프래그먼트를 유지했습니다 (예: Amazon S3에). 데이터를 유지하도록 스트림을 구성한 경우 이 승인을 받게 됩니다. 이 승인을 받은 후 제작자는 프래그먼트의 버퍼링을 중단할 수 있습니다.
-
오류: 프래그먼트를 처리하는 동안 Kinesis Video Streams에서 오류가 발생했습니다. 오류 코드를 검토하고 다음 조치를 결정할 수 있습니다.
-
유휴:
PutMedia
세션이 진행 중입니다. 하지만 Kinesis Video Streams는 현재 데이터를 수신하지 않습니다. Kinesis Video Streams는 마지막으로 데이터를 수신한 후 최대 30초 동안 주기적으로 이 확인 메시지를 전송합니다. 30초 내에 데이터가 수신되지 않으면 Kinesis Video Streams는 요청을 종료합니다.참고
이 확인은 생산자가 데이터를 전송하지 않는 경우에도
PutMedia
연결이 활성 상태인지 판단하는 데 도움이 될 수 있습니다.
-
-
FragmentTimecode
- 승인이 전송되는 프래그먼트 타임코드.가 Idle인 경우 요소가 누락될 수 있습니다.
AckEventType
-
FragmentNumber
- Kinesis Video Streams에서 생성한 프래그먼트 번호로서 확인이 전송됩니다. -
ErrorId
및ErrorCode
- 인 경우AckEventType
이 필드에 해당 오류Error
코드가 제공됩니다. 다음은 오류 IDs 및 해당 오류 코드 및 오류 메시지 목록입니다.-
4000 - STREAM READ _ ERROR - 데이터 스트림을 읽는 중 오류가 발생했습니다.
-
4001 - MAX _ FRAGMENT SIZE _ REACHED - 프래그먼트 크기가 최대 제한값인 50MB를 초과했습니다 (허용).
-
4002 - MAX _ FRAGMENT DURATION _ REACHED - 프래그먼트 지속 시간이 최대 허용 한도보다 깁니다.
-
4003 - MAX _ CONNECTION DURATION _ REACHED - 연결 기간이 최대 허용 임계값보다 깁니다.
-
4004 - FRAGMENT _ _ TIMECODE LESSER THAN _ PREVIOUS - 프래그먼트 타임코드가 이전 타임코드 타임 코드보다 작습니다 (
PutMedia
호출 내에서는 프래그먼트를 잘못된 순서로 보낼 수 없음). -
4005 - MORE _ _ THAN ALLOWED TRACKS _ FOUND - 에서 트랙이 두 개 이상 있습니다. MKV (더 이상 사용되지 않음)
-
4006 - INVALID _ MKV _ DATA - 입력 스트림을 유효한 형식으로 파싱하지 못했습니다. MKV
-
4007 - INVALID _ PRODUCER _ TIMESTAMP - 프로듀서 타임스탬프가 잘못되었습니다.
-
4008 - STREAM _ NOT _ ACTIVE - 스트림이 더 이상 존재하지 않음 (삭제됨).
-
4009 - FRAGMENT _ METADATA LIMIT _ REACHED - 프래그먼트 메타데이터 한도에 도달했습니다. 개발자 가이드의 제한 섹션을 참조하십시오.
-
4010 - TRACK NUMBER _ _ MISMATCH - MKV 프레임의 트랙 번호가 MKV 헤더의 트랙과 일치하지 않습니다.
-
4011 - FRAMES _ MISSING FOR _ TRACK - 헤더에 있는 트랙 중 하나 이상의 프레임이 프래그먼트에 포함되지 않았습니다. MKV
-
4012 - INVALID _ FRAGMENT _ METADATA - 프래그먼트 메타데이터 이름은 문자열로 시작할 수 없습니다.
AWS_
-
4500 - KMS _ KEY ACCESS _ DENIED - 스트림의 지정된 KMS 키에 대한 액세스가 거부되었습니다.
-
4501 - KMS _ KEY _ DISABLED - 스트림의 지정된 KMS 키가 비활성화되었습니다.
-
4502 - KMS _ KEY VALIDATION _ ERROR - 스트림의 지정된 KMS 키가 검증에 실패했습니다.
-
4503 - KMS _ KEY _ UNAVAILABLE - 스트림의 지정된 KMS 키를 사용할 수 없습니다.
-
4504 - KMS _ KEY INVALID _ USAGE - 스트림의 지정된 키가 잘못 사용되었습니다. KMS
-
4505 - KMS _ KEY INVALID _ STATE - 스트림의 지정된 KMS 키가 잘못된 상태입니다.
-
4506 - KMS _ KEY NOT _ FOUND - 스트림의 지정된 KMS 키를 찾을 수 없습니다.
-
5000 - INTERNAL _ ERROR - 내부 서비스 오류입니다.
-
5001 - ARCHIVAL _ ERROR - Kinesis Video Streams가 데이터 스토어에 프래그먼트를 지속시키지 못했습니다.
-
참고
제작자는 장기 실행
PutMedia
요청을 위해 페이로드를 전송하는 동안 응답을 읽고 승인을 받아야 합니다. 중간 프록시 서버의 버퍼링으로 인해 프로듀서가 동시에 많은 양의 승인을 받을 수 있습니다. 적시에 승인을 받고자 하는 프로듀서는 각 요청에서 보내는 프래그먼트의 수를 줄일 수 있습니다.PutMedia
-
Errors
모든 작업에 공통되는 오류에 대한 내용은 일반적인 오류 섹션을 참조하십시오.
- ClientLimitExceededException
-
허용된 클라이언트 호출 한도를 초과했기 때문에 Kinesis Video Streams가 요청 병목 현상을 일으켰습니다. 나중에 전화를 걸어 보세요.
HTTP상태 코드: 400
- ConnectionLimitExceededException
-
허용된 클라이언트 연결 제한을 초과했기 때문에 Kinesis Video Streams가 요청 병목 현상을 일으켰습니다.
HTTP상태 코드: 400
- InvalidArgumentException
-
이 입력 매개변수의 값이 유효하지 않습니다.
HTTP상태 코드: 400
- InvalidEndpointException
-
호출자가 잘못된 엔드포인트를 사용하여 스트림에 데이터를 썼습니다. 이러한 예외를 수신한 사용자는
APIName
setGetDataEndpoint
to로PUT_MEDIA
호출하고 응답의 엔드포인트를 사용하여 다음PutMedia
호출을 호출해야 합니다.HTTP상태 코드: 400
- NotAuthorizedException
-
호출자가 지정된 스트림에서 작업을 수행할 권한이 없거나 토큰이 만료되었습니다.
HTTP상태 코드: 401
- ResourceNotFoundException
-
상태 코드: 404, 지정한 이름의 스트림이 존재하지 않습니다.
HTTP상태 코드: 404
예시
승인 형식
승인 형식은 다음과 같습니다.
{ Acknowledgement : { "EventType": enum "FragmentTimecode": Long, "FragmentNumber": Long, "ErrorId" : String } }
참고
언어별 사용 방법에 대한 자세한 내용은 AWS SDKs 다음을 참조하십시오. API