Devoluciones de llamadas del productor SDK - Amazon Kinesis Video Streams

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Devoluciones de llamadas del productor SDK

Las clases y los métodos de Amazon Kinesis Video Streams SDK Producer no mantienen sus propios procesos. En su lugar, utilizan las llamadas y eventos de función de entrada para programar la comunicación de las devoluciones de llamadas con la aplicación.

Hay dos patrones de callback que la aplicación puede utilizar para interactuar con: SDK

  • CallbackProvider— Este objeto expone a la aplicación todas las devoluciones de llamada del componente code (PIC) independiente de la plataforma. Este patrón permite una funcionalidad completa, pero también significa que la implementación debe gestionar todos los API métodos y firmas públicos de la capa de C++.

  • StreamCallbackProvideryClientCallbackProvider: estos objetos exponen las devoluciones de llamada específicas de la secuencia y del cliente, y la capa C++ SDK expone el resto de las devoluciones de llamada. Este es el patrón de devolución de llamadas preferido para interactuar con el productor. SDK

El siguiente diagrama ilustra el modelo de objeto de los objetos de devolución de llamada:

Diagrama que muestra la interacción de productores y consumidores en Kinesis Video Streams.

En el diagrama anterior, DefaultCallbackProvider deriva de CallbackProvider (en el que se exponen todas las devoluciones de llamadaPIC) y contiene y. StreamCallbackProvider ClientCallbackProvider

ClientCallbackProvider

El objeto ClientCallbackProvider expone funciones de devolución de llamada de nivel de cliente. Los detalles de las funciones se describen en la sección ClientCallbacks estructura.

Métodos de devolución de llamada:

  • getClientReadyCallback— Indica que el cliente está preparado.

  • getStorageOverflowPressureCallback— Reporta el desbordamiento o la presión del almacenamiento. Esta devolución de llamada se invoca cuando el uso de almacenamiento cae por debajo del valor STORAGE_PRESSURE_NOTIFICATION_THRESHOLD, que es el 5 por ciento del tamaño de almacenamiento total. Para obtener más información, consulte StorageInfo.

StreamCallbackProvider

El objeto StreamCallbackProvider expone funciones de devolución de llamada de nivel de transmisión.

Métodos de devolución de llamada:

  • getDroppedFragmentReportCallback: notifica un fragmento eliminado.

  • getDroppedFrameReportCallback— Indica que se ha caído un fotograma.

  • getFragmentAckReceivedCallback— Indica que ACK se ha recibido un fragmento para la transmisión.

  • getStreamClosedCallback— Indica el estado de cierre de una transmisión.

  • getStreamConnectionStaleCallback— Indica una condición de conexión obsoleta. En esta condición, el productor envía datos al servicio pero no recibe confirmaciones.

  • getStreamDataAvailableCallback— Indica que los datos están disponibles en la transmisión.

  • getStreamErrorReportCallback— Indica una condición de error en la transmisión.

  • getStreamLatencyPressureCallback— Indica una condición de latencia de transmisión, que ocurre cuando el tamaño del búfer acumulado es mayor que el max_latency valor. Para obtener más información, consulte StreamDefinition/StreamInfo.

  • getStreamReadyCallback: —Indica una condición de preparación para la transmisión.

  • getStreamUnderflowReportCallback— Indica el estado de desbordamiento de un arroyo. Esta función no se utiliza actualmente y está reservada para su uso futuro.

Para ver el código fuente deStreamCallbackProvider, consulte StreamCallbackProvider.h.

ClientCallbacks estructura

La ClientCallbacks estructura contiene los puntos de entrada de la función de devolución de llamada PIC a los que llama cuando se producen eventos específicos. La estructura también contiene información de versión en el campo CALLBACKS_CURRENT_VERSION y un campo customData para datos definidos por el usuario que se devuelve con las funciones de devolución de llamada individuales.

La aplicación cliente puede utilizar un puntero this para que el campo custom_data asigne funciones de miembros a las funciones ClientCallback estáticas en tiempo de ejecución, tal como se muestra en el siguiente código de ejemplo:

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
Función Descripción Tipo
CreateDeviceFunc Actualmente no implementado en el backend. Esta llamada devuelve un error cuando llama desde Java o C++. Otros clientes realizan la inicialización específica de la plataforma. Backend API
CreateStreamFunc Se invoca cuando se crea la secuencia. Backend API
DescribeStreamFunc Se invoca cuando se invoca a DescribeStream. Backend API
GetStreamingEndpointFunc Se invoca cuando se invoca a GetStreamingEndpoint. Backend API
GetStreamingTokenFunc Se invoca cuando se invoca a GetStreamingToken. Backend API
PutStreamFunc Se invoca cuando se invoca a PutStream. Backend API
TagResourceFunc Se invoca cuando se invoca a TagResource. Backend API
     
CreateMutexFunc Crea una exclusión mutua de sincronización. Sincronización
FreeMutexFunc Libera la exclusión mutua. Sincronización
LockMutexFunc Bloquea la exclusión mutua de sincronización. Sincronización
TryLockMutexFunc Intenta bloquear la exclusión mutua. No implementada actualmente. Sincronización
UnlockMutexFunc Desbloquea la exclusión mutua. Sincronización
     
ClientReadyFunc Se invoca cuando el cliente entra en estado listo. Notification
DroppedFrameReportFunc Notifica cuando se elimina un fotograma. Notification
DroppedFragmentReportFunc Notifica cuando se elimina un fragmento. Esta función no se utiliza actualmente y está reservada para su uso futuro. Notification
FragmentAckReceivedFunc Se llama cuando se recibe un fragmento ACK (almacenado en búfer, recibido, persistente y error). Notification
StorageOverflowPressureFunc Se invoca cuando el uso de almacenamiento cae por debajo del valor STORAGE_PRESSURE_NOTIFICATION_THRESHOLD, que se define como el 5 por ciento del tamaño de almacenamiento total. Notification
StreamClosedFunc Se invoca cuando se transmiten los últimos bits de los fotogramas restantes. Notification
StreamConnectionStaleFunc Se invoca cuando la transmisión entra en un estado de conexión obsoleta. En esta condición, el productor envía datos al servicio pero no recibe reconocimientos. Notification
StreamDataAvailableFunc Se invoca cuando los datos de transmisión están disponibles. Notification
StreamErrorReportFunc Se invoca cuando se produce un error de transmisión. El cierre PIC automático de la transmisión en esta condición. Notification
StreamLatencyPressureFunc Se invoca cuando la transmisión entra en una condición de latencia, que es cuando el tamaño de búfer acumulado es mayor que el valor max_latency. Para obtener más información, consulte StreamDefinition/StreamInfo. Notification
StreamReadyFunc Se invoca cuando la transmisión entra en estado listo. Notification
StreamUnderflowReportFunc Esta función no se utiliza actualmente y está reservada para su uso futuro. Notification
     
DeviceCertToTokenFunc Devuelve el certificado de conexión como un token. Integración en la plataforma
GetCurrentTimeFunc Devuelve la hora actual. Integración en la plataforma
GetDeviceCertificateFunc Devuelve el certificado del dispositivo. Esta función no se utiliza actualmente y está reservada para su uso futuro. Integración en la plataforma
GetDeviceFingerprintFunc Devuelve la huella del dispositivo. Esta función no se utiliza actualmente y está reservada para su uso futuro. Integración en la plataforma
GetRandomNumberFunc Devuelve un número aleatorio entre 0 y RAND_MAX. Integración en la plataforma
GetSecurityTokenFunc Devuelve el token de seguridad que se pasa a las funciones que se comunican con el backendAPI. La implementación puede especificar el AccessKeyId en serie, SecretKeyId y el token de la sesión. Integración en la plataforma
LogPrintFunc Registra un línea de texto con la etiqueta y el nivel de registro. Para obtener más información, consulte PlatformUtils.h. Integración en la plataforma

Para las funciones de integración en la plataforma de la tabla anterior, el último parámetro es una estructura ServiceCallContext, que tiene los siguientes campos:

  • version: la versión de la estructura.

  • callAfter: tiempo absoluto tras el que se invoca la función.

  • timeout: el tiempo de espera de la operación en unidades de 100 nanosegundos.

  • customData: un valor definido por el usuario que transferir de vuelta al cliente.

  • pAuthInfo: las credenciales para la llamada. Para obtener más información, consulte la siguiente estructura (__AuthInfo).

La información de autorización se proporciona mediante la estructura __AuthInfo, que pueden ser credenciales serializadas o un token de autenticación específico del proveedor. Esta estructura tiene los campos siguientes:

  • version: la versión de la estructura __AuthInfo.

  • type: un valor AUTH_INFO_TYPE que define el tipo de la credencial (certificado o token de seguridad).

  • data: una matriz de bytes que contiene la información de autenticación.

  • size: el tamaño del parámetro data.

  • expiration: el vencimiento de las credenciales en unidades de 100 nanosegundos.

Implementaciones de callback para volver a intentar la transmisión

El Kinesis Video Producer SDK proporciona el estado de la transmisión mediante funciones de devolución de llamada. Le recomendamos que implemente los siguientes mecanismos de devolución de llamadas para recuperarse de cualquier problema momentáneo de red que se produzca durante la transmisión.

  • Retorno de llamada por presión de latencia de transmisión: este mecanismo de devolución de llamada se inicia cuando se SDK detecta una condición de latencia de transmisión. Esto ocurre cuando el tamaño del búfer acumulado es mayor que el valor MAX _LATENCY. Cuando se crea la transmisión, la aplicación de transmisión establece MAX _ LATENCY en el valor predeterminado de 60 segundos. La implementación típica de esta devolución de llamada es restablecer la conexión. Puedes usar el ejemplo de implementación en https://github.com/awslabs/amazon-kinesis-video-streamsproducer-sdk-cpp-/blob/master/ kinesis-video-c-producer StreamLatencyStateMachine /src/source/ .c según sea necesario. Ten en cuenta que no existe la opción de almacenar los marcos que no se hayan entregado debido a una interrupción de la red en un almacenamiento secundario para rellenarlos.

  • Retorno de llamada por inactividad de la transmisión: esta devolución de llamada se inicia cuando el productor puede enviar datos al servicio Amazon Kinesis Data Streams (enlace superior), pero no puede recuperar los acuses de recibo (almacenados en ACK búfer) a tiempo (el valor predeterminado es de 60 segundos). Según la configuración de la red, se puede iniciar la devolución de llamada por presión de latencia de la transmisión o la devolución de llamada por inactividad de la transmisión, o ambas. Al igual que en la devolución de llamada de presión de latencia de streaming, la implementación típica es restablecer la conexión e iniciar una nueva conexión para streaming. Puedes usar el ejemplo de implementación en https://github.com/awslabs/amazon-kinesis-video-streamsConnectionStaleStateMachine-producer-c/blob/master/src/source/ .c según sea necesario.

  • Error de transmisión de llamada: esta devolución de llamada se inicia cuando se agota el tiempo de espera en la conexión de red o se producen otros errores SDK durante la llamada al servicio de llamadas. KVS API

  • Retroceso de fotograma reducido: esta llamada se inicia cuando el almacenamiento está lleno, ya sea debido a una velocidad de red lenta o a un error de transmisión. Si la velocidad de la red hace que se pierdan fotogramas, puede aumentar el tamaño del almacenamiento, reducir el tamaño del fotograma del vídeo o la velocidad de fotogramas para que coincida con la velocidad de la red.