

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Estruturas do SDK do produtor
<a name="producer-reference-structures-producer"></a>

Esta seção inclui informações sobre estruturas que você pode usar para fornecer dados ao objeto Kinesis Video Streams Producer.

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

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

Os **DefaultDeviceInfoProvider**objetos **DeviceInfo**e controlam o comportamento do objeto Kinesis Video Streams Producer.

### Campos de membros
<a name="producer-reference-structures-producer-deviceinfo-fields"></a>
+ **versão** — Um valor inteiro usado para garantir que a versão correta da estrutura seja usada com a versão atual da base de código. A versão atual é especificada usando a macro `DEVICE_INFO_CURRENT_VERSION`.
+ **nome** — O nome legível por humanos para o dispositivo.
+ **Contagem de tags/tags** — Não usado atualmente.
+ **StreamCount** — O número máximo de streams que o dispositivo pode suportar. Inicialmente, isso pré-aloca o armazenamento dos ponteiros aos objetos de streaming, mas os objetos de streaming reais são criados posteriormente. O padrão é 16 streamings, mas isso pode ser alterado no arquivo `DefaultDeviceInfoProvider.cpp`.
+ **storageInfo**: um objeto que descreve a configuração do armazenamento principal. Para obter mais informações, consulte [StorageInfo](#producer-reference-structures-producer-storageinfo).

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

Especifica a configuração do armazenamento principal para o Kinesis Video Streams.

A implementação padrão é baseada em uma implementação de heap rápido de baixa fragmentação, que é otimizada para streaming. Ela usa o alocador `MEMALLOC`, que pode ser substituído em uma plataforma determinada. Algumas plataformas têm alocação de memória virtual sem suporte à alocação com páginas físicas. À medida que a memória for usada, as páginas virtuais serão baseadas nas páginas físicas. Isso resultará em pressão de memória insuficiente em todo o sistema quando o armazenamento for subutilizado.

Calcule o tamanho do armazenamento padrão com base na fórmula a seguir. O `DefragmentationFactor` deve ser definido como 1,2 (20 por cento).

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

No exemplo a seguir, um dispositivo tem streamings de áudio e de vídeo. O streaming de áudio tem 512 amostras por segundo, com uma amostra média de 100 bytes. O streaming de vídeo tem 25 quadros por segundo, com uma média de 10.000 bytes. Cada fluxo tem 3 minutos de duração do buffer.

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

Se o dispositivo tiver mais memória disponível, recomendamos que você adicione mais memória ao armazenamento para evitar fragmentação severa. 

Verifique se o tamanho do armazenamento é adequado para acomodar os buffers completos de todos os fluxos com alta complexidade de codificação (quando o tamanho do quadro é maior devido ao alto movimento) ou quando a largura de banda é baixa. Se o produtor atingir a pressão da memória, ele emitirá retornos de chamada de pressão de estouro de armazenamento (). `StorageOverflowPressureFunc` No entanto, quando não há memória disponível no armazenamento de conteúdo, ela descarta o quadro que está sendo enviado para o Kinesis Video Streams com um `STATUS_STORE_OUT_OF_MEMORY = 0x5200002e` erro (). Para obter mais informações, consulte [Códigos de erro e status retornados pela biblioteca cliente](producer-sdk-errors.md#producer-sdk-errors-client). Isso também pode acontecer se as confirmações do aplicativo (ACKs) não estiverem disponíveis ou se as persistentes estiverem atrasadas. ACKs Nesse caso, os buffers são preenchidos até a capacidade de “duração do buffer” antes que os quadros anteriores comecem a desaparecer.

### Campos de membros
<a name="producer-reference-structures-producer-storageinfo-fields"></a>
+ **versão** — Um valor inteiro usado para garantir que a versão correta da estrutura seja usada com a versão atual da base de código.
+ **StorageType** — `DEVICE_STORAGE_TYPE` uma enumeração que especifica o suporte subjacente e a implementação do armazenamento. Atualmente, o único valor suportado é `DEVICE_STORAGE_TYPE_IN_MEM`. Uma implementação futura oferecerá suporte ao `DEVICE_STORAGE_TYPE_HYBRID_FILE` indicando que o armazenamento retorna para o armazenamento de conteúdo baseado em arquivos.
+ **StorageSize** — O tamanho do armazenamento em bytes a ser pré-alocado. A alocação mínima é de 10 MB, e a máxima é de 10 GB. (Isso será alterado na implementação futura do armazenamento de conteúdo com base em arquivos.)
+ **SpillRatio** — Um valor inteiro que representa a porcentagem do armazenamento a ser alocado do tipo de armazenamento direto de memória (RAM), em oposição ao armazenamento secundário de estouro (armazenamento de arquivos). Não utilizado no momento.
+ **rootDirectory**: o caminho para o diretório onde o armazenamento de conteúdo baseado em arquivos está localizado. Não utilizado no momento.