CheckForUpdates
Stay organized with collections
Save and categorize content based on your preferences.
The /osc/checkForUpdates
API identifies state updates by comparing the client’s last known stateFingerprint
to the camera’s current fingerprint
.
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/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
} |
Response |
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
} |
Request |
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
} |
Response |
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."
}
} |
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-10-09 UTC.
[null,null,["Last updated 2024-10-09 UTC."],[[["\u003cp\u003eThe \u003ccode\u003e/osc/checkForUpdates\u003c/code\u003e API allows clients to efficiently check for camera state changes without repeatedly requesting the full state.\u003c/p\u003e\n"],["\u003cp\u003eClients provide their last known state fingerprint, and the camera responds with a new fingerprint if the state has changed.\u003c/p\u003e\n"],["\u003cp\u003eA \u003ccode\u003ethrottleTimeout\u003c/code\u003e value is provided to guide clients on how frequently to check for updates, optimizing network traffic.\u003c/p\u003e\n"],["\u003cp\u003eIf the camera's state has not changed, it may wait for a specified \u003ccode\u003ewaitTimeout\u003c/code\u003e before responding to avoid unnecessary updates.\u003c/p\u003e\n"],["\u003cp\u003eErrors are provided if parameters are missing, invalid, or if the server encounters an issue determining an appropriate \u003ccode\u003ethrottleTimeout\u003c/code\u003e.\u003c/p\u003e\n"]]],["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"],null,["# CheckForUpdates\n\nThe `/osc/checkForUpdates` API identifies state updates by comparing the client's last known `stateFingerprint` to the camera's current `fingerprint`.\n\nInput\n-----\n\n| **Name** | **Type** | **Description** |\n|--------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `stateFingerprint` | String | Camera state fingerprint from the last time the client called `/osc/state` or `/osc/checkForUpdates`. |\n| `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. |\n\n### Camera implementation notes:\n\n- 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.\n\nOutput\n------\n\n| **Name** | **Type** | **Description** |\n|--------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `stateFingerprint` | String | New fingerprint of the camera state (same as in `/osc/state` API). |\n| `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. |\n\n### Client implementation notes:\n\n- 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.\n- 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.\n\n### Camera implementation notes:\n\n- 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.\n- 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.\n- 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.\n\nError\n-----\n\n| **Error code** | **Description** |\n|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `missingParameter` | `stateFingerprint` is not specified. |\n| `invalidParameterName` | One or more input parameter names is unrecognized. |\n| `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. |\n| `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. |\n\n| Example ------- ||\n|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Request** | ```http 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 } ``` |\n| **Response** | ```http 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 } ``` |\n| **Request** | ```http 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 } ``` |\n| **Response** | ```http 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.\" } } ``` |"]]