Callback dell'SDK Producer - Amazon Kinesis Video Streams

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à.

Callback dell'SDK Producer

I corsi di formazione e i metodi nell'SDK Producer di Amazon Kinesis Video Streams non mantengono i propri processi. 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 di codice indipendente dalla piattaforma (PIC) 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++.

  • StreamCallbackProvidereClientCallbackProvider: Questi oggetti espongono i callback specifici del flusso e il livello C ++ 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 di producer e consumer in Kinesis Video Streams.

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

ClientCallbackProvider

L'oggetto ClientCallbackProvider espone le funzioni di callback a livello di client. I dettagli delle funzioni sono descritti nella sezione ClientCallbacks.

Metodi di callback:

  • getClientReadyCallback: segnala lo stato pronto per il client.

  • getStorageOverflowPressureCallback: segnala l'overflow di storage o di pressione. 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 la pagina StorageInfo .

StreamCallbackProvider

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

Metodi di callback:

  • getDroppedFragmentReportCallback: segnala un frammento interrotto.

  • getDroppedFrameReportCallback: segnala un fotogramma interrotto.

  • getFragmentAckReceivedCallback: segnala un frammento ACK ricevuto per il flusso.

  • getStreamClosedCallback: segnala una condizione flusso chiusa.

  • getStreamConnectionStaleCallback: segnala una condizione di connessione obsoleta. In questa condizione, il produttore invia dati al servizio, ma non riceve conferme.

  • getStreamDataAvailableCallback: segnala che i dati sono disponibili nel flusso.

  • getStreamErrorReportCallback: segnala una condizione di errore del flusso.

  • getStreamLatencyPressureCallback: segnala una condizione di latenza del flusso, quando la dimensione del buffer accumulata è superiore al valore max_latency. Per ulteriori informazioni, consulta la pagina StreamDefinition/ StreamInfo .

  • getStreamReadyCallback: segnala una condizione di idoneità del flusso.

  • getStreamUnderflowReportCallback: segnala una condizione di underflow del flusso. Questa funzione non è attualmente utilizzata ed è riservata a un uso futuro.

Per il codice sorgente perStreamCallbackProvider, consultaStreamCallbackProvider.h.

Struttura del ClientCallbacks

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 Descrizione Tipo
CreateDeviceFunc Non attualmente implementato nel back-end. Questa chiamata ha esito negativo quando viene effettuata da Java o C++. 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 a un uso futuro. 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_PRESSURE_NOTIFICATION_THRESHOLD, 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_latency. Per ulteriori informazioni, consulta la pagina StreamDefinition/ StreamInfo . Notification
StreamReadyFunc Viene chiamato quando il flusso entra nello stato pronto. Notification
StreamUnderflowReportFunc Questa funzione non è attualmente utilizzata ed è riservata a un uso futuro. 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 a un uso futuro. Integrazione con la piattaforma
GetDeviceFingerprintFunc Restituisce l'impronta del dispositivo. Questa funzione non è attualmente utilizzata ed è riservata a un uso futuro. Integrazione con la piattaforma
GetRandomNumberFunc Restituisce un numero casuale compreso tra 0 e RAND_MAX. Integrazione con la piattaforma
GetSecurityTokenFunc Restituisce il token di sicurezza passato alle funzioni che comunicano con le API di back-end. 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 la pagina 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

Kinesis Video Producer SDK fornisce lo stato dello streaming tramite le funzioni di callback. È consigliabile implementare i seguenti meccanismi di callback per il ripristino da eventuali problemi di rete momentanei riscontrati durante lo streaming.

  • Callback di utilizzo della latenza del flusso - Questo meccanismo di callback viene attivato quando l'SDK rileva una condizione di latenza del flusso. Ciò accade quando la dimensione del buffer accumulato è maggiore del valore MAX_LATENCY. Quando il flusso viene creato, l'applicazione di streaming imposta MAX_LATENCY sul valore predefinito di 60 secondi. L'implementazione tipica per questo callback è il ripristino della connessione. È possibile utilizzare l'implementazione di esempio suhttps://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/kinesis-video-c-producer/src/source/StreamLatencyStateMachinec.se necessario. Tieni presente che non esiste alcuna opzione per archiviare i frame non consegnati a causa di un'interruzione della rete in uno storage secondario per il back-fill.

  • Callback di obsolescenza del flusso - Questo callback viene attivato quando il produttore può inviare dati al servizio AWS KVS (uplink) ma non è in grado di recuperare i riconoscimenti (ACK nel buffer) a ritroso nel tempo (il valore predefinito è 60 secondi). A seconda delle impostazioni di rete, può essere attivato il callback di utilizzo della latenza del flusso o il callback di obsolescenza del flusso o 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 suhttps://github.com/awslabs/amazon-kinesis-video-streams-producer-c/blob/master/src/source/ConnectionStaleStateMachinec.se necessario.

  • Callback di errore di flusso - Questo callback viene attivato quando l'SDK rileva un timeout sulla connessione di rete o altri errori durante la chiamata alle chiamate del servizio API KVS.

  • Callback di frame interrotti - Questo callback viene attivato quando la dimensione dello storage è esaurita a causa della bassa velocità della rete o di un errore del flusso. Se la velocità della rete determina l'interruzione dei frame, puoi aumentare la dimensione dello storage, ridurre la dimensione o la frequenza dei frame video in modo che corrisponda alla velocità della rete.