L'API /osc/checkForUpdates identifica gli aggiornamenti di stato confrontando l'ultimo stateFingerprint noto del client con l'attuale fingerprint della videocamera.
Input
Nome
Tipo
Descrizione
stateFingerprint
Stringa
Impronta dello stato della videocamera dall'ultima volta che il client ha chiamato /osc/state o /osc/checkForUpdates.
waitTimeout
Numero intero (facoltativo)
Numero di secondi di attesa che si verifichi un cambiamento di stato sulla fotocamera prima di restituire la risposta. Alla scadenza di waitTimeout, la fotocamera dovrebbe restituire una risposta anche se l'impronta non è cambiata. Se viene rilevato un cambiamento di stato prima della scadenza di waitTimeout o se waitTimeout viene omesso, la fotocamera dovrebbe restituire immediatamente la risposta.Nota:la fotocamera può restituire una risposta prima della scadenza di waitTimeout anche se l'impronta non è cambiata, ma la best practice è attendere la scadenza di waitTimeout.
Note sull'implementazione della videocamera:
Dopo aver ricevuto questa chiamata, la videocamera confronta il proprio stato attuale con l'impronta digitale con il parametro stateFingerprint ricevuto. Se l'impronta è cambiata, la fotocamera deve restituire immediatamente la nuova impronta.
Output
Nome
Tipo
Descrizione
stateFingerprint
Stringa
Nuova impronta per lo stato della videocamera (come nell'API /osc/state).
throttleTimeout
Numero intero
Numero di secondi consigliato per il cliente di attendere prima della prossima chiamata checkForUpdates. I client possono effettuare le richieste prima della scadenza di throttleTimeout e le videocamere dovrebbero consentire queste richieste in anteprima, se possibile.
Note sull'implementazione del client:
Dopo aver ricevuto una risposta, il cliente deve confrontare il stateFingerprint ricevuto con la sua copia. In caso contrario, il client deve richiedere lo stato attuale della videocamera utilizzando l'API _/osc/state.
Gli smart client limitano le richieste indipendentemente dalla risposta della videocamera. Ad esempio, se una videocamera restituisce una risposta non standard (immediatamente, con nessuna variazione e un valore throttleTimeout) basso o pari a 0), il client deve imporre un proprio throttleTimeout prima di richiedere un altro checkForUpdates alla videocamera.
Note sull'implementazione della videocamera:
Quando rispondi a checkForUpdates, la fotocamera deve determinare un throttleTimeout ragionevole. Se la videocamera supporta una logica di richiesta di lunga data (rispondi solo dopo il giorno waitTimeout se lo stato non è cambiato), puoi restituire throttleTimeout come 0. In questo caso, i clienti possono richiedere immediatamente aggiornamenti.
Se la videocamera supporta solo risposte rapide (sconsigliato), dovrebbe restituire un valore throttleTimeout ragionevole per evitare un traffico costante di richieste/risposte con il client. Ad esempio, un valore throttleTimeout ragionevole sarebbe di 60 secondi per consentire una richiesta del client al minuto.
La best practice consiste nel restituire un throttleTimeout appropriato per le funzionalità della videocamera. Se il server non riesce a determinare un throttleTimeout appropriato a causa di un problema con il server, la videocamera dovrebbe rispondere con un codice di stato 5XX e un corpo JSON contenente un codice di errore serverError.
Errore
Codice di errore
Descrizione
missingParameter
stateFingerprint non specificato.
invalidParameterName
Uno o più nomi di parametri di input non sono riconosciuti.
invalidParameterValue
I nomi dei parametri sono riconosciuti, ma uno o più valori non sono validi. ad esempio, waitTimeout è fuori intervallo o il suo tipo è errato.
serverError
Il server non è riuscito a determinare un valore throttleTimeout appropriato per la sua risposta. Il problema del server verrà identificato dal valore 5XX restituito nella risposta. I produttori di fotocamere devono fornire una tabella con i codici 5XX e gli stati dei server corrispondenti che possono generare questo errore.
Esempio
Richiedi
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
[null,null,["Ultimo aggiornamento 2024-08-21 UTC."],[[["The `/osc/checkForUpdates` API allows clients to efficiently check for camera state changes without repeatedly requesting the full state."],["Clients provide their last known state fingerprint, and the camera responds with a new fingerprint if the state has changed."],["A `throttleTimeout` value is provided to guide clients on how frequently to check for updates, optimizing network traffic."],["If the camera's state has not changed, it may wait for a specified `waitTimeout` before responding to avoid unnecessary updates."],["Errors are provided if parameters are missing, invalid, or if the server encounters an issue determining an appropriate `throttleTimeout`."]]],["The `/osc/checkForUpdates` API checks for camera state changes. The client sends its `stateFingerprint` and an optional `waitTimeout`. The camera compares the received `stateFingerprint` with its current one, immediately returning the new fingerprint if changed. The camera also returns a `throttleTimeout` suggesting how long the client should wait before its next check. If the fingerprints match or after the wait time expires, a response is sent. Clients then request the current state if fingerprints don't match.\n"]]