Java整合ONVIF云台控制获取RTPM流地址,控制摄像机左右上下角度
效果如下
搜索发现设备 获取设备信息 转动摄像头 提供两种方式
- 第一种main方法里直接发现设备获取到设备ip获取流地址或者转动摄像头。
List<OnvifPointer> onvifPointer = OnvifDiscovery.discoverOnvifDevices();
for (OnvifPointer ref : onvifPointer) {
System.out.println(ref.toString());
System.out.println("设备地址:" + ref.getAddress());
System.out.println("设备名:" + ref.getName());
System.out.println("设备:" + ref.getOnvifDevice());
System.out.println(ref.getSnapshotUrl());
}
OnvifDevice nvt = onvifPointer.get(0).getOnvifDevice();
// 获取设备信息
GetDeviceInformationResponse deviceInformation = nvt.getDevices().getDeviceInformation();
System.out.println("设备制造商: " + deviceInformation.getManufacturer());
System.out.println("设备模型: " + deviceInformation.getModel());
System.out.println("设备固件版本: " + deviceInformation.getFirmwareVersion());
System.out.println("设备序列号: " + deviceInformation.getSerialNumber());
System.out.println("设备硬件id: " + deviceInformation.getHardwareId());
// 获取token
List<Profile> profiles = nvt.getDevices().getProfiles();
for (Profile profile : profiles) {
System.out.println("profile==" + profile);
}
String profileToken = profiles.get(0).getToken(); // PROFILE_000
// 设置StreamSetup
StreamSetup streamSetup = new StreamSetup();
Transport transport = new Transport();
transport.setProtocol(TransportProtocol.UDP);
streamSetup.setStream(StreamType.RTP_UNICAST);
streamSetup.setTransport(transport);
// 获取流地址
String getStreamUri = nvt.getMedia().getStreamUri(profileToken, streamSetup);
System.out.println("getStreamUri:" + getStreamUri);
// 获取视频参数
String videoSourceToken = profiles.get(0).getVideoSourceConfiguration().getSourceToken();
System.err.println("videoSourceToken=====" + videoSourceToken);
ImagingSettings20 imagingSettings20 = nvt.getImaging().getImagingSettings(videoSourceToken);
System.err.println(imagingSettings20.getBacklightCompensation().getMode());
// 设置视频参数上下转动
nvt.getPtz().continuousMove(profileToken, -1, 1, 1);
nvt.getPtz().stopMove(profileToken);
- 第二种直接ip地址和用户名密码获取流地址或者转动摄像头
try {
OnvifDevice nvt = new OnvifDevice nvt = new OnvifDevice("192.168.1.200:80", "admin","admin");
// 获取设备信息
GetDeviceInformationResponse deviceInformation = nvt.getDevices().getDeviceInformation();
System.out.println("设备制造商: " + deviceInformation.getManufacturer());
System.out.println("设备模型: " + deviceInformation.getModel());
System.out.println("设备固件版本: " + deviceInformation.getFirmwareVersion());
System.out.println("设备序列号: " + deviceInformation.getSerialNumber());
System.out.println("设备硬件id: " + deviceInformation.getHardwareId());
List<Profile> profiles = nvt.getDevices().getProfiles();
for (Profile profile : profiles) {
System.out.println("dddd==" + profile);
}
String profileToken = profiles.get(0).getToken(); // PROFILE_000
StreamSetup streamSetup = new StreamSetup();
Transport transport = new Transport();
transport.setProtocol(TransportProtocol.UDP);
streamSetup.setStream(StreamType.RTP_UNICAST);
streamSetup.setTransport(transport);
// 获取流地址
String getStreamUri = nvt.getMedia().getStreamUri(profileToken, streamSetup);
System.out.println("getStreamUri:" + getStreamUri);
// 获取视频参数
String videoSourceToken = profiles.get(0).getVideoSourceConfiguration().getSourceToken();
System.err.println("videoSourceToken=====" + videoSourceToken);
ImagingSettings20 imagingSettings20 = nvt.getImaging().getImagingSettings(videoSourceToken);
System.err.println(imagingSettings20.getBacklightCompensation().getMode());
// 设置视频参数上下转动
nvt.getPtz().absoluteMove(profileToken, 0, 0, 0.5f);
// nvt.getPtz().stopMove(profileToken);
// System.err.println(nvt.getPtz().getPresets(profileToken));
} catch (ConnectException e) {
System.err.println("Could not connect to NVT.");
} catch (SOAPException e) {
e.printStackTrace();
}
源码连接:https://download.youkuaiyun.com/download/qq_42459147/85601083
如果过期请加扣扣:1500203050