Rellamadas del SDK del productor - 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.

Rellamadas del SDK del productor

Las clases y los métodos del SDK para productores de Amazon Kinesis Video Streams 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.

Existen dos patrones de devolución de llamada que puede utilizar la aplicación para interactuar con el SDK:

  • CallbackProvider— Este objeto expone todas las llamadas enviadas desde el componente de código independiente de la plataforma (PIC) a la aplicación. Este patrón permite funcionalidad completa, pero también significa que la implementación debe gestionar todos los métodos de la API pública y las firmas en la capa C++.

  • StreamCallbackProvidery ClientCallbackProvider — Estos objetos exponen las devoluciones de llamada específicas de la transmisión y del cliente, y la capa C++ del SDK expone el resto de las devoluciones de llamada. Este es el patrón de devolución de llamada preferido para interactuar con el SDK Producer.

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 se deriva de CallbackProvider (que expone todas las devoluciones de llamada en el PIC) y contiene StreamCallbackProvider y 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.

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 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 se ha recibido un fragmento de ACK 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 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 un uso futuro.

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

ClientCallbacks estructura

La estructura de ClientCallbacks contiene los puntos de entrada de la función de devolución de llamada que invoca el PIC 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. API de backend
CreateStreamFunc Se invoca cuando se crea la secuencia. API de backend
DescribeStreamFunc Se invoca cuando se invoca a DescribeStream. API de backend
GetStreamingEndpointFunc Se invoca cuando se invoca a GetStreamingEndpoint. API de backend
GetStreamingTokenFunc Se invoca cuando se invoca a GetStreamingToken. API de backend
PutStreamFunc Se invoca cuando se invoca a PutStream. API de backend
TagResourceFunc Se invoca cuando se invoca a TagResource. API de backend
     
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 un uso futuro. Notification
FragmentAckReceivedFunc Se invoca cuando se recibe un ACK (almacenado en búfer, recibido, almacenado de forma persistente y error) de fragmento. 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 PIC cierra automáticamente la transmisión con 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 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 un 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 un uso futuro. Integración en la plataforma
GetDeviceFingerprintFunc Devuelve la huella del dispositivo. Esta función no se utiliza actualmente y está reservada para un 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 la API de backend. 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 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 SDK de Kinesis Video Producer proporciona el estado de streaming a través de funciones de devolución de llamada. Te recomendamos que implementes los siguientes mecanismos de devolución de llamadas para recuperarte 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 el 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 de MAX_LATENCY. Cuando se crea la secuencia, la aplicación de streaming 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-streams - producer-sdk-cpp /blob/master/ kinesis-video-c-producer /src/source/ .c según sea necesario. StreamLatencyStateMachine Tenga 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 (ACK almacenado en 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-streams ConnectionStaleStateMachine -producer-c/blob/master/src/source/ .c según sea necesario.

  • Reclamación por error de transmisión: esta llamada se inicia cuando el SDK detecta un tiempo de espera en la conexión de red u otros errores durante la llamada a las llamadas al servicio de la API de KVS.

  • Retroceso de fotogramas interrumpidos: 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.