概要
提示:获取单个设备信息查看是否加密,加密的设备是获取不到播放地址的
文档地址
1、获取单个设备信息:https://open.ys7.com/help/672
2、获取播放地址:https://open.ys7.com/help/1414
3、设备视频编码格式设置(POST):https://open.ys7.com/help/1594
4、关闭设备视频加密:https://open.ys7.com/help/697
代码
第一步先获取token
public static RespResult getToken() {
Map<String,String> map =new HashMap<>();
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("appKey", appKey)
.add("appSecret", appSecret)
.build();
Request request = new Request.Builder()
.url("https://open.ys7.com/api/lapp/token/get")
.method("POST", body)
.build();
ObjectMapper mapper = new ObjectMapper();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseData = response.body().string();
Map<String, Object> responseMap = mapper.readValue(responseData, Map.class);
Integer code = Integer.parseInt(responseMap.get("code").toString());
if (code==200){
String accessToken = JSONUtil.parseObj(responseMap).getJSONObject("data").getStr("accessToken");
String expireTime = JSONUtil.parseObj(responseMap).getJSONObject("data").getStr("expireTime");
map.put("accessToken",accessToken);
map.put("expireTime",expireTime);
return RespResult.builder().code(200).msg("获取token成功").result(map).build();
}else {
return RespResult.builder().code(code).msg(responseMap.get("msg").toString()).result(new ArrayList<>()).build();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return RespResult.builder().build();
}
获取单个设备信息
public static RespResult getDeviceInfo(String deviceSerial) {
OkHttpClient client = new OkHttpClient();
Map accessToken = (Map) getToken().getResult();
String token = "";
if (accessToken.get("accessToken")!=null){
token = (String) accessToken.get("accessToken");
}
RequestBody body = new FormBody.Builder()
.add("accessToken", token)
.add("deviceSerial", deviceSerial)
.build();
Request request = new Request.Builder()
.url("https://open.ys7.com/api/lapp/device/info")
.method("POST",body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
ObjectMapper mapper = new ObjectMapper();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
String responseData = response.body().string();
Map<String, Object> responseMap = mapper.readValue(responseData, Map.class);
System.out.println(responseData);
String code = responseMap.get("code").toString();
if ("200".equals(code)){
return RespResult.builder()
.code(Integer.parseInt(code))
.msg(responseMap.get("msg").toString())
.result(responseMap.get("data")).build();
}else {
return RespResult.builder().code(Integer.parseInt(code)).msg(responseMap.get("msg").toString()).result(new ArrayList<>()).build();
}
} else {
System.out.println("Request failed: " + response.message());
}
} catch (Exception e) {
return RespResult.builder().code(500).msg(e.getMessage()).build();
}
return RespResult.builder().result("success").build();
}
获取设备播放地址
/**
* 获取设备的监控播放地址
* @param deviceSerial 设备序列号
* @param protocol 流播放协议,1-ezopen、2-hls、3-rtmp、4-flv,默认为1 需要2
* @return
*/
public static RespResult getVideoUrlById(String deviceSerial,String protocol) {
Map accessToken = (Map) getToken().getResult();
String token = "";
if (accessToken.get("accessToken")!=null){
token = (String) accessToken.get("accessToken");
}
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("accessToken", token)
.add("deviceSerial", deviceSerial)
.add("protocol",protocol)
.build();
Request request = new Request.Builder()
.url("https://open.ys7.com/api/lapp/v2/live/address/get")
.method("POST",body)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String string = response.body().string();
String code=JSONUtil.parseObj(string).getStr("code");
String msg=JSONUtil.parseObj(string).getStr("msg");
if ("200".equals(code)){
String url = JSONUtil.parseObj(string).getJSONObject("data").getStr("url");
return RespResult.builder().result(url).build();
}
return RespResult.builder().code(Integer.parseInt(code)).msg(msg).build();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
加密解密设备
/**
* 关闭设备视频加密
* @param deviceSerial
*offOron: off 关闭加密 on 开启加密
*/
public static RespResult closeVideoEncrypt(String deviceSerial,String offOron) {
Map accessToken = (Map) getToken().getResult();
String token = "";
if (accessToken.get("accessToken")!=null){
token = (String) accessToken.get("accessToken");
}
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("accessToken", token)
.add("deviceSerial", deviceSerial)
.build();
Request request = null;
if ("on".equals(offOron)){
request = new Request.Builder()
.url("https://bypump.championsoft.net/api/lapp/device/encrypt/on")
.post(body)
.build();
} else if ("off".equals(offOron)) {
request = new Request.Builder()
.url("https://bypump.championsoft.net/api/lapp/device/encrypt/off")
.post(body)
.build();
}
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
JSONObject jsonObject = JSONUtil.parseObj(responseBody); // 确保JSONUtil.parseObj返回JSONObject
Integer code = Integer.parseInt(jsonObject.getStr("code"));
String msg = jsonObject.getStr("msg");
return RespResult.builder().code(code).msg(msg).build();
} else {
// 处理非成功HTTP状态码
return RespResult.builder().code(response.code()).msg("HTTPS请求失败: " + response.message()).build();
}
} catch (IOException e) {
// 记录日志并返回错误响应
e.printStackTrace(); // 在生产环境中,请使用日志框架而不是直接打印堆栈跟踪
return RespResult.builder().code(500).msg("网络错误").build();
}
}
修改视频编码
/**
* 更改视频编码
* encodeType H264 H265(前提:设备支持 H264 和 H265 编码格式切换)
* channelNo 通道号 非必选,默认为 1
* deviceSerial 设备序列号
*/
public static RespResult setVideoEncode(String deviceSerial,String channelNo,String encodeType) {
Map accessToken = (Map) getToken().getResult();
String token = "";
if (accessToken.get("accessToken")!=null){
token = (String) accessToken.get("accessToken");
}
OkHttpClient client = new OkHttpClient();
// 构建Header
Headers headers = Headers.of("accessToken", token, // 假设accessToken通过Bearer Token传递
"deviceSerial", deviceSerial,"channelNo", channelNo);
// 如果streamType是查询参数,则将其添加到URL
String url = "https://hls01open.ys7.com/api/v3/das/device/video/encode";
RequestBody body = new FormBody.Builder()
.add("encodeType", encodeType)
.build();
// 构建请求
Request request = new Request.Builder()
.url(url)
.headers(headers) // 使用表单体作为POST请求的数据
.method("POST",body)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
JSONObject jsonObject = JSONUtil.parseObj(responseBody); // 确保JSONUtil.parseObj返回JSONObject
Integer code = jsonObject.getJSONObject("meta").getInt("code");
String msg =jsonObject.getJSONObject("meta").getStr("message");
return RespResult.builder().code(code).msg(msg).build();
} else {
// 处理非成功HTTP状态码
return RespResult.builder().code(response.code()).msg("HTTPS请求失败: " + response.message()).build();
}
} catch (IOException e) {
// 记录日志并返回错误响应
e.printStackTrace(); // 在生产环境中,请使用日志框架而不是直接打印堆栈跟踪
return RespResult.builder().code(500).msg("网络错误").build();
}
}
小结
奥里给干就完了,加油