

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

# 생산자 SDK 구조
<a name="producer-reference-structures-producer"></a>

이 섹션에는 Kinesis Video Streams 생산자 객체에 데이터를 제공하는 데 사용할 수 있는 구조에 대한 정보가 포함되어 있습니다.

**Topics**
+ [DeviceInfo/ DefaultDeviceInfoProvider](#producer-reference-structures-producer-deviceinfo)
+ [StorageInfo](#producer-reference-structures-producer-storageinfo)

## DeviceInfo/ DefaultDeviceInfoProvider
<a name="producer-reference-structures-producer-deviceinfo"></a>

**DeviceInfo** 및 **DefaultDeviceInfoProvider** 객체는 Kinesis Video Streams Producer 객체의 동작을 제어합니다.

### 멤버 필드
<a name="producer-reference-structures-producer-deviceinfo-fields"></a>
+ **version** - 올바른 버전의 구조가 코드 베이스의 현재 버전과 함께 사용되는지 확인하는 데 사용되는 정수 값입니다. 현재 버전은 `DEVICE_INFO_CURRENT_VERSION` 매크로를 사용하여 지정됩니다.
+ **name** - 사람이 읽을 수 있는 디바이스의 이름입니다.
+ **tagCount/tags** – 현재 사용되지 않습니다.
+ **streamCount** - 디바이스가 처리할 수 있는 최대 스트림 수입니다. 이 값은 초기에 포인터를 위한 스토리지를 스트림 객체에 미리 할당하지만 실제 스트림 객체는 나중에 생성됩니다. 기본값은 16스트림이지만 `DefaultDeviceInfoProvider.cpp` 파일에서 이 수를 변경할 수 있습니다.
+ **storageInfo**: 기본 스토리지 구성을 설명하는 객체입니다. 자세한 내용은 [StorageInfo](#producer-reference-structures-producer-storageinfo) 단원을 참조하십시오.

## StorageInfo
<a name="producer-reference-structures-producer-storageinfo"></a>

Kinesis Video Streams의 기본 스토리지 구성을 지정합니다.

기본 구현은 스트리밍에 최적화된 빠른 힙의 낮은 조각화를 기반으로 합니다. 주어진 플랫폼에 중복 기재가 가능한 `MEMALLOC` 할당자를 사용합니다. 어떤 플랫폼은 피지컬 페이지로 할당을 지원하지 않아도 가상 메모리가 할당됩니다. 메모리가 사용될 때 가상 페이지는 피지컬 페이지로 지원됩니다. 결과적으로 스토리지가 충분히 사용되지 않을 때에도 전체 시스템에 메모리 부족 압력이 발생합니다.

다음 수식을 기반으로 기본 스토리지 크기를 계산합니다. `DefragmentationFactor`를 1.2(20퍼센트)로 설정해야 합니다.

```
Size = NumberOfStreams * AverageFrameSize * FramesPerSecond * BufferDurationInSeconds * DefragmentationFactor
```

다음 예제에서는 디바이스에 오디오 및 비디오 스트림이 있습니다. 오디오 스트림의 초당 샘플 수는 512이며 샘플은 평균 100바이트입니다. 비디오 스트림의 초당 프레임 수는 25이며 평균 10,000바이트입니다. 각 스트림의 버퍼 지속 시간은 3분입니다.

```
Size = (512 * 100 * (3 * 60) + 25 * 10000 * (3 * 60)) * 1.2 = (9216000 + 45000000) * 1.2 = 65059200 = ~ 66MB.
```

디바이스에 사용 가능한 메모리가 더 있는 경우 심각한 조각화를 방지하기 위해 스토리지에 메모리를 더 추가하는 것이 좋습니다.

높은 인코딩 복잡성(높은 모션으로 인해 프레임 크기가 더 큰 경우) 또는 대역폭이 낮은 경우 스토리지 크기가 모든 스트림의 전체 버퍼를 수용하기에 적합한지 확인합니다. 생산자가 메모리 압력에 도달하면 스토리지 오버플로 압력 콜백()을 내보냅니다`StorageOverflowPressureFunc`. 그러나 콘텐츠 스토어에서 메모리를 사용할 수 없는 경우 오류()와 함께 Kinesis Video Streams로 푸시되는 프레임을 삭제합니다`STATUS_STORE_OUT_OF_MEMORY = 0x5200002e`. 자세한 내용은 [클라이언트 라이브러리에서 반환한 오류 및 상태 코드](producer-sdk-errors.md#producer-sdk-errors-client) 단원을 참조하십시오. 애플리케이션 승인(ACK)을 사용할 수 없거나 지속적인 ACK가 표시되는 경우에도 이 결과가 발생할 수 있습니다. 이 경우 버퍼는 이전 프레임이 삭제되기 전에 "버퍼 기간" 용량으로 채워집니다.

### 멤버 필드
<a name="producer-reference-structures-producer-storageinfo-fields"></a>
+ **version** - 올바른 버전의 구조가 코드 베이스의 현재 버전과 함께 사용되는지 확인하는 데 사용되는 정수 값입니다.
+ **storageType** - 스토리지의 기본 백업 및 구현을 지정하는 `DEVICE_STORAGE_TYPE` 열거입니다. 현재 지원되는 값은 `DEVICE_STORAGE_TYPE_IN_MEM`입니다. 향후 구현에서는 `DEVICE_STORAGE_TYPE_HYBRID_FILE`이 지원되어, 스토리지가 파일 지원 콘텐츠 저장소로 다시 돌아갈 예정입니다.
+ **storageSize** - 사전 할당할 스토리지 크기입니다. 최소 할당은 10MB이고, 최대 할당은 10GB입니다. (이 값은 파일 지원 콘텐츠 스토어의 향후 구현에서 변경됩니다.)
+ **spillRatio** - 보조 오버플로 스토리지(파일 스토리지)와 달리 직접 메모리 스토리지 유형(RAM)에서 할당할 스토리지의 백분율을 나타내는 정수 값입니다. 현재 사용 중이지 않습니다.
+ **rootDirectory**: 파일 지원 콘텐츠 저장소가 있는 디렉터리의 경로입니다. 현재 사용 중이지 않습니다.