JAVA 代码调用ZLM

1.查询该流是否存在,存在就不再进行转流。

/**
     * 获取流ID
     */
    public static boolean getStream(Long cameraId) {
        String localIp = "";
        try
        {
            localIp =  InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/getMediaList"
                ,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp");
        JSONObject mediaList = JSONObject.parseObject(result);
        // 返回json的数组
        JSONArray mediaData = mediaList.getJSONArray("data");
        if(mediaData != null){
            for (int i = 0; i < mediaData.size(); i++) {
                JSONObject jsonObject2 = mediaData.getJSONObject(i);
                System.out.println(jsonObject2.getString("stream"));
                if(jsonObject2.getString("stream").equals(cameraId.toString())){
                    System.out.println("找到这个流的stream");
                    return true;
                }else {
                    return false;
                }
            }
        }
        return false;
    }

2.获取当前查看人数

/**
     * 获取当前观看人数
     */
    public static boolean getStreamRead(Long cameraId) {
        String localIp = "";
        try
        {
            localIp =  InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/getMediaList"
                ,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp&stream="+cameraId);
        JSONObject mediaList = JSONObject.parseObject(result);
        // 返回json的数组
        JSONArray mediaData = mediaList.getJSONArray("data");
        System.out.println("查询观看人数接口返回"+mediaData);
        if(mediaData != null){
            for (int i = 0; i < mediaData.size(); i++) {
                JSONObject jsonObject2 = mediaData.getJSONObject(i);
                System.out.println("返回人数"+jsonObject2.getString("totalReaderCount"));
                if(Integer.valueOf(jsonObject2.getString("totalReaderCount"))<2){
                    return true;
                }else {
                    return false;
                }
            }
        }
        return false;
    }

3.关闭某一个 正在转的流

/**
     * 关闭流///
     * {
     *    "code" : 0,
     *    "count_hit" : 1,  # 筛选命中的流个数
     *    "count_closed" : 1 # 被关闭的流个数,可能小于count_hit
     * }
     */
    public static void closeStreams(String cameraId) {
        String localIp = "";
        try
        {
            localIp =  InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/delFFmpegSource"
                ,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp&stream="+cameraId);
        JSONObject mediaList = JSONObject.parseObject(result);
        // 返回json的数组
        String countHit = mediaList.getString("count_hit");
        String countClosed = mediaList.getString("count_closed");
        System.out.println("筛选命中的流个数"+countHit);
        System.out.println("被关闭的流个数"+countClosed);
    }

4.转流

public static String addFFmpegSource(String cameraIp,Long teamId ,String localIp) {
        String url ="http://"+localIp+":8090/index/api/addFFmpegSource?" +
                "secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc" +
                //HuaWei123 = a1234567
                "&src_url=rtsp://admin:HuaWei123@"+cameraIp+"/LiveMedia/ch1/Media1" +
                "&dst_url=rtmp://127.0.0.1/live/" +teamId+
                "&timeout_ms=10000" +
                "&enable_hls=n" +
                "&enable_mp4=n";
        JSONObject media = JSONObject.parseObject(HttpUtils.sendGet(url,null));
        // 返回json的数组
        if("-1".equals(media.getString("code"))) {
            return null;
        }else {
            String key = media.getJSONObject("data").getString("key");
            return key;
        }

    }

5.调用

/**
     * 获取门架摄像头 播放地址
     */
    @Log(title = "camera", businessType = BusinessType.OTHER)
    @GetMapping("/getPlayUrl/{cameraIp}/{id}")
    @ResponseBody
    public AjaxResult getPlayUrl(@PathVariable("cameraIp") String cameraIp,@PathVariable("id") Long id) {
        String localIp = "";
         try
      {
            localIp =  InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        if(SendCmd.getStream(id)){
            System.out.println("之前就有这个流");
            return AjaxResult.success("http://"+localIp+":8090/live/"+id+".flv");
        }else{
            //cameraUrl  色相头Ip
            //name 色相头编号
            String key = SendCmd.addFFmpegSource(cameraIp,id,localIp);
            if(key != null){
                //把KEY 存入数据库
                System.out.println("请注意这个是新添加的日志-------------------》推送视频后获取的KEY"+key);
                Camera camera = new Camera();
                camera.setCameraId(id);
                camera.setRemark(key);
                cameraService.updateCamera(camera);
                System.out.println("请注意这个是新添加的日志-------------------》把key已经更新到数据库中设备ID是"+id);
                return  AjaxResult.success("http://"+localIp+":8090/live/"+id+".flv");
            }else {
                return  AjaxResult.error("");
            }


        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值