Retornos de chamada do SDK do produtor - Amazon Kinesis Video Streams

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

Retornos de chamada do SDK do produtor

As classes e métodos no SDK do Amazon Kinesis Video Streams Producer não mantêm seus próprios processos. Em vez disso, eles usam as chamadas e eventos da função de entrada para programar retornos de chamada para se comunicar com o aplicativo.

Há dois padrões de retorno de chamada que o aplicativo pode usar para interagir com o SDK:

  • CallbackProvider— Esse objeto expõe cada retorno de chamada do componente de código independente da plataforma (PIC) para o aplicativo. Esse padrão permite funcionalidade total, mas também significa que a implementação deve tratar todos os métodos de API pública e assinaturas na camada do C++.

  • StreamCallbackProvidere ClientCallbackProvider — Esses objetos expõem os retornos de chamada específicos do stream e do cliente, e a camada C++ do SDK expõe o restante dos retornos de chamada. Esse é o padrão de retorno preferencial para interagir com o Producer SDK.

O diagrama a seguir ilustra o modelo de objeto dos objetos de retorno de chamada:

Diagrama mostrando a interação de produtores e consumidores no Kinesis Video Streams.

No diagrama anterior, DefaultCallbackProvider deriva de CallbackProvider (que expõe todos os retornos de chamada no PIC) e contém StreamCallbackProvider e ClientCallbackProvider.

ClientCallbackProvider

O objeto ClientCallbackProvider expõe as funções de retorno no nível do cliente. Os detalhes das funções são descritos na seção ClientCallbacks.

Métodos de retorno de chamada:

  • getClientReadyCallback— Relata um estado pronto para o cliente.

  • getStorageOverflowPressureCallback— Relata sobrecarga ou pressão de armazenamento. Esse retorno de chamada é feito quando a utilização do armazenamento fica abaixo do valor de STORAGE_PRESSURE_NOTIFICATION_THRESHOLD, que é de 5% do tamanho total do armazenamento. Para ter mais informações, consulte StorageInfo.

StreamCallbackProvider

O objeto StreamCallbackProvider expõe as funções de retorno no nível do streaming.

Métodos de retorno de chamada:

  • getDroppedFragmentReportCallback: relata um fragmento descartado.

  • getDroppedFrameReportCallback— Relata um quadro perdido.

  • getFragmentAckReceivedCallback— Relata que um fragmento ACK foi recebido para o fluxo.

  • getStreamClosedCallback— Relata uma condição de riacho fechado.

  • getStreamConnectionStaleCallback— Relata uma condição de conexão obsoleta. Nessa condição, o produtor está enviando dados para o serviço, mas não está recebendo confirmações.

  • getStreamDataAvailableCallback— Relata que os dados estão disponíveis no stream.

  • getStreamErrorReportCallback— Relata uma condição de erro de transmissão.

  • getStreamLatencyPressureCallback— Relata uma condição de latência do stream, que ocorre quando o tamanho do buffer acumulado é maior que o max_latency valor. Para ter mais informações, consulte StreamDefinition/StreamInfo.

  • getStreamReadyCallback: —Relata uma condição de prontidão do fluxo.

  • getStreamUnderflowReportCallback— Relata uma condição de subfluxo do riacho. Essa função não é usada atualmente e está reservada para uso futuro.

Para obter o código-fonte deStreamCallbackProvider, consulte StreamCallbackProvider.h.

ClientCallbacks estrutura

A estrutura de ClientCallbacks contém os pontos de entrada da função de retorno de chamada que o PIC chama quando ocorrerem eventos específicos. A estrutura também contém informações sobre a versão no campo CALLBACKS_CURRENT_VERSION e um campo customData de dados definidos pelo usuário que é retornado com funções de retorno de chamada individuais.

O aplicativo cliente pode usar um ponteiro this para o campo custom_data para mapear as funções de membro para as funções ClientCallback estáticas em tempo de execução, conforme mostrado no seguinte código de exemplo:

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(...);
Eventos
Função Descrição Tipo
CreateDeviceFunc Não implementado no back-end atualmente. Essa chamada falha quando chamada do Java ou do C++. Outros clientes executam inicialização específica à plataforma. API de back-end
CreateStreamFunc Chamada quando o streaming é criado. API de back-end
DescribeStreamFunc Chamada quando DescribeStream é chamado. API de back-end
GetStreamingEndpointFunc Chamada quando GetStreamingEndpoint é chamado. API de back-end
GetStreamingTokenFunc Chamada quando GetStreamingToken é chamado. API de back-end
PutStreamFunc Chamada quando PutStream é chamado. API de back-end
TagResourceFunc Chamada quando TagResource é chamado. API de back-end
     
CreateMutexFunc Cria um mutex de sincronização. Sincronização
FreeMutexFunc Libera o mutex. Sincronização
LockMutexFunc Bloqueia o mutex de sincronização. Sincronização
TryLockMutexFunc Tenta bloquear o mutex. Não implementado no momento. Sincronização
UnlockMutexFunc Desbloqueia o mutex. Sincronização
     
ClientReadyFunc Chamada quando o cliente entra em estado de pronto. Notificação
DroppedFrameReportFunc Relata quando um quadro é descartado. Notificação
DroppedFragmentReportFunc Relata quando um fragmento é descartado. Essa função não é usada atualmente e está reservada para uso futuro. Notificação
FragmentAckReceivedFunc Chamada quando uma ACK (armazenamento em buffer, recebida, persistida e erro) de fragmento é recebida. Notificação
StorageOverflowPressureFunc Chamada quando a utilização do armazenamento fica abaixo do valor de STORAGE_PRESSURE_NOTIFICATION_THRESHOLD, que é definido como 5% do tamanho total do armazenamento. Notificação
StreamClosedFunc Chamada quando os últimos bits dos quadros restantes são transmitidos. Notificação
StreamConnectionStaleFunc Chamada quando o streaming entra em um estado de conexão obsoleta. Nessa condição, o produtor está enviando dados ao serviço, mas não está recebendo confirmações. Notificação
StreamDataAvailableFunc Chamada quando os dados do streaming estão disponíveis. Notificação
StreamErrorReportFunc Chamada quando ocorre um erro de streaming. O PIC fecha automaticamente o streaming sob essa condição. Notificação
StreamLatencyPressureFunc Chamada quando o streaming entra em uma condição de latência, que é quando o tamanho do buffer acumulado é maior que o valor de max_latency. Para ter mais informações, consulte StreamDefinition/StreamInfo. Notificação
StreamReadyFunc Chamada quando o streaming entra em estado de pronto. Notificação
StreamUnderflowReportFunc Essa função não é usada atualmente e está reservada para uso futuro. Notificação
     
DeviceCertToTokenFunc Retorna o certificado da conexão como um token. Integração de plataformas
GetCurrentTimeFunc Retorna a hora atual. Integração de plataformas
GetDeviceCertificateFunc Retorna o certificado do dispositivo. Essa função não é usada atualmente e está reservada para uso futuro. Integração de plataformas
GetDeviceFingerprintFunc Retorna a impressão digital do dispositivo. Essa função não é usada atualmente e está reservada para uso futuro. Integração de plataformas
GetRandomNumberFunc Retorna um número aleatório entre 0 e RAND_MAX. Integração de plataformas
GetSecurityTokenFunc Retorna o token de segurança que é passado para as funções que se comunicam com a API de back-end. A implementação pode especificar os AccessKeyId, SecretKeyId e o token de sessão serializados. Integração de plataformas
LogPrintFunc Registra em log uma linha de texto com a tag e o nível do log. Para ter mais informações, consulte PlatformUtils.h. Integração de plataformas

Para as funções de integração de plataformas na tabela anterior, o último parâmetro é uma estrutura ServiceCallContext que tem os seguintes campos:

  • version: a versão do struct.

  • callAfter: um horário absoluto após o qual chamar a função.

  • timeout: o tempo limite da operação em 100 unidades de nanossegundo.

  • customData: um valor definido pelo usuário a ser passado de volta para o cliente.

  • pAuthInfo: as credenciais para a chamada. Para obter mais informações, consulte a estrutura (__AuthInfo) a seguir.

As informações de autorização são fornecidas usando a estrutura __AuthInfo, que podem ser credenciais serializadas ou um token de autenticação específico ao provedor. Esta estrutura tem os seguintes campos:

  • version: a versão da estrutura de __AuthInfo.

  • type: um valor de AUTH_INFO_TYPE que define o tipo de credencial (certificado ou token de segurança).

  • data: uma matriz de bytes que contém as informações de autenticação.

  • size: o tamanho do parâmetro data.

  • expiration: a expiração das credenciais em 100 unidades de nanossegundo.

Implementações de retorno de chamada para repetir o streaming

O Producer SDK do Kinesis Video fornece o status de streaming por meio de funções de retorno de chamada. Recomendamos que você implemente os seguintes mecanismos de retorno de chamada para se recuperar de quaisquer problemas momentâneos de rede encontrados durante o streaming.

  • Callback de pressão de latência de stream — esse mecanismo de callback é iniciado quando o SDK encontra uma condição de latência de stream. Isso acontece quando o tamanho do buffer acumulado é maior que o valor de MAX_LATENCY. Quando o streaming é criado, o aplicativo de streaming define MAX_LATENCY para o valor padrão de 60 segundos. A implementação típica para esse retorno de chamada é a redefinição da conexão. Você pode usar o exemplo de implementação em https://github.com/awslabs/ amazon-kinesis-video-streams - producer-sdk-cpp /blob/master/ kinesis-video-c-producer /src/source/ StreamLatencyStateMachine .c conforme necessário. Observe que não há opção de armazenar os quadros não entregues devido à interrupção da rede em um armazenamento secundário para preenchimento.

  • Retorno de chamada de inatividade do stream — esse retorno de chamada é iniciado quando o produtor pode enviar dados para o serviço Amazon Kinesis Data Streams (uplink), mas não consegue recuperar as confirmações (ACK em buffer) a tempo (o padrão é 60 segundos). Dependendo das configurações de rede, o retorno de chamada de pressão de latência do fluxo ou o retorno de chamada de inatividade do fluxo, ou ambos, podem ser iniciados. Semelhante à implementação de nova tentativa do retorno de chamada de pressão de latência do streaming, a implementação típica é a redefinição da conexão e o início de uma nova conexão para streaming. Você pode usar o exemplo de implementação em https://github.com/awslabs/ amazon-kinesis-video-streams ConnectionStaleStateMachine -producer-c/blob/master/src/source/ .c conforme necessário.

  • Retorno de chamada de erro de transmissão - esse retorno de chamada é iniciado quando o SDK encontra um tempo limite na conexão de rede ou outros erros durante a chamada para as chamadas do serviço da API KVS.

  • Retorno de chamada de quadro perdido - esse retorno de chamada é iniciado quando o tamanho do armazenamento está cheio devido à baixa velocidade da rede ou a um erro de transmissão. Se a velocidade da rede resultar em queda de quadros, você poderá aumentar o tamanho do armazenamento, reduzir o tamanho do quadro do vídeo ou a taxa de quadros para corresponder à velocidade da rede.