

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Richiamate SDK di Producer
<a name="producer-reference-callbacks"></a>

Le classi e i metodi dell'SDK Amazon Kinesis Video Streams Producer non mantengono processi propri. Vengono, invece, utilizzate le chiamate di funzione in ingresso e gli eventi per programmare callback e comunicare con l'applicazione.

Sono disponibili due modelli di callback che l'applicazione può utilizzare per interagire con l'SDK:
+ `CallbackProvider`— Questo oggetto espone ogni callback dal componente PIC (Platform-Independent Code) all'applicazione. Questo modello consente di eseguire questa funzionalità, ma anche significa che l'implementazione deve gestire tutti i metodi API pubblici e le firme nel livello C\$1\$1.
+ [StreamCallbackProvider](#producer-reference-callbacks-streamcallbackprovider)e [ClientCallbackProvider](#producer-reference-callbacks-clientcallbackprovider) — Questi oggetti espongono i callback specifici dello stream e del client, mentre il livello C\$1\$1 dell'SDK espone il resto dei callback. Questo è il modello di callback preferito per interagire con l'SDK Producer.

Il seguente diagramma mostra il modello di oggetti callback:

![\[Diagramma che mostra l'interazione tra produttori e consumatori in Kinesis Video Streams.\]](http://docs.aws.amazon.com/it_it/kinesisvideostreams/latest/dg/images/callbacks-10.png)


Nel diagramma precedente, `DefaultCallbackProvider` deriva da `CallbackProvider` (che espone tutti i callback nel PIC) e contiene `StreamCallbackProvider` e `ClientCallbackProvider`.

**Topics**
+ [ClientCallbackProvider](#producer-reference-callbacks-clientcallbackprovider)
+ [StreamCallbackProvider](#producer-reference-callbacks-streamcallbackprovider)
+ [ClientCallbacks struttura](#producer-reference-callbacks-clientcallbacks)
+ [Implementazioni di callback per riprovare lo streaming](#producer-reference-callbacks-retry)

## ClientCallbackProvider
<a name="producer-reference-callbacks-clientcallbackprovider"></a>

L'oggetto `ClientCallbackProvider` espone le funzioni di callback a livello di client. I dettagli delle funzioni sono descritti nella sezione [ClientCallbacks struttura](#producer-reference-callbacks-clientcallbacks).

**Metodi di callback:**
+ `getClientReadyCallback`— Indica lo stato di disponibilità per il cliente.
+ `getStorageOverflowPressureCallback`— Segnala il sovraccarico o la pressione dello storage. Questo callback viene chiamato quando l'utilizzo dello storage è inferiore al valore `STORAGE_PRESSURE_NOTIFICATION_THRESHOLD`, pari al 5% delle dimensioni dello spazio di archiviazione generale. Per ulteriori informazioni, consulta [StorageInfo](producer-reference-structures-producer.md#producer-reference-structures-producer-storageinfo).

## StreamCallbackProvider
<a name="producer-reference-callbacks-streamcallbackprovider"></a>

L'oggetto `StreamCallbackProvider` espone le funzioni di callback a livello di flusso.

**Metodi di callback:**
+ `getDroppedFragmentReportCallback`: segnala un frammento interrotto.
+ `getDroppedFrameReportCallback`— Segnala un frame perso.
+ `getFragmentAckReceivedCallback`— Segnala che è stato ricevuto un frammento ACK per lo stream.
+ `getStreamClosedCallback`— Segnala una condizione di chiusura dello stream.
+ `getStreamConnectionStaleCallback`— Segnala una condizione di connessione obsoleta. In questa condizione, il produttore invia dati al servizio ma non riceve riconoscimenti.
+ `getStreamDataAvailableCallback`— Segnala che i dati sono disponibili nello stream.
+ `getStreamErrorReportCallback`— Segnala una condizione di errore dello stream.
+ `getStreamLatencyPressureCallback`— Segnala una condizione di latenza del flusso, ovvero quando la dimensione del buffer accumulato è maggiore del valore. `max_latency` Per ulteriori informazioni, consulta [StreamDefinition/StreamInfo](producer-reference-structures-stream.md#producer-reference-structures-stream-streaminfo).
+ `getStreamReadyCallback`: —Segnala una condizione di disponibilità dello stream.
+ `getStreamUnderflowReportCallback`— Segnala una condizione di sottoflusso del flusso. Questa funzione non è attualmente utilizzata ed è riservata per utilizzi futuri.

Per il codice sorgente di`StreamCallbackProvider`, vedere [StreamCallbackProvider.h.](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/d1684599a141785752582c16264e3123866f3cf8/kinesis-video-producer/src/StreamCallbackProvider.h)

## ClientCallbacks struttura
<a name="producer-reference-callbacks-clientcallbacks"></a>

La struttura `ClientCallbacks` contiene i punti di accesso della funzione di callback che il PIC chiama quando si verificano determinati eventi. La struttura, inoltre, contiene le informazioni sulla versione nel campo `CALLBACKS_CURRENT_VERSION` e un campo `customData` per i dati definiti dall'utente che vengono restituiti con le singole funzioni di callback.

L'applicazione client può utilizzare un puntatore `this` per il campo `custom_data` per mappare le funzioni membro per le funzioni statiche `ClientCallback` in fase di runtime, come mostra il seguente codice di esempio: 

```
STATUS TestStreamCallbackProvider::streamClosedHandler(UINT64 custom_data, STREAM_HANDLE stream_handle, UINT64 stream_upload_handle) {
    LOG_INFO("Reporting stream stopped.");

TestStreamCallbackProvider* streamCallbackProvider = reinterpret_cast<TestStreamCallbackProvider*> (custom_data);
streamCallbackProvider->streamClosedHandler(...);
```


**Eventi**  

| Funzione | Description | Tipo | 
| --- | --- | --- | 
| CreateDeviceFunc | Non attualmente implementato nel back-end. Questa chiamata ha esito negativo quando viene effettuata da Java o C\$1\$1. Altri client eseguono l'inizializzazione specifica per piattaforma. | API di back-end | 
| CreateStreamFunc | Chiamata al momento della creazione del flusso | API di back-end | 
| DescribeStreamFunc | Chiamata con DescribeStream. | API di back-end | 
| GetStreamingEndpointFunc | Chiamata con GetStreamingEndpoint. | API di back-end | 
| GetStreamingTokenFunc | Chiamata con GetStreamingToken. | API di back-end | 
| PutStreamFunc | Chiamata con PutStream. | API di back-end | 
| TagResourceFunc | Chiamata con TagResource. | API di back-end | 
|   |   |   | 
| CreateMutexFunc | Crea un mutex per la sincronizzazione. | Sincronizzazione | 
| FreeMutexFunc | Libera il mutex. | Sincronizzazione | 
| LockMutexFunc | Blocca il mutex di sincronizzazione. | Sincronizzazione | 
| TryLockMutexFunc | Tenta di bloccare il mutex. Non attualmente implementato. | Sincronizzazione | 
| UnlockMutexFunc | Sblocca il mutex. | Sincronizzazione | 
|   |   |   | 
| ClientReadyFunc | Viene chiamato quando il client entra nello stato pronto. | Notification | 
| DroppedFrameReportFunc | Segnala quando un fotogramma viene interrotto. | Notification | 
| DroppedFragmentReportFunc | Segnala quando un frammento viene interrotto. Questa funzione non è attualmente utilizzata ed è riservata per utilizzi futuri. | Notification | 
| FragmentAckReceivedFunc | Viene chiamato quando viene ricevuto un frammento ACK (buffering, ricevuto, persistente e di errore). | Notification | 
| StorageOverflowPressureFunc | Chiamato quando l'utilizzo dello storage è al di sotto del valore STORAGE\$1PRESSURE\$1NOTIFICATION\$1THRESHOLD, pari al 5% delle dimensioni dello spazio di archiviazione generale. | Notification | 
| StreamClosedFunc | Chiamato quando vengono trasmessi gli ultimi bit dei fotogrammi rimanenti. | Notification | 
| StreamConnectionStaleFunc | Chiamato quando il flusso entra in uno stato di connessione obsoleto. In questa condizione, il produttore invia dati al servizio, ma non riceve conferme. | Notification | 
| StreamDataAvailableFunc | Chiamato quando sono disponibili i dati di flusso. | Notification | 
| StreamErrorReportFunc | Chiamato quando si verifica un errore di flusso. Il PIC chiude automaticamente il flusso in questa condizione. | Notification | 
| StreamLatencyPressureFunc | Chiamato quando il flusso entra in una condizione di latenza, quando la dimensione del buffer accumulata è superiore al valore max\$1latency. Per ulteriori informazioni, consulta [StreamDefinition/StreamInfo](producer-reference-structures-stream.md#producer-reference-structures-stream-streaminfo). | Notification | 
| StreamReadyFunc | Viene chiamato quando il flusso entra nello stato pronto. | Notification | 
| StreamUnderflowReportFunc | Questa funzione non è attualmente utilizzata ed è riservata per utilizzi futuri. | Notification | 
|   |   |   | 
| DeviceCertToTokenFunc | Restituisce il certificato di connessione come token. | Integrazione con la piattaforma | 
| GetCurrentTimeFunc | Restituisce l'orario attuale. | Integrazione con la piattaforma | 
| GetDeviceCertificateFunc | Restituisce il certificato del dispositivo. Questa funzione non è attualmente utilizzata ed è riservata per utilizzi futuri. | Integrazione con la piattaforma | 
| GetDeviceFingerprintFunc | Restituisce l'impronta del dispositivo. Questa funzione non è attualmente utilizzata ed è riservata per utilizzi futuri. | Integrazione con la piattaforma | 
| GetRandomNumberFunc | Restituisce un numero casuale compreso tra 0 e RAND\$1MAX. | Integrazione con la piattaforma | 
| GetSecurityTokenFunc | Restituisce il token di sicurezza passato alle funzioni che comunicano con l'API di backend. L'implementazione è in grado di specificare i AccessKeyId e SecretKeyId serializzati e il token della sessione. | Integrazione con la piattaforma | 
| LogPrintFunc | Registra una riga di testo con il tag e il livello di log. Per ulteriori informazioni, consulta PlatformUtils.h. | Integrazione con la piattaforma | 

Per le funzioni di integrazione della piattaforma nella tabella precedente, l'ultimo parametro è una struttura `ServiceCallContext`, che include i campi riportati di seguito:
+ `version`: la versione della strut.
+ `callAfter`: un tempo assoluto dopo il quale per chiamare la funzione.
+ `timeout`: il timeout dell'operazione in unità di 100 nanosecondi.
+ `customData`: un valore definito dall'utente da passare al client.
+ `pAuthInfo`: le credenziali per la chiamata. Per maggiori informazioni, consultare la seguente struttura (`__AuthInfo`).

Le informazioni di autorizzazione vengono fornite utilizzando la struttura `__AuthInfo` che può essere credenziali serializzate o un token di autenticazione specifico del provider. Questa struttura include i campi riportati di seguito:
+ `version`: la versione della struttura `__AuthInfo`.
+ `type`: un valore `AUTH_INFO_TYPE` che definisce il tipo di credenziale (certificato o token di sicurezza).
+ `data`: un array di byte contenente le informazioni di autenticazione.
+ `size`: la dimensione del parametro `data`.
+ `expiration`: la scadenza delle credenziali in unità di 100 nanosecondi.

## Implementazioni di callback per riprovare lo streaming
<a name="producer-reference-callbacks-retry"></a>

Kinesis Video Producer SDK fornisce lo stato dello streaming tramite le funzioni di callback. Ti consigliamo di implementare i seguenti meccanismi di callback per risolvere eventuali problemi di rete momentanei riscontrati durante lo streaming.
+ **Richiamata della pressione della latenza dello stream**: questo meccanismo di callback viene avviato quando l'SDK rileva una condizione di latenza del flusso. Ciò accade quando la dimensione del buffer accumulato è maggiore del valore MAX\$1LATENCY. Quando il flusso viene creato, l'applicazione di streaming imposta MAX\$1LATENCY sul valore predefinito di 60 secondi. L'implementazione tipica per questo callback è il ripristino della connessione. [È possibile utilizzare l'implementazione di esempio in -/.c secondo necessità. https://github.com/awslabs/ amazon-kinesis-video-streams producer-sdk-cpp blob/master/kinesis-video-c-producer/src/source/StreamLatencyStateMachine](https://github.com/awslabs/amazon-kinesis-video-streams-producer-c/blob/master/src/source/StreamLatencyStateMachine.c) Tieni presente che non è possibile archiviare i frame non consegnati a causa di un'interruzione della rete in uno storage secondario per il riempimento. 
+ **Stream staleness callback**: questo callback viene avviato quando il produttore può inviare dati al servizio Amazon Kinesis Data Streams (uplink) ma non è in grado di recuperare i riconoscimenti (ACK bufferizzato) indietro nel tempo (l'impostazione predefinita è 60 secondi). A seconda delle impostazioni di rete, è possibile avviare lo stream latency pressure callback o lo stream staleness callback, oppure entrambi. Analogamente all'implementazione del nuovo tentativo di callback di utilizzo della latenza del flusso, l'implementazione tipica consiste nel ripristinare la connessione e avviare una nuova connessione per lo streaming. È possibile utilizzare l'implementazione di esempio in [https://github.com/awslabs/amazon-kinesis-video-streams-producer- .c in base alle esigenze](https://github.com/awslabs/amazon-kinesis-video-streams-producer-c/blob/master/src/source/ConnectionStaleStateMachine.c). c/blob/master/src/source/ConnectionStaleStateMachine 
+ **Stream error callback**: questo callback viene avviato quando l'SDK rileva un timeout sulla connessione di rete o altri errori durante la chiamata alle chiamate al servizio API KVS. 
+ **Dropped frame callback**: questo callback viene avviato quando lo spazio di archiviazione è pieno, a causa della bassa velocità di rete o di un errore di streaming. Se la velocità della rete comporta la perdita di fotogrammi, è possibile aumentare le dimensioni di archiviazione, ridurre le dimensioni dei fotogrammi video o la frequenza dei fotogrammi in modo che corrisponda alla velocità della rete.