

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Kinesis Video Streams 데이터 모델
<a name="how-data"></a>

[Kinesis Video Streams에 업로드](producer-sdk.md) 및 [파서 라이브러리를 사용하여 카메라의 출력 보기](parser-library.md)가 비디오 데이터와 함께 정보를 포함하는 것을 지원하는 형식으로 비디오 데이터를 전송하고 수신합니다. 이 형식은 Matroska(MKV) 사양을 기반으로 합니다.

[MKV 형식](https://en.wikipedia.org/wiki/Matroska)은 미디어 데이터에 적용되는 공개 사양입니다. *Amazon Kinesis Video Streams 개발자 안내서*의 모든 라이브러리 및 코드 예제는 MKV 형식으로 데이터를 전송하거나 수신합니다.

는 `StreamDefinition` 및 `Frame` 유형을 [Kinesis Video Streams에 업로드](producer-sdk.md) 사용하여 MKV 스트림 헤더, 프레임 헤더 및 프레임 데이터를 생성합니다.

전체 MKV 사양에 관한 내용은 [Matroska 사양](https://www.matroska.org/technical/specs/index.html)을 참조하십시오.

다음 단원에서는 [C\+\+](producer-sdk-cpp.md)에 의해 생성되는 MKV 형식 데이터의 구성 요소를 설명합니다.

**Topics**
+ [스트림 헤더 요소](#how-data-header-streamdefinition)
+ [스트림 트랙 데이터](#how-data-header-streamtrack)
+ [프레임 헤더 요소](#how-data-header-frame)
+ [MKV 프레임 데이터](#how-data-frame)

## 스트림 헤더 요소
<a name="how-data-header-streamdefinition"></a>

다음과 같은 MKV 헤더 요소는 `StreamDefinition`에 의해 사용됩니다(`StreamDefinition.h`에 정의되어 있음).


****  

| 요소 | 설명 | 일반적인 값 | 
| --- | --- | --- | 
| stream\_name | Kinesis 비디오 스트림의 이름에 해당합니다. | my-stream | 
| retention\_period | Kinesis Video Streams에서 스트림 데이터를 유지하는 시간 단위의 지속 시간입니다. 데이터를 보존하지 않는 스트림에 0 대해를 지정합니다. | 24 | 
| tags | 사용자 데이터의 키-값 모음입니다. 이 데이터는 AWS Management Console 에 표시되며, 클라이언트 애플리케이션이 읽어 필터링하거나 스트림에 관한 정보를 얻을 수 있습니다. |  | 
| kms\_key\_id | 있는 경우 사용자 정의 AWS KMS 키를 사용하여 스트림의 데이터를 암호화합니다. 없는 경우 데이터는 Kinesis에서 제공한 키()로 암호화됩니다aws/kinesisvideo. | 01234567-89ab-cdef-0123-456789ab | 
| streaming\_type | 현재 유효한 유일한 스트리밍은 STREAMING\_TYPE\_REALTIME입니다. | STREAMING\_TYPE\_REALTIME | 
| content\_type | 사용자 정의 콘텐츠 유형입니다. 콘솔에서 재생할 비디오 데이터 스트리밍의 경우 콘텐츠 유형이 video/h264이어야 합니다. | video/h264 | 
| max\_latency | 이 값은 현재 사용되지 않으므로 0으로 설정해야 합니다. | 0 | 
| fragment\_duration | 이는 조각 길이의 추정치로서 최적화에 사용됩니다. 실제 조각 지속 시간은 스트리밍 데이터에 의해 결정됩니다. | 2 | 
| timecode\_scale | 프레임 타임스탬프에 사용되는 스케일을 나타냅니다. 기본값은 1밀리초입니다. `0`을 지정하면 기본값 1밀리초도 할당됩니다. 이 값은 100나노초에서 1초 사이일 수 있습니다.<br />자세한 내용은 Matroska 설명서의 [TimecodeScale](https://matroska.org/technical/specs/notes.html#TimecodeScale)을 참조하십시오. |  | 
| key\_frame\_fragmentation | true인 경우, 키프레임 수신 시 스트림이 새 클러스터를 시작합니다. | true | 
| frame\_timecodes | true인 경우 Kinesis Video Streams는 수신된 프레임의 프레젠테이션 타임스탬프(pts) 및 디코딩 타임스탬프(dts) 값을 사용합니다. false인 경우 Kinesis Video Streams는 프레임이 수신될 때 시스템 생성 시간 값으로 스탬핑합니다. | true | 
| absolute\_fragment\_time |  true인 경우 클러스터 타임코드가 절대 시간(예: 생산자 시스템 시계의 값)을 사용하는 것으로 해석됩니다. false인 경우, 클러스터 타임코드가 스트림 시작 시간에 상대적인 것으로 해석됩니다. | true | 
| fragment\_acks |  true인 경우 Kinesis Video Streams가 데이터를 수신하면 승인(ACKs)이 전송됩니다. ACK는 KinesisVideoStreamFragmentAck 또는 KinesisVideoStreamParseFragmentAck 콜백을 사용하여 수신할 수 있습니다. | true | 
| restart\_on\_error | 스트림 오류가 발생한 후 스트림이 전송을 다시 시작해야 하는지 여부를 나타냅니다. | true | 
| nal\_adaptation\_flags | 콘텐츠에 NAL(Network Abstraction Layer) 적응 또는 코덱 프라이빗 데이터가 존재하는지를 나타냅니다. 유효한 플래그에는 NAL\_ADAPTATION\_ANNEXB\_NALS 및 NAL\_ADAPTATION\_ANNEXB\_CPD\_NALS가 있습니다. | NAL\_ADAPTATION\_ANNEXB\_NALS | 
| frame\_rate | 콘텐츠 프레임 속도의 추정치입니다. 이 값은 최적화에 사용되며, 실제 프레임 속도는 수신 데이터의 속도에 의해 결정됩니다. 0을 지정하면 기본값 24가 할당됩니다. | 24 | 
| avg\_bandwidth\_bps | Mbps 단위의 콘텐츠 대역폭 추정치입니다. 이 값은 최적화에 사용되며, 실제 속도는 수신 데이터의 대역폭에 따라 결정됩니다. 예를 들어, 25FPS로 실행되는 720p 해상도 비디오 스트림의 경우 평균 대역폭을 5Mbps로 예상할 수 있습니다. | 5 | 
| buffer\_duration | 콘텐츠가 생산자에서 버퍼링되는 기간입니다. 네트워크 지연 시간이 짧으면이 값을 줄일 수 있습니다. 네트워크 지연 시간이 높으면 할당으로 프레임을 더 작은 버퍼에 넣지 못하기 때문에이 값을 늘리면 프레임이 전송되기 전에 삭제되지 않습니다. |  | 
| replay\_duration | 연결이 끊어질 경우 비디오 데이터 스트림이 "다시 시작"되는 시간입니다. 연결 손실로 인해 손실된 프레임이 문제가 되지 않는 경우이 값은 0이 될 수 있습니다. 소비하는 애플리케이션이 중복 프레임을 제거할 수 있는 경우 값을 늘릴 수 있습니다. 이 값은 버퍼 기간보다 작아야 합니다. 그렇지 않으면 버퍼 기간이 사용됩니다. |  | 
| connection\_staleness | 수신 데이터가 없을 경우 연결이 유지되는 기간입니다. |  | 
| codec\_id | 콘텐츠에 사용되는 코덱입니다. 자세한 내용은 Matroska 사양의 [CodecID](https://matroska.org/technical/specs/codecid/index.html)를 참조하십시오. | V\_MPEG2 | 
| track\_name | 사용자가 정의하는 트랙 이름입니다. | my\_track | 
| codecPrivateData | 프레임 데이터를 디코딩하는 목적으로 사용되며 인코더에 의해 제공되는 데이터(예: 프레임 픽셀의 높이 및 폭)로서, 다수의 다운스트림 소비자가 필요로 합니다. [C\+\+ 생산자 라이브러리](producer-sdk-cpp.md)에서의 gMkvTrackVideoBits 배열에는 프레임의 픽셀 너비와 높이가 MkvStatics.cpp 포함됩니다. |  | 
| codecPrivateDataSize | codecPrivateData 파라미터에 있는 데이터의 크기입니다. |  | 
| track\_type | 스트림에 대한 트랙의 유형입니다. | MKV\_TRACK\_INFO\_TYPE\_AUDIO 또는 MKV\_TRACK\_INFO\_TYPE\_VIDEO | 
| segment\_uuid | 사용자 정의 세그먼트 uuid(16바이트)입니다. |  | 
| default\_track\_id | 트랙에 대한 고유한 0이 아닌 숫자입니다. | 1 | 

## 스트림 트랙 데이터
<a name="how-data-header-streamtrack"></a>

다음과 같은 MKV 트랙 요소는 `StreamDefinition`에 의해 사용됩니다(`StreamDefinition.h`에 정의되어 있음).


****  

| 요소 | 설명 | 일반적인 값 | 
| --- | --- | --- | 
| track\_name | 사용자 정의 트랙 이름입니다. 예를 들어, 오디오 트랙의 경우 "audio"입니다. | audio | 
| codec\_id | 트랙에 대한 코덱 ID입니다. 예를 들어, 오디오 트랙의 경우 "A\_AAC"입니다. | A\_AAC | 
| cpd | 프레임 데이터의 디코딩에 사용되는, 인코더에서 제공하는 데이터입니다. 이 데이터에는 다수의 다운스트림 소비자가 필요로 하는 프레임 픽셀의 폭 및 높이가 포함될 수 있습니다. [C\+\+ 생산자 라이브러리](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/producer-sdk-cpp.html)에서 MkvStatics.cpp의 gMkvTrackVideoBits 배열에는 프레임의 픽셀 너비와 높이가 포함됩니다. |  | 
| cpd\_size | codecPrivateData 파라미터에 있는 데이터의 크기입니다. |  | 
| track\_type | 트랙의 유형입니다. 예를 들어, 오디오의 경우 MKV\_TRACK\_INFO\_TYPE\_AUDIO의 열거 값을 사용할 수 있습니다. | MKV\_TRACK\_INFO\_TYPE\_AUDIO | 

## 프레임 헤더 요소
<a name="how-data-header-frame"></a>

`Frame`은 다음 MKV 헤더 요소를 사용합니다(`KinesisVideoPic` 패키지의 `mkvgen/Include.h`에 정의).
+ **프레임 인덱스:** 단순 증가 값.
+ **플래그:** 프레임의 유형 유효 값에는 다음이 포함됩니다.
  + `FRAME_FLAGS_NONE`
  + `FRAME_FLAG_KEY_FRAME`: `key_frame_fragmentation`가 스트림에 설정되어 있는 경우, 키 프레임이 새 조각을 시작합니다.
  + `FRAME_FLAG_DISCARDABLE_FRAME`: 디코딩이 느린 경우 이 프레임을 무시할 수 있음을 디코더에 알립니다.
  + `FRAME_FLAG_INVISIBLE_FRAME`: 이 블록의 지속 시간은 0입니다.
+ **디코딩 타임스탬프:**이 프레임이 디코딩된 시간의 타임스탬프입니다. 이전 프레임이 디코딩을 위해이 프레임에 의존하는 경우이 타임스탬프는 이전 프레임보다 이전일 수 있습니다. 이 값은 조각의 시작을 기준으로 합니다.
+ **프레젠테이션 타임스탬프:**이 프레임이 표시되는 시점의 타임스탬프입니다. 이 값은 조각의 시작을 기준으로 합니다.
+ **지속 시간:** 프레임의 재생 시간입니다.
+ **크기** 프레임 데이터의 바이트 단위 크기입니다.

## MKV 프레임 데이터
<a name="how-data-frame"></a>

`frame.frameData`에 있는 데이터는 사용되는 인코딩 스키마에 따라 프레임에 대한 미디어 데이터만 포함할 수도 있고, 더 중첩된 헤더 정보를 포함할 수도 있습니다. 에 표시하려면 AWS Management Console데이터를 [H.264](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC) 코덱에 인코딩해야 하지만 Kinesis Video Streams는 모든 형식으로 시간 직렬화된 데이터 스트림을 수신할 수 있습니다.