首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ONVIF PTZ 控制:WS-Addressing + ksoap2 實現網絡攝像機雲台操作

     編輯:程式設計綜合問答

ONVIF 規範基於 **Web Services (SOAP/HTTP)**,Android 客戶端需構造符合 WS-Addressing 的 SOAP 請求發送至攝像機 `/onvif/device_service` 端點。

核心步驟

  1. 獲取設備信息:`GetDeviceInformation` → 確認支持 PTZ。
  2. 獲取 PTZ 配置:`GetConfigurations` → 找 `PTZConfiguration` token。
  3. PTZ 操作:
    • 絕對移動:`AbsoluteMove` (Position.PanTilt.x/y, Position.Zoom.x)
    • 相對移動:`RelativeMove` (Translation.PanTilt.x/y, Translation.Zoom.x)
    • 連續移動:`ContinuousMove` (Velocity.PanTilt.x/y, Velocity.Zoom.x) + `Stop`
    • 預置位:`SetPreset` / `GotoPreset`

Android 實現選擇

方案優點缺點
ksoap2-android輕量、無需 NDK、純 Java手動構造 SOAP/WS-A 頭繁瑣、易出錯
ONVIF Client Library (GitHub)封裝好實體/請求、支持協程需評估維護狀態、依賴大小
NDK + gSOAP / onvif-c高性能、C++ 成熟棧、支持設備端需 JNI 橋接、編譯複雜、APK 增大

ksoap2 關鍵代碼片段

String endpoint = "https://192.168.1.100/onvif/device_service";
SoapObject request = new SoapObject("https://www.onvif.org/ver20/ptz/wsdl", "ContinuousMove");
request.addProperty("ProfileToken", profileToken);
SoObject velocity = new SoapObject("https://www.onvif.org/ver20/ptz/wsdl", "Velocity");
velocity.addProperty("PanTilt", new SoapObject("https://www.onvif.org/ver10/schema", "Vector2D")
    .addProperty("x", 0.5f).addProperty("y", 0f).addProperty("space", "https://www.onvif.org/ver10/schema/PanTiltSpeedSpace"));
velocity.addProperty("Zoom", new SoapObject("https://www.onvif.org/ver10/schema", "Vector1D")
    .addProperty("x", 0f).addProperty("space", "https://www.onvif.org/ver10/schema/ZoomSpeedSpace"));
request.addProperty("Velocity", velocity);

// WS-Addressing Headers
HttpTransportSE transport = new HttpTransportSE(endpoint, 5000);
List headers = new ArrayList<>();
headers.add(new HeaderProperty("Action", "\"https://www.onvif.org/ver20/ptz/wsdl/ContinuousMove\""));
headers.add(new HeaderProperty("MessageID", "uuid:" + UUID.randomUUID()));
headers.add(new HeaderProperty("To", endpoint));
transport.call(null, envelope, headers);

開源參考

Google Code 遺產:ONVIF Android 客戶端源碼 (含 PTZ 完整實現)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved