648540858
2023-06-27 5a7a7a12bde268c104610d3e81a08df06ccab5eb
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -9,6 +9,11 @@
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForRtpServerTimeout;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.hook.HookParam;
import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRtpServerTimeoutHookParam;
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForRtpServerTimeout;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -228,7 +233,7 @@
        int localPort = 0;
        if (userSetting.getGbSendStreamStrict()) {
            if (userSetting.getGbSendStreamStrict()) {
                localPort = keepPort(serverItem, ssrc, null);
                localPort = keepPort(serverItem, ssrc, localPort);
                if (localPort == 0) {
                    return null;
                }
@@ -264,7 +269,7 @@
        // 默认为随机端口
        int localPort = 0;
        if (userSetting.getGbSendStreamStrict()) {
            localPort = keepPort(serverItem, ssrc, null);
            localPort = keepPort(serverItem, ssrc, localPort);
            if (localPort == 0) {
                return null;
            }
@@ -290,9 +295,6 @@
     */
    public int keepPort(MediaServerItem serverItem, String ssrc, Integer localPort) {
        Map<String, Object> param = new HashMap<>(3);
        if (localPort == null) {
            localPort = 0;
        }
        param.put("port", localPort);
        param.put("enable_tcp", 1);
        param.put("stream_id", ssrc);
@@ -302,22 +304,24 @@
            HookSubscribeForRtpServerTimeout hookSubscribeForRtpServerTimeout = HookSubscribeFactory.on_rtp_server_timeout(ssrc, null, serverItem.getId());
            Integer finalLocalPort = localPort;
            hookSubscribe.addSubscribe(hookSubscribeForRtpServerTimeout,
                    (MediaServerItem mediaServerItem, JSONObject response)->{
                        if (ssrc.equals(response.getString("ssrc"))) {
                            logger.info("[上级点播] {}->监听端口到期继续保持监听", ssrc);
                            int port = keepPort(serverItem, ssrc, finalLocalPort);
                            if (port == 0) {
                                logger.info("[上级点播] {}->监听端口失败,移除监听", ssrc);
                                hookSubscribe.removeSubscribe(hookSubscribeForRtpServerTimeout);
                            }
                    (MediaServerItem mediaServerItem, HookParam hookParam)->{
                        logger.info("[上级点播] {}->监听端口到期继续保持监听: {}", ssrc, finalLocalPort);
                        OnRtpServerTimeoutHookParam rtpServerTimeoutHookParam = (OnRtpServerTimeoutHookParam) hookParam;
                        if (!ssrc.equals(rtpServerTimeoutHookParam.getSsrc())) {
                            return;
                        }
                        int port = keepPort(serverItem, ssrc, finalLocalPort);
                        if (port == 0) {
                            logger.info("[上级点播] {}->监听端口失败,移除监听", ssrc);
                            hookSubscribe.removeSubscribe(hookSubscribeForRtpServerTimeout);
                        }
                    });
        logger.info("[保持端口] {}->监听端口: {}", ssrc, localPort);
            logger.info("[保持端口] {}->监听端口: {}", ssrc, localPort);
            logger.info("[上级点播] {}->监听端口: {}", ssrc, localPort);
            return localPort;
        }else {
            logger.info("[保持端口] 监听端口失败: {}", ssrc);
            logger.info("[上级点播] 监听端口失败: {}->{}", ssrc, localPort);
            return 0;
        }
        return localPort;
    }
    /**