The /osc/checkForUpdates API identifies state updates by comparing the client’s last known stateFingerprint to the camera’s current fingerprint.
Input
Name
Type
Description
stateFingerprint
String
Camera state fingerprint from the last time the client called /osc/state or /osc/checkForUpdates.
waitTimeout
Integer (optional)
Number of seconds to wait for state change on the camera to occur before returning the response. When waitTimeout expires, the camera should return a response even if the fingerprint hasn’t changed. If a state change is detected before waitTimeout expires, or if waitTimeout is omitted, the camera should immediately return the response.Note: the camera can return a response before waitTimeout has expired even if the fingerprint hasn’t changed, but the best practice is to wait until waitTimeout expires.
Camera implementation notes:
Upon receiving this call, the camera compares its current state fingerprint with the received stateFingerprint parameter. If the fingerprint has changed, the camera must immediately return the new fingerprint.
Output
Name
Type
Description
stateFingerprint
String
New fingerprint of the camera state (same as in /osc/state API).
throttleTimeout
Integer
Recommended number of seconds for client to wait before next checkForUpdates call. Clients can make requests before throttleTimeout expires, and cameras should allow these early requests if possible.
Client implementation notes:
Upon receiving a response, the client should compare the received stateFingerprint with its copy. If they don’t match, the client should request the camera’s current state using the _/osc/state API.
Smart clients will throttle requests regardless of the camera response. For example, if a camera returns a non-standard response (immediately, with no change and a low or 0 throttleTimeout), the client should impose its own throttleTimeout before requesting another checkForUpdates from the camera.
Camera implementation notes:
When responding to checkForUpdates, the camera should determine a reasonable throttleTimeout. If the camera supports long standing request logic (respond only after waitTimeout if state hasn’t changed), it is OK to return throttleTimeout as 0. In this case, clients can immediately request updates.
If the camera supports only fast responses (not recommended), it should return a reasonable throttleTimeout to avoid constant request/response traffic with the client. For example, a reasonable throttleTimeout would be 60 seconds, to allow one client request per minute.
The best practice is to return a throttleTimeout appropriate for the camera’s capabilities. If the server cannot determine an appropriate throttleTimeout due to a server issue, the camera should respond with a 5XX status code and a JSON body containing serverError error code.
Error
Error code
Description
missingParameter
stateFingerprint is not specified.
invalidParameterName
One or more input parameter names is unrecognized.
invalidParameterValue
The parameter names are recognized, but one or more values is invalid; for example, waitTimeout is out of range or its type is incorrect.
serverError
The server was unable to determine an appropriate throttleTimeout value for its response. The server problem will be identified by the 5XX value returned in the response. Camera manufacturers should supply a table of 5XX codes and corresponding server states that can throw this error.
Example
Request
POST/osc/checkForUpdatesHTTP/1.1Host:[camera ip address]:[httpUpdatesPort]Content-Type:application/json;charset=utf-8Accept:application/jsonContent-Length: {CONTENT_LENGTH}X-XSRF-Protected:1{"stateFingerprint":"12EGA33","waitTimeout":300}
POST/osc/checkForUpdatesHTTP/1.1Host:[camera ip address]:[httpUpdatesPort]Content-Type:application/json;charset=utf-8Accept:application/jsonContent-Length: {CONTENT_LENGTH}X-XSRF-Protected:1{"stateFingerprint":"12EGA33","waitTimeout":300}
Response
HTTP/1.1400Bad RequestContent-Type:application/json;charset=utf-8Content-Length:{CONTENT_LENGTH}X-Content-Type-Options:nosniff{"name":"camera.checkForUpdates","state":"error","error":{"code":"missingParameter","message":"parameter stateFingerprint is missing."}}
[null,null,["Last updated 2024-10-09 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"]]