CheckForUpdates

/osc/checkForUpdates API 會透過將用戶端最後已知 stateFingerprint 與相機目前的 fingerprint 相比較,以識別狀態更新。

輸入

名稱 類型 描述
stateFingerprint 字串 用戶端上次呼叫 /osc/state/osc/checkForUpdates 時的相機狀態指紋。
waitTimeout 整數(選擇性) 在將回應傳回之前,要在相機上等待狀態變更的秒數。 當 waitTimeout 到期時,即使指紋尚未變更,相機也應該將回應傳回。 如果在 waitTimeout 到期之前偵測到狀態變更,或如果省略 waitTimeout,相機應該立即將回應傳回。注意:即使指紋尚未變更,相機還是能在 waitTimeout 到期之前將回應傳回,但最佳做法是一直等到 waitTimeout 到期。

相機實作注意事項:

  • 相機會在收到此呼叫後,將自己目前的狀態指紋與收到的 stateFingerprint 參數相比較。 如果指紋有所變更,相機必須立即傳回新的指紋。

輸出

名稱 類型 描述
stateFingerprint 字串 新的相機狀態指紋(和 /osc/state API 中相同)。
throttleTimeout 整數 在下次 checkForUpdates 呼叫之前,建議用戶端等待的秒數。 用戶端可以在 throttleTimeout 到期之前提出要求,而相機應儘可能允許這些要求。

用戶端實作注意事項:

  • 用戶端應該在收到回應後,將收到的 stateFingerprint 與自己的複本相比較。 如果不相符,用戶端應該使用 _/osc/state API,要求相機的目前狀態。
  • 不論相機回應為何,智慧型用戶端都會為要求進行節流處理。 例如,如果相機傳回非標準回應,(立即傳回、「毫無變更」且有很低或為 0 的 throttleTimeout),用戶端應該強制施行自己的 throttleTimeout,然後才要求另一個來自相機的 checkForUpdates

相機實作注意事項:

  • 回應 checkForUpdates 時,相機應該決定一個合理的 throttleTimeout。 如果相機支援長期要求邏輯 (只有當 waitTimeout 過後狀態都無變更,才會回應),就可以將 throttleTimeout 傳回為 0。 在此情況下,用戶端可以立即要求更新。
  • 如果相機只支援快速回應 (不建議使用),應該傳回合理的 throttleTimeout,以避免與用戶端有不斷的要求/回應流量。 例如,合理的 throttleTimeout 為 60 秒,允許每分鐘一個用戶端要求。
  • 最佳做法 是傳回適用於相機功能的 throttleTimeout。 如果因伺服器問題,使伺服器無法決定適當的 throttleTimeout,相機應該以 5XX 狀態碼與含有 serverError 錯誤代碼的 JSON 本文來回應。

錯誤

錯誤代碼 描述
missingParameter 未指定 stateFingerprint
invalidParameterName 無法辨識一或多個輸入參數名稱。
invalidParameterValue 辨識出參數名稱,但有一或多個無效值。例如,waitTimeout 超出範圍或其類型不正確。
serverError 伺服器無法為其回應決定一個適當的 throttleTimeout 值。 回應中傳回的 5XX 值指出發生伺服器問題。 相機製造商應該提供 5XX 代碼表,以及會擲回此錯誤的對應伺服器狀態。

範例

要求
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
}
回應
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
}
要求
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
}
回應
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."
    }
}