Browse Source

Merge remote-tracking branch 'origin/master'

S0025136190 1 year ago
parent
commit
5b09e23997

+ 35 - 24
Backend/sample/src/main/java/com/dji/sample/common/smsp/CallSmsp.java

@@ -1,7 +1,5 @@
 package com.dji.sample.common.smsp;
 
-import cn.hutool.crypto.digest.MD5;
-import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.dji.sample.configuration.CustomConfiguration;
 import com.dji.sample.manage.model.dto.ManageDeviceLivestreamUrlDTO;
@@ -15,7 +13,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 
-import java.time.Instant;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -24,18 +21,30 @@ import java.util.Map;
 
 @Slf4j
 public class CallSmsp {
-    public static Map<String,String> getSmspToken(String username,String password) {
-//        String pass = MD5.create().digestHex(password);
-//        Instant now = Instant.now();
-//        long currentTimeMillis = now.toEpochMilli();
-        String url = CustomConfiguration.smspTokenUrl+"?username="+username+"&password="+password;
+
+    private static final String NODE_DATA = "data";
+    private static final String NODE_EASYDARWIN = "EasyDarwin";
+    private static final String NODE_BODY = "Body";
+    private static final String NODE_TOKEN = "Token";
+    private static final String NODE_DEVICE_NAME = "DeviceName";
+    private static final String NODE_CHILDREN = "Children";
+    private static final String NODE_RTMPPUSH = "RTMPPUSH";
+    private static final String NODE_WEBRTC = "WEBRTC";
+    private static final String NODE_CHANNELID = "ChannelID";
+    private static final String HTTPS = "https";
+
+
+
+    public static Map<String,String> getSmspToken(String username,String password,String protocal) {
+        String tokenUrl = HTTPS.equals(protocal) ? CustomConfiguration.smspTokenUrl2 : CustomConfiguration.smspTokenUrl;
+        String url = tokenUrl+"?username="+username+"&password="+password;
         try {
             Map<String,String> response = sendGetRequest(url);
-            log.debug("Response from API: " + response);
-            if(response.get("data") != null) {
-                JSONObject json = new JSONObject(response.get("data"));
-                JSONObject body = json.getJSONObject("EasyDarwin").getJSONObject("Body");
-                response.put("Token",body.getStr("Token"));
+            log.info("Response from  getSmspToken API: " + response);
+            if(response.get(NODE_DATA) != null) {
+                JSONObject json = new JSONObject(response.get(NODE_DATA));
+                JSONObject body = json.getJSONObject(NODE_EASYDARWIN).getJSONObject(NODE_BODY);
+                response.put(NODE_TOKEN,body.getStr(NODE_TOKEN));
             }
 
             return response;
@@ -45,30 +54,31 @@ public class CallSmsp {
         }
     }
 
-    public static RtmpUrlDTO getRtmp(String token, String deviceSn) {
+    public static RtmpUrlDTO getRtmp(String token, String deviceSn, String protocal) {
         RtmpUrlDTO rtmpUrlDTO = new RtmpUrlDTO();
         List<ManageDeviceLivestreamUrlDTO> resultList = new ArrayList<>();
-        String url = CustomConfiguration.smspRtmpUrl+"?token="+token;
+        String rUrl = HTTPS.equals(protocal) ? CustomConfiguration.smspRtmpUrl2 : CustomConfiguration.smspRtmpUrl;
+        String url = rUrl+"?token="+token;
         ObjectMapper objectMapper = new ObjectMapper();
         try {
             Map<String,String> response = sendGetRequest(url);
-            log.debug("Response from API: " + response);
-            if(response.get("data") != null ){
-                JsonNode rootNode = objectMapper.readTree(response.get("data"));
+            log.info("============Response from getSmspRtmpUrl API: " + response);
+            if(response.get(NODE_DATA) != null ){
+                JsonNode rootNode = objectMapper.readTree(response.get(NODE_DATA));
                 // 遍历顶层的设备列表
-                for (JsonNode deviceNode : rootNode.get("data")) {
-                    String deviceName = deviceNode.get("DeviceName").asText();
+                for (JsonNode deviceNode : rootNode.get(NODE_DATA)) {
+                    String deviceName = deviceNode.get(NODE_DEVICE_NAME).asText();
                     // 查找特定设备名
                     if (deviceSn.equals(deviceName)) {
                         // 获取该设备的子节点
-                        JsonNode childrenNode = deviceNode.get("Children");
+                        JsonNode childrenNode = deviceNode.get(NODE_CHILDREN);
                         // 遍历子节点
                         for (JsonNode childNode : childrenNode) {
                             ManageDeviceLivestreamUrlDTO livestreamUrlDTO = new ManageDeviceLivestreamUrlDTO();
                             // 获取RTMP和WEBRTC数据
-                            String rtmpUrl = childNode.get("RTMP").asText();
-                            String webRtcUrl = childNode.get("WEBRTC").asText();
-                            Integer channelID = childNode.get("ChannelID").asInt();
+                            String rtmpUrl = childNode.get(NODE_RTMPPUSH).asText();
+                            String webRtcUrl = childNode.get(NODE_WEBRTC).asText();
+                            Integer channelID = childNode.get(NODE_CHANNELID).asInt();
                             livestreamUrlDTO.setChannelId(channelID);
                             livestreamUrlDTO.setRtmpUrl(rtmpUrl);
                             livestreamUrlDTO.setWebRtcUrl(webRtcUrl);
@@ -85,6 +95,7 @@ public class CallSmsp {
             return rtmpUrlDTO;
         } catch (Exception e) {
             e.printStackTrace();
+            rtmpUrlDTO.setMessage("获取流媒体地址异常:"+e.getMessage());
             return rtmpUrlDTO;
         }
     }

+ 20 - 0
Backend/sample/src/main/java/com/dji/sample/configuration/CustomConfiguration.java

@@ -43,6 +43,18 @@ public class CustomConfiguration {
      */
     public static String smspRtmpUrl;
 
+    /**
+     * 获取token地址
+     * @param smspTokenUrl
+     */
+    public static String smspTokenUrl2;
+
+    /**
+     * 获取URL地址
+     * @param smspRtmpUrl
+     */
+    public static String smspRtmpUrl2;
+
 
     /**
      * 获取clientId
@@ -70,6 +82,14 @@ public class CustomConfiguration {
         CustomConfiguration.smspRtmpUrl = smspRtmpUrl;
     }
 
+    public void setSmspTokenUrl2(String smspTokenUrl) {
+        CustomConfiguration.smspTokenUrl2 = smspTokenUrl;
+    }
+
+    public void setSmspRtmpUrl2(String smspRtmpUrl) {
+        CustomConfiguration.smspRtmpUrl2 = smspRtmpUrl;
+    }
+
     public void setClientId(String clientId) {
         CustomConfiguration.clientId = clientId;
     }

+ 11 - 2
Backend/sample/src/main/java/com/dji/sample/manage/controller/LiveStreamController.java

@@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.List;
 
 import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
@@ -53,8 +55,15 @@ public class LiveStreamController {
      * @return
      */
     @PostMapping("/streams/start")
-    public HttpResultResponse liveStart(@RequestBody LiveTypeDTO liveParam) {
-        return liveStreamService.liveStart(liveParam);
+    public HttpResultResponse liveStart(HttpServletRequest request,@RequestBody LiveTypeDTO liveParam)  {
+        URL requestURL = null;
+        try {
+            requestURL = new URL(request.getRequestURL().toString());
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        String protocol = requestURL.getProtocol();
+        return liveStreamService.liveStart(protocol,liveParam);
     }
 
     /**

+ 1 - 1
Backend/sample/src/main/java/com/dji/sample/manage/service/ILiveStreamService.java

@@ -26,7 +26,7 @@ public interface ILiveStreamService {
      * @param liveParam Parameters needed for on-demand.
      * @return
      */
-    HttpResultResponse liveStart(LiveTypeDTO liveParam);
+    HttpResultResponse liveStart(String protocol,LiveTypeDTO liveParam);
 
     /**
      * Stop the live streaming by publishing mqtt message.

+ 1 - 1
Backend/sample/src/main/java/com/dji/sample/manage/service/IManageDeviceLivestreamUrlService.java

@@ -13,5 +13,5 @@ public interface IManageDeviceLivestreamUrlService {
      * 通过接口获取RTMP
      * @return
      */
-    ManageDeviceLivestreamUrlDTO getUrl(ManageDeviceLivestreamUrlDTO deviceLivestreamUrlDTO);
+    ManageDeviceLivestreamUrlDTO getUrl(ManageDeviceLivestreamUrlDTO deviceLivestreamUrlDTO,String protocol);
 }

+ 39 - 23
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java

@@ -13,6 +13,7 @@ import com.dji.sdk.common.HttpResultResponse;
 import com.dji.sdk.common.SDKManager;
 import com.dji.sdk.mqtt.services.ServicesReplyData;
 import com.dji.sdk.mqtt.services.TopicServicesResponse;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,6 +28,7 @@ import java.util.stream.Collectors;
  * @date 2021/11/22
  * @version 0.1
  */
+@Slf4j
 @Service
 @Transactional
 public class LiveStreamServiceImpl implements ILiveStreamService {
@@ -74,7 +76,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
     }
 
     @Override
-    public HttpResultResponse liveStart(LiveTypeDTO liveParam) {
+    public HttpResultResponse liveStart(String protocol, LiveTypeDTO liveParam) {
         // Check if this lens is available live.
         HttpResultResponse<DeviceDTO> responseResult = this.checkBeforeLive(liveParam.getVideoId());
         if (HttpResultResponse.CODE_SUCCESS != responseResult.getCode()) {
@@ -89,14 +91,17 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
         livestreamUrlDTO.setPayload(getDeviceNameByModelKey(liveParam.getVideoId().getPayloadIndex()));
         livestreamUrlDTO.setPayloadIndex(liveParam.getVideoId().getPayloadIndex().toString());
         livestreamUrlDTO.setDeviceSn(liveParam.getVideoId().getDroneSn());
-        livestreamUrlDTO = deviceLivestreamUrlService.getUrl(livestreamUrlDTO);
+        livestreamUrlDTO = deviceLivestreamUrlService.getUrl(livestreamUrlDTO,protocol);
 
-        ILivestreamUrl url = LiveStreamProperty.get(liveParam.getUrlType());
+//        ILivestreamUrl url = LiveStreamProperty.get(liveParam.getUrlType());
 
         LivestreamRtmpUrl rtmpUrl = new LivestreamRtmpUrl();
         rtmpUrl.setUrl(livestreamUrlDTO.getRtmpUrl());
         //url = setExt(liveParam.getUrlType(), url, liveParam.getVideoId());
 
+
+
+
         TopicServicesResponse<ServicesReplyData<String>> response = abstractLivestreamService.liveStartPush(
                 SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()),
                 new LiveStartPushRequest()
@@ -106,8 +111,19 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
                         .setVideoQuality(liveParam.getVideoQuality()));
 
         if (!response.getData().getResult().isSuccess()) {
-            throw new RuntimeException(response.getData().getResult().getMessage());
-            //return HttpResultResponse.error(response.getData().getResult());
+            //throw new RuntimeException(response.getData().getResult().getMessage());
+            log.info("推流失败,请确认推流地址有效:" + livestreamUrlDTO.getRtmpUrl());
+            throw new RuntimeException("推流失败,请确认推流地址有效:" + livestreamUrlDTO.getRtmpUrl());
+        }
+
+        TopicServicesResponse<ServicesReplyData> qResponse = abstractLivestreamService.liveSetQuality(
+                SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()), new LiveSetQualityRequest()
+                        .setVideoQuality(liveParam.getVideoQuality())
+                        .setVideoId(liveParam.getVideoId()));
+        if (!qResponse.getData().getResult().isSuccess()) {
+            //throw new RuntimeException(qResponse.getData().getResult().getMessage());
+            log.info("设置清晰度"+liveParam.getVideoQuality().getQuality()+"失败.");
+            throw new RuntimeException("设置清晰度"+liveParam.getVideoQuality().getQuality()+"失败.");
         }
 
         LiveDTO live = new LiveDTO();
@@ -117,28 +133,28 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
                 break;
             case RTMP:
 //                live.setUrl("http://smsp.jkec.info:4443/flv/live/stream_27.flv");
-                //live.setUrl("webrtc://smsp.jkec.info:18000/rtc/stream_27");
+//                live.setUrl("webrtc://smsp.jkec.info:18000/rtc/stream_27");
                 live.setUrl(livestreamUrlDTO.getWebRtcUrl());
                 //live.setUrl("webrtcs://smsp.jkec.info:4443/rtc/stream_27");
 //                live.setUrl(url.toString().replace("rtmp", "webrtc"));
                 break;
-            case GB28181:
-                LivestreamGb28181Url gb28181 = (LivestreamGb28181Url) url;
-                live.setUrl(new StringBuilder()
-                        .append("webrtc://")
-                        .append(gb28181.getServerIP())
-                        .append("/live/")
-                        .append(gb28181.getAgentID())
-                        .append("@")
-                        .append(gb28181.getChannel())
-                        .toString());
-                break;
-            case RTSP:
-                live.setUrl(response.getData().getOutput());
-                break;
-            case WHIP:
-                live.setUrl(url.toString().replace("whip", "whep"));
-                break;
+//            case GB28181:
+//                LivestreamGb28181Url gb28181 = (LivestreamGb28181Url) url;
+//                live.setUrl(new StringBuilder()
+//                        .append("webrtc://")
+//                        .append(gb28181.getServerIP())
+//                        .append("/live/")
+//                        .append(gb28181.getAgentID())
+//                        .append("@")
+//                        .append(gb28181.getChannel())
+//                        .toString());
+//                break;
+//            case RTSP:
+//                live.setUrl(response.getData().getOutput());
+//                break;
+//            case WHIP:
+//                live.setUrl(url.toString().replace("whip", "whep"));
+//                break;
             default:
                 return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED);
         }

+ 27 - 31
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/ManageDeviceLivestreamUrlServiceImpl.java

@@ -4,27 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dji.sample.common.smsp.CallSmsp;
 import com.dji.sample.common.util.DesUtil;
 import com.dji.sample.configuration.CustomConfiguration;
-import com.dji.sample.manage.dao.IDevicePayloadMapper;
 import com.dji.sample.manage.dao.IManageDeviceLivestreamUrlMapper;
 import com.dji.sample.manage.dao.IUserMapper;
 import com.dji.sample.manage.model.dto.ManageDeviceLivestreamUrlDTO;
 import com.dji.sample.manage.model.dto.RtmpUrlDTO;
-import com.dji.sample.manage.model.entity.DevicePayloadEntity;
 import com.dji.sample.manage.model.entity.ManageDeviceLivestreamUrlEntity;
 import com.dji.sample.manage.model.entity.UserEntity;
 import com.dji.sample.manage.model.enums.LiveUrlTypeEnum;
 import com.dji.sample.manage.model.enums.UserTypeEnum;
 import com.dji.sample.manage.service.IManageDeviceLivestreamUrlService;
 import com.dji.sdk.cloudapi.device.DeviceSubTypeEnum;
-import com.dji.sdk.common.HttpResultResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -43,57 +38,58 @@ public class ManageDeviceLivestreamUrlServiceImpl implements IManageDeviceLivest
 
 
     @Override
-    public ManageDeviceLivestreamUrlDTO getUrl(ManageDeviceLivestreamUrlDTO deviceLivestreamUrlDTO) {
+    public ManageDeviceLivestreamUrlDTO getUrl(ManageDeviceLivestreamUrlDTO deviceLivestreamUrlDTO,String protocal) {
 
 
         QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
         userWrapper.lambda().eq(UserEntity::getUserType, UserTypeEnum.API.getVal()).eq(UserEntity::getClientId, CustomConfiguration.clientId);
         UserEntity userEntity = userMapper.selectOne(userWrapper);
         if (userEntity == null) {
-            log.debug("The user is null.");
-            throw new RuntimeException ("The user is null.");
+            log.info("接口用户不存在,ClientId:" + CustomConfiguration.clientId);
+            throw new RuntimeException ("接口用户不存在,无法获取流媒体地址信息");
         }
         //密码解密
         String password = DesUtil.getDecryptData(userEntity.getPassword(),userEntity.getSalt());
         //获取token
-        Map<String,String> tokenMap = CallSmsp.getSmspToken(userEntity.getUsername(),password);
+        Map<String,String> tokenMap = CallSmsp.getSmspToken(userEntity.getUsername(),password,protocal);
         if(tokenMap.get("Token") == null) {
-            log.debug("The smsp token is null.");
+            log.info("调用流媒体服务,获取token失败");
         }
 
         //获取rtmp地址
-        RtmpUrlDTO rtmpUrlDTO = CallSmsp.getRtmp(tokenMap.get("Token"),deviceLivestreamUrlDTO.getDeviceSn());
+        RtmpUrlDTO rtmpUrlDTO = CallSmsp.getRtmp(tokenMap.get("Token"),deviceLivestreamUrlDTO.getDeviceSn(),protocal);
         ManageDeviceLivestreamUrlDTO rtmpDto = new ManageDeviceLivestreamUrlDTO();
 
         //获取数据库中deviceSn对应的url信息
         QueryWrapper<ManageDeviceLivestreamUrlEntity> wrapper = new QueryWrapper<>();
         wrapper.lambda().eq(ManageDeviceLivestreamUrlEntity::getDeviceSn,deviceLivestreamUrlDTO.getDeviceSn())
                 .eq(ManageDeviceLivestreamUrlEntity::getWorkspaceId,deviceLivestreamUrlDTO.getWorkspaceId());
-        List<ManageDeviceLivestreamUrlEntity> urlList = mapper.selectList(wrapper);
+        List<ManageDeviceLivestreamUrlEntity> urlListFromDB = mapper.selectList(wrapper);
 
-        if(urlList.size() == 0 && rtmpUrlDTO.getMessage() != null ){
-            log.debug("The result is null.");
+        if(urlListFromDB.size() == 0 && rtmpUrlDTO.getMessage() != null ){
             if(tokenMap.get("message") != null) {
                 throw new RuntimeException (tokenMap.get("message"));
             }
             if(rtmpUrlDTO.getMessage() != null) {
                 throw new RuntimeException (rtmpUrlDTO.getMessage());
             }
-            throw new RuntimeException ("The result is null.");
+            throw new RuntimeException ("获取推流拉流地址异常,请联系技术人员确认!");
         }
         List<ManageDeviceLivestreamUrlDTO> rtmpList =  new ArrayList<>();
         if (rtmpUrlDTO.getList().size() > 0) {
             rtmpList = rtmpUrlDTO.getList();
         }
-        List<Integer> urlL = urlList.stream()
+        List<Integer> urlL = urlListFromDB.stream()
                 .map(ManageDeviceLivestreamUrlEntity::getChannelId)
                 .collect(Collectors.toList());
-        //过滤payloadIndex
-        List<ManageDeviceLivestreamUrlEntity> filterIndexList = urlList.stream().filter(channelData -> deviceLivestreamUrlDTO.getPayloadIndex().equals(channelData.getPayloadIndex()))
+        //筛选数据库中payloadIndex相同的记录
+        List<ManageDeviceLivestreamUrlEntity> filterIndexList =
+                urlListFromDB.stream().filter(channelData -> deviceLivestreamUrlDTO.getPayloadIndex().equals(channelData.getPayloadIndex()))
                 .collect(Collectors.toList());
         if (filterIndexList.size() > 0) {
-            //过滤channelId
-            List<ManageDeviceLivestreamUrlDTO> channelList = rtmpList.stream().filter(channelData -> filterIndexList.get(0).getChannelId().equals(channelData.getChannelId()))
+            //筛选数据库中channelId相同的记录
+            List<ManageDeviceLivestreamUrlDTO> channelList =
+                    rtmpList.stream().filter(channelData -> filterIndexList.get(0).getChannelId().equals(channelData.getChannelId()))
                     .collect(Collectors.toList());
             if (channelList.size() > 0) {
                 update(filterIndexList,channelList);
@@ -101,7 +97,7 @@ public class ManageDeviceLivestreamUrlServiceImpl implements IManageDeviceLivest
                 rtmpDto.setWebRtcUrl(channelList.get(0).getWebRtcUrl());
             } else {
                 if(rtmpList.size() > 0) {
-                    //过滤channelId
+                    //筛选数据库中不存在的记录
                     channelList = rtmpList.stream().filter(channelData -> !urlL.contains(channelData.getChannelId()))
                             .collect(Collectors.toList());
                     update(filterIndexList,channelList);
@@ -118,17 +114,16 @@ public class ManageDeviceLivestreamUrlServiceImpl implements IManageDeviceLivest
                 }
             }
         } else {
-            //过滤channelId
-            List<ManageDeviceLivestreamUrlDTO> channelList = rtmpList;
-
-            if(urlList.size() > 0) {
-                channelList = rtmpList.stream().filter(channelData -> !urlL.contains(channelData.getChannelId()))
-                        .collect(Collectors.toList());
-            }
+            //数据库中不存在
+            List<ManageDeviceLivestreamUrlDTO> channelList =
+                    rtmpList.stream().filter(channelData -> !urlL.contains(channelData.getChannelId()))
+                            .collect(Collectors.toList());
             ManageDeviceLivestreamUrlEntity urlEntity = new ManageDeviceLivestreamUrlEntity();
             if(channelList.size() > 0) {
-                //dto转entity
-                BeanUtils.copyProperties(deviceLivestreamUrlDTO,urlEntity);
+                urlEntity.setDeviceSn(deviceLivestreamUrlDTO.getDeviceSn());
+                urlEntity.setWorkspaceId(deviceLivestreamUrlDTO.getWorkspaceId());
+                urlEntity.setPayload(deviceLivestreamUrlDTO.getPayload());
+                urlEntity.setPayloadIndex(deviceLivestreamUrlDTO.getPayloadIndex());
                 //存库Rtmp
                 urlEntity.setSubType(DeviceSubTypeEnum.ONE.getSubType());
                 urlEntity.setUrlType(LiveUrlTypeEnum.RTMP.getVal());
@@ -144,7 +139,7 @@ public class ManageDeviceLivestreamUrlServiceImpl implements IManageDeviceLivest
                 rtmpDto.setRtmpUrl(channelList.get(0).getRtmpUrl());
                 rtmpDto.setWebRtcUrl(channelList.get(0).getWebRtcUrl());
             } else {
-                throw new RuntimeException("the url is null.");
+                throw new RuntimeException("没有获取到可以使用的推流和拉流地址");
             }
         }
         return rtmpDto;
@@ -163,4 +158,5 @@ public class ManageDeviceLivestreamUrlServiceImpl implements IManageDeviceLivest
         }
     }
 
+
 }

+ 4 - 2
Backend/sample/src/main/resources/application.yml

@@ -183,6 +183,8 @@ custom-config:
   frequency: 3
   key: b1uruk98vuk40cdego6jw5yv9tygjm3s
   signKey: 7e92430eb1f949e9a750fadf68777c44
-  smspTokenUrl: https://smsp.jkec.info:4443/api/v1/login
-  smspRtmpUrl: https://smsp.jkec.info:4443/api/v1/channelstream/all
+  smspTokenUrl: http://smsp.jkec.info:18000/api/v1/login
+  smspRtmpUrl: http://smsp.jkec.info:18000/api/v1/channelstream/all
+  smspTokenUrl2: https://smsp.jkec.info:4443/api/v1/login
+  smspRtmpUrl2: https://smsp.jkec.info:4443/api/v1/channelstream/all
   clientId: e534550a85d94faba73e8040e76514bc