La API de /osc/checkForUpdates
identifica las actualizaciones de estado comparando el último stateFingerprint
conocido del cliente con el fingerprint
actual de la cámara.
Nombre |
Tipo |
Descripción |
stateFingerprint |
String |
Huella digital del estado de la cámara desde la última vez que el cliente llamó a /osc/state o /osc/checkForUpdates . |
waitTimeout |
Número entero (opcional) |
Cantidad de segundos que se debe esperar a que ocurra un cambio de estado en la cámara antes de devolver la respuesta. Cuando waitTimeout venza, la cámara debería mostrar una respuesta, incluso si no cambió la huella dactilar. Si se detecta un cambio de estado antes de que venza waitTimeout , o si se omite waitTimeout , la cámara debería mostrar la respuesta de inmediato.Nota: La cámara puede mostrar una respuesta antes de que waitTimeout venza, incluso si la huella digital no cambió, pero la práctica recomendada es esperar hasta que venza waitTimeout . |
Notas sobre la implementación de la cámara:
- Después de recibir esta llamada, la cámara compara su huella digital de estado actual con el parámetro
stateFingerprint
recibido. Si la huella digital cambió, la cámara debe devolver de inmediato la nueva huella digital.
Salida
Nombre |
Tipo |
Descripción |
stateFingerprint |
String |
Nueva huella digital del estado de la cámara (igual que en la API de /osc/state ). |
throttleTimeout |
Número entero |
Cantidad de segundos recomendada que el cliente debe esperar antes de la próxima llamada a checkForUpdates . Los clientes pueden hacer solicitudes antes de que venza throttleTimeout , y las cámaras deben permitir estas solicitudes anticipadas si es posible. |
Notas sobre la implementación del cliente:
- Después de recibir una respuesta, el cliente debe comparar el
stateFingerprint
recibido con su copia. Si no coinciden, el cliente debe solicitar el estado actual de la cámara mediante la API de _/osc/state
.
- Los clientes inteligentes limitarán las solicitudes independientemente de la respuesta de la cámara. Por ejemplo, si una cámara muestra una respuesta no estándar (de inmediato, con sin cambios y un
throttleTimeout)
bajo o de 0, el cliente debe imponer su propio throttleTimeout
antes de solicitar otro checkForUpdates
a la cámara.
Notas sobre la implementación de la cámara:
- Cuando se responde a
checkForUpdates
, la cámara debe determinar un throttleTimeout
razonable. Si la cámara admite una lógica de solicitud de larga duración (si el estado no cambió, responde solo después de waitTimeout
), puedes mostrar throttleTimeout
como 0
. En ese caso, los clientes pueden solicitar actualizaciones de inmediato.
- Si la cámara solo admite respuestas rápidas (no se recomienda), debe mostrar un
throttleTimeout
razonable para evitar el tráfico constante de solicitudes o respuestas con el cliente. Por ejemplo, un throttleTimeout
razonable serían 60 segundos para permitir una solicitud del cliente por minuto.
- La práctica recomendada es devolver un objeto
throttleTimeout
adecuado para las capacidades de la cámara. Si el servidor no puede determinar un throttleTimeout
adecuado debido a un problema del servidor, la cámara debería responder con un código de estado 5XX y un cuerpo JSON que contenga el código de error serverError
.
Error
Código de error |
Descripción |
missingParameter |
No se especificó stateFingerprint . |
invalidParameterName |
No se reconocen uno o más nombres de parámetros de entrada. |
invalidParameterValue |
Se reconocen los nombres de los parámetros, pero uno o más valores no son válidos. por ejemplo, waitTimeout está fuera del rango o su tipo es incorrecto. |
serverError |
El servidor no pudo determinar un valor de throttleTimeout adecuado para su respuesta. El problema del servidor se identificará con el valor 5XX devuelto en la respuesta. Los fabricantes de cámaras deben proporcionar una tabla de códigos 5XX y los estados de servidor correspondientes que pueden arrojar este error. |
Ejemplo |
Solicitud |
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1
{
"stateFingerprint": "12EGA33",
"waitTimeout": 300
} |
Respuesta |
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff
{
"stateFingerprint": "12EGA86",
"throttleTimeout": 60
} |
Solicitud |
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1
{
"stateFingerprint": "12EGA33",
"waitTimeout": 300
} |
Respuesta |
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff
{
"name": "camera.checkForUpdates",
"state": "error",
"error": {
"code": "missingParameter",
"message": "parameter stateFingerprint is missing."
}
} |