java接入萤石云监控记录

文章目录

概要

提示:获取单个设备信息查看是否加密,加密的设备是获取不到播放地址的

文档地址
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();
        }
    }

小结

奥里给干就完了,加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值