最近闲来无事,搞球机玩。了接了一下Onvif协议
java实现,使用的onvif-ws-client库实现的
枪机相关实现过程如下:
Onvif 请求流程
设备搜索
获取能力集
查询获取指定profile
获取RTSP url
RTSP拉流推到媒体服务(这一步没有做,只做到获取RTSP流地址这一步)
具体代码如下:
1:已知不使用发现的方式
String user = "admin"; String password = "password"; OnvifDevice onvifDevice = new OnvifDevice("http://192.168.0.121:80/onvif/device_service", user, password); Media media = onvifDevice.getMedia(); List<Profile> listProfile = media.getProfiles(); String token =""; for(Profile profile : listProfile){ token = profile.getToken(); String rtsp = onvifDevice.getStreamUri(); System.out.println("URI --------"+rtsp); System.out.println("URI ---"+token+"--------"+onvifDevice.getStreamUri(token)); String rtspUri = "rtsp://"+user+":"+password+"@"+rtsp.replace("rtsp://",""); System.out.println("rtspUri --------"+rtspUri); }
2:修改上面的代码加上如下代码使用发现方式进行
Collection<URL> urls = OnvifDiscovery.discoverOnvifURLs(); URL url = null; if(urls.size() == 1){ url = urls.iterator().next(); }
上面的请求地址换成url.toString()就可以了