Interfejs /osc/checkForUpdates
API identyfikuje aktualizacje stanu, porównując ostatnią znaną wartość stateFingerprint
klienta z bieżącym fingerprint
kamery.
Nazwa |
Typ |
Opis |
stateFingerprint |
Ciąg znaków |
Odcisk cyfrowy stanu aparatu użyty podczas ostatniej wywołania /osc/state lub /osc/checkForUpdates przez klienta. |
waitTimeout |
Liczba całkowita (opcjonalnie) |
Liczba sekund oczekiwania na zmianę stanu kamery, zanim odpowiedź zostanie zwrócona. Gdy kod waitTimeout straci ważność, aparat powinien zwrócić odpowiedź, nawet jeśli odcisk palca się nie zmienił. Jeśli przed wygaśnięciem zdarzenia waitTimeout zostanie wykryta zmiana stanu lub jeśli waitTimeout zostanie pominięty, kamera powinna natychmiast zwrócić odpowiedź.Uwaga: kamera może zwrócić odpowiedź przed wygaśnięciem rejestracji w usłudze waitTimeout , nawet jeśli odcisk palca nie uległ zmianie, ale zalecamy zaczekać, aż wygaśnie waitTimeout . |
Uwagi dotyczące implementacji aparatu:
- Po otrzymaniu tego wywołania kamera porównuje odcisk cyfrowy swojego aktualnego stanu z odebranym parametrem
stateFingerprint
. Jeśli odcisk palca się zmieni, aparat musi natychmiast zwrócić nowy odcisk.
Wyniki
Nazwa |
Typ |
Opis |
stateFingerprint |
Ciąg znaków |
Nowy odcisk cyfrowy stanu kamery (taki sam jak w interfejsie API /osc/state ). |
throttleTimeout |
Liczba całkowita |
Zalecany czas oczekiwania klienta przed następnym połączeniem checkForUpdates . Klienci mogą wysyłać żądania przed wygaśnięciem usługi throttleTimeout , a kamery powinny zezwolić na takie wczesne żądania, jeśli to możliwe. |
Uwagi dotyczące implementacji po stronie klienta:
- Po otrzymaniu odpowiedzi klient powinien porównać otrzymaną wiadomość
stateFingerprint
z kopią. Jeśli dane się nie zgadzają, klient powinien zażądać bieżącego stanu kamery za pomocą interfejsu API _/osc/state
.
- Inteligentne klienty będą ograniczać liczbę żądań niezależnie od odpowiedzi kamery. Jeśli na przykład kamera zwróci niestandardową odpowiedź (natychmiast przy niskiej wartości bez zmian lub z wartością 0
throttleTimeout)
, klient powinien ustawić własny throttleTimeout
przed żądaniem przesłania kolejnego checkForUpdates
do kamery.
Uwagi dotyczące implementacji aparatu:
- Podczas reagowania na działanie funkcji
checkForUpdates
kamera powinna określić rozsądny throttleTimeout
. Jeśli kamera obsługuje długotrwałą logikę żądań (odpowiada dopiero po waitTimeout
, o ile stan się nie zmieni), można zwrócić wartość throttleTimeout
jako 0
. W takim przypadku klienci mogą natychmiast poprosić o aktualizacje.
- Jeśli kamera obsługuje tylko szybkie odpowiedzi (nie jest to zalecane), powinna zwracać rozsądną wartość
throttleTimeout
, aby uniknąć ciągłego ruchu związanego z żądaniami i odpowiedziami przez klienta. Na przykład rozsądna wartość throttleTimeout
wynosi 60 sekund, ponieważ pozwala to na 1 żądanie klienta na minutę.
- Sprawdzoną metodą jest zwrócenie wartości
throttleTimeout
odpowiedniej do możliwości danej kamery. Jeśli w związku z problemem z serwerem serwer nie może określić odpowiedniego elementu throttleTimeout
, kamera powinna w odpowiedzi przesłać kod stanu 5XX i treści JSON zawierające kod błędu serverError
.
Błąd
Kod błędu |
Opis |
missingParameter |
Nie określono parametru stateFingerprint . |
invalidParameterName |
Co najmniej 1 nazwa parametru wejściowego nie została rozpoznana. |
invalidParameterValue |
Nazwy parametrów są rozpoznawane, ale co najmniej jedna wartość jest nieprawidłowa. np. waitTimeout jest poza zakresem lub jego typ jest nieprawidłowy. |
serverError |
Serwer nie mógł określić odpowiedniej wartości throttleTimeout dla odpowiedzi. Problem z serwerem będzie identyfikowany na podstawie wartości 5XX zwróconej w odpowiedzi. Producenci kamer powinni udostępnić tabelę z kodami 5XX i odpowiednimi stanami serwera, które mogą powodować ten błąd. |
Przykład |
Wyślij prośbę |
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
} |
Odpowiedź |
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
} |
Wyślij prośbę |
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
} |
Odpowiedź |
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."
}
} |