lawrencehj
2021-03-10 f840c85666369d407ff08ceb6ba30b17aa9d0d4e
修正一处可能导致死循环的代码
2个文件已修改
41 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
@@ -68,11 +68,16 @@
                    if (System.currentTimeMillis() - startTime < 30 * 1000) {
                        if (zlmrtpServerFactory.isRtpReady(streamInfo.getStreamId())) {
                            rtpPushed = true;
                            System.out.println("已获取设备推流,开始向上级推流");
                            zlmrtpServerFactory.startSendRtpStream(param);
                        } else {
                            System.out.println("等待设备推流.......");
                            Thread.sleep(2000);
                            continue;
                        }
                    } else {
                        rtpPushed = true;
                        System.out.println("设备推流超时,终止向上级推流");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -127,46 +127,28 @@
    }
    /**
     *
     * 调用zlm RESTful API —— startSendRtp
     */
    public Boolean startSendRtpStream(Map<String, Object>param) {
        Boolean result = false;
        JSONObject jsonObject = zlmresTfulUtils.startSendRtp(param);
        System.out.println(jsonObject);
        if (jsonObject != null) {
            switch (jsonObject.getInteger("code")){
                case 0:
                    result= true;
                    logger.error("RTP推流请求成功,本地推流端口:" + jsonObject.getString("local_port"));
                    break;
                // case -300: // id已经存在
                //     result = false;
                //     break;
                // case -400: // 端口占用
                //     result= false;
                //     break;
                default:
                    logger.error("RTP推流失败: " + jsonObject.getString("msg"));
                    break;
            }
        }else {
            //  检查ZLM状态
        if (jsonObject == null) {
            logger.error("RTP推流失败: 请检查ZLM服务");
        } else if (jsonObject.getInteger("code") == 0) {
            result= true;
            logger.error("RTP推流请求成功,本地推流端口:" + jsonObject.getString("local_port"));
        } else {
            logger.error("RTP推流失败: " + jsonObject.getString("msg"));
        }
        return result;
    }
    /**
     *
     * 查询待转推的流是否就绪
     */
    public Boolean isRtpReady(String streamId) {
        JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId);
        if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) {
            logger.info("设备RTP推流成功");
            return true;
        } else {
            logger.info("设备RTP推流未完成");
            return false;
        }
        return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online"));
    }
}