

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

# Kinesis Video Streams API 및 생산자 라이브러리 지원
<a name="how-it-works-kinesis-video-api-producer-sdk"></a>

Kinesis Video Streams는 스트림을 생성 및 관리하고 스트림에서 미디어 데이터를 읽거나 쓸 수 있는 APIs를 제공합니다. Kinesis Video Streams 콘솔은 관리 기능 외에도 라이브 및 video-on-demand 재생도 지원합니다. 또한 Kinesis Video Streams는 애플리케이션 코드에서 미디어 소스에서 데이터를 추출하고 Kinesis 비디오 스트림에 업로드하는 데 사용할 수 있는 생산자 라이브러리 세트도 제공합니다.

**Topics**
+ [Kinesis Video Streams API](#how-it-works-kinesis-video-api)
+ [엔드포인트 검색 패턴](#how-it-works-api-pattern)
+ [생산자 라이브러리](#how-it-works-producer-sdk)

## Kinesis Video Streams API
<a name="how-it-works-kinesis-video-api"></a>

Kinesis Video Streams는 Kinesis Video Streams를 생성하고 관리하기 위한 APIs를 제공합니다. 다음과 같이 미디어 데이터를 읽고 스트림에 쓸 수 있는 API도 제공합니다.
+ **생산자 API** - Kinesis Video Streams는 Kinesis 비디오 스트림에 미디어 데이터를 쓰는 `PutMedia` API를 제공합니다. `PutMedia` 요청에서 생산자는 미디어 조각 스트림을 전송합니다. *조각*은 독립적인 프레임 시퀀스입니다. 조각에 속한 프레임은 다른 조각의 어떤 프레임에 대한 종속성도 없어야 합니다. 자세한 내용은 [PutMedia](API_dataplane_PutMedia.md) 단원을 참조하십시오.

  조각이 도착하면 Kinesis Video Streams는 고유한 조각 번호를 순서대로 할당합니다. 또한 각 조각에 대한 생산자 측 및 서버 측 타임스탬프를 Kinesis Video Streams별 메타데이터로 저장합니다.
+ **소비자 APIs**- 소비자는 다음 APIs 사용하여 스트림에서 데이터를 가져올 수 있습니다.
  + `GetMedia` - 이런 API를 사용할 때 소비자는 시작 조각을 식별해야 합니다. 그런 다음 API가 스트림에 추가되는 순서대로 조각을 반환합니다(조각 번호가 증가하는 순서대로). 조각에 있는 미디어 데이터는 [Matroska(MKV)](https://www.matroska.org/technical/specs/index.html)와 같은 구조화 형식으로 압축됩니다. 자세한 내용은 [GetMedia](API_dataplane_GetMedia.md) 단원을 참조하십시오.
**참고**  
`GetMedia`는 조각이 어디에 있는지 압니다(데이터 스토어에 보관되거나 실시간으로 사용 가능). 예를 들어, `GetMedia`가 시작 조각이 보관되어 있다고 판단하는 경우 데이터 스토어로부터 조각을 반환하기 시작합니다. 아직 아카이브되지 않은 최신 조각을 반환해야 하는 경우는 인 메모리 스트림 버퍼에서 조각을 읽는 것으로 `GetMedia` 전환합니다.

    이는 스트림에 의해 수집되는 순서대로 조각을 처리하는 지속적 소비자의 예입니다.

    `GetMedia`는 비디오 처리 애플리케이션이 실패하거나 뒤쳐지는 경우 추가적인 작업 없이 따라잡을 수 있도록 합니다. 애플리케이션은 `GetMedia`를 사용하여 데이터 스토어에 보관되어 있는 데이터를 처리하고, 애플리케이션이 따라잡으면서 `GetMedia`가 계속하여 미디어 데이터를 데이터가 도착하는 대로 실시간으로 공급합니다.
  + `GetMediaFromFragmentList` (및 `ListFragments`) - 배치 처리 애플리케이션은 오프라인 소비자로 간주됩니다. 오프라인 소비자는 `ListFragments` 및 `GetMediaFromFragmentList` API를 조합하여 특정 미디어 조각이나 비디오 범위를 명시적으로 가져올 수 있습니다. `ListFragments` 및 `GetMediaFromFragmentList`는 애플리케이션이 특정 시간 범위 혹은 조각 범위에 대해 비디오 조각을 식별한 다음 순차적으로 혹은 병렬로 가져와 처리할 수 있게 해 줍니다. 이와 같은 접근 방식은 대량의 데이터를 병렬로 신속하게 처리해야 하는 `MapReduce` 애플리케이션 제품군에 적합합니다.

    예를 들어, 소비자가 하루 동안의 비디오 조각을 처리해야 하는 경우를 가정해 보겠습니다. 소비자는 다음을 수행할 것입니다.

    1. `ListFragments` API를 호출하고 시간 범위를 지정하여 원하는 조각 모음을 선택하여 조각 목록을 가져옵니다.

       API는 지정된 범위 안에 있는 모든 조각으로부터 메타데이터를 반환합니다. 메타데이터는 조각 번호, 생산자 측 및 서버 측 타임스탬프 등과 같은 정보를 제공합니다.

    1. 조각 메타데이터 목록을 취하고 임의의 순서대로 조각을 검색합니다. 예를 들어 해당 날짜의 모든 조각을 처리하기 위해 소비자는 목록을 하위 목록으로 분할하고 작업자(예: 여러 Amazon EC2 인스턴스)가를 사용하여 조각을 병렬로 가져`GetMediaFromFragmentList`와 병렬로 처리하도록 선택할 수 있습니다.

다음 다이어그램은 이들 API 호출 동안의 조각 및 청크의 데이터 흐름을 보여 줍니다.

![\[API 호출 동안의 조각 및 청크의 데이터 흐름을 보여 주는 다이어그램\]](http://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/images/arch-20.png)


생산자가 `PutMedia` 요청을 전송할 때 페이로드에 있는 미디어 메타데이터를 전송한 다음 미디어 데이터 조각의 시퀀스를 전송합니다. 데이터를 수신하면 Kinesis Video Streams는 수신 미디어 데이터를 Kinesis Video Streams 청크로 저장합니다. 각 청크는 다음과 같은 요소로 구성됩니다.
+ 미디어 메타데이터의 사본
+ 조각
+ Kinesis Video Streams별 메타데이터. 예: 조각 번호, 서버 측 및 생산자 측 타임스탬프

소비자가 미디어 메타데이터를 요청하면 Kinesis Video Streams는 요청에 지정한 조각 번호부터 시작하여 청크 스트림을 반환합니다.

스트림에서 조각을 수신한 후 스트림에 대한 데이터 지속성을 활성화하면 Kinesis Video Streams는 조각의 복사본도 데이터 스토어에 저장합니다.

## 엔드포인트 검색 패턴
<a name="how-it-works-api-pattern"></a>

**컨트롤 플레인 REST APIs**

[Kinesis Video Streams 컨트롤 플레인 REST APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html)에 액세스하려면 [Kinesis Video Streams 서비스 엔드포인트](https://docs.aws.amazon.com//general/latest/gr/akv.html#akv_region)를 사용합니다.

**데이터 영역 REST APIs**

Kinesis Video Streams는 더 나은 규모 조정 및 트래픽 격리 속성을 보장하기 위해 [셀룰러 아키텍처](https://docs.aws.amazon.com//wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/what-is-a-cell-based-architecture.html)를 사용하여 구축되었습니다. 각 스트림은 리전의 특정 셀에 매핑되므로 애플리케이션은 스트림이 매핑된 올바른 셀별 엔드포인트를 사용해야 합니다. 데이터 영역 REST APIs에 액세스할 때는 올바른 엔드포인트를 직접 관리하고 매핑해야 합니다. 엔드포인트 검색 패턴인 이 프로세스는 아래에 설명되어 있습니다.

1. 엔드포인트 검색 패턴은 `GetEndpoints` 작업 중 하나에 대한 호출로 시작됩니다. 이러한 작업은 컨트롤 플레인에 속합니다.

   1. [Amazon Kinesis Video Streams 미디어](API_Operations_Amazon_Kinesis_Video_Streams_Media.md) 또는 [Amazon Kinesis Video Streams 아카이브된 미디어](API_Operations_Amazon_Kinesis_Video_Streams_Archived_Media.md) 서비스의 엔드포인트를 검색하는 경우를 사용합니다[GetDataEndpoint](API_GetDataEndpoint.md).

   1. [Amazon Kinesis Video Signaling 채널](API_Operations_Amazon_Kinesis_Video_Signaling_Channels.md), [Amazon Kinesis Video WebRTC 스토리지](API_Operations_Amazon_Kinesis_Video_WebRTC_Storage.md)또는 [Kinesis Video Signaling](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html)의 엔드포인트를 검색하는 경우를 사용합니다[GetSignalingChannelEndpoint](API_GetSignalingChannelEndpoint.md).

1. 엔드포인트를 캐시하고 재사용합니다.

1. 캐시된 엔드포인트가 더 이상 작동하지 않는 경우를 새로 호출`GetEndpoints`하여 엔드포인트를 새로 고칩니다.

## 생산자 라이브러리
<a name="how-it-works-producer-sdk"></a>

Kinesis 비디오 스트림을 생성한 후 스트림으로 데이터 전송을 시작할 수 있습니다. 애플리케이션 코드에서 이러한 라이브러리를 사용하여 미디어 소스에서 데이터를 추출하고 Kinesis 비디오 스트림에 업로드할 수 있습니다. 사용 가능한 생산자 라이브러리에 대한 자세한 내용은 [Kinesis Video Streams에 업로드](producer-sdk.md) 단원을 참조하십시오.