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:
En el diagrama anterior, DefaultCallbackProvider
deriva de CallbackProvider
(en el que se exponen todas las devoluciones de llamadaPIC) y contiene y. StreamCallbackProvider
ClientCallbackProvider
Este tema contiene las siguientes secciones:
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 valorSTORAGE_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 elmax_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(...);
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 valorAUTH_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ámetrodata
. -
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.