Pārlūkot izejas kodu

fix: 语音对讲与sip兼容性优化
1. 语音对讲推流账户查找修复
2. sip域兼容性优化

kindring 1 gadu atpakaļ
vecāks
revīzija
e27c7a25b8

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/service/IAdminService.java

@@ -20,6 +20,8 @@ public interface IAdminService {
 
     AdminAccount getUserById(String adminId);
 
+    AdminAccount getPrimaryAdmin();
+
     int addUser(AdminAccount adminAccount);
 
     int deleteUser(int id);

+ 9 - 0
src/main/java/com/genersoft/iot/vmp/service/impl/AdminServiceImpl.java

@@ -70,6 +70,15 @@ public class AdminServiceImpl implements IAdminService {
         return adminMapper.getUserById(adminId);
     }
 
+    @Override
+    public AdminAccount getPrimaryAdmin() {
+        List<AdminAccount> adminAccounts = adminMapper.getPrimaryAdmin();
+        if (adminAccounts.isEmpty()) {
+            return null;
+        }
+        return adminAccounts.get(0);
+    }
+
     @Override
     public int addUser(AdminAccount adminAccount) {
         AdminAccount adminAccountByUsername = adminMapper.getUserByUsername(adminAccount.getUsername());

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/service/impl/SipConfigService.java

@@ -27,7 +27,7 @@ public class SipConfigService implements ISipConfigService {
         logger.info("查询sip配置信息,domain:" + domain);
         List<SipUserConfig> sipConfigs = sipConfigMapper.querySipConfigByDomain(domain);
         // 如果有的话返回第一个
-        if (sipConfigs == null) {
+        if (sipConfigs.isEmpty()) {
             logger.warn("无法找到对应的sip配置信息 {}", domain);
             return null;
         }

+ 3 - 0
src/main/java/com/genersoft/iot/vmp/storager/dao/AdminMapper.java

@@ -44,6 +44,9 @@ public interface AdminMapper {
     @Select("select u.* FROM user u WHERE u.id=#{id}")
     AdminAccount getUserById(String id);
 
+    @Select("select u.* FROM user u WHERE u.primaryAdmin='1'")
+    List<AdminAccount> getPrimaryAdmin();
+
     @Select("select u.* FROM user u WHERE u.username=#{username}")
     AdminAccount getUserByUsername(String username);
 

+ 3 - 3
src/main/java/com/genersoft/iot/vmp/storager/dao/SipConfigMapper.java

@@ -32,7 +32,7 @@ public interface SipConfigMapper {
             "enableBind," +
             "createTime" +
             ") VALUES (" +
-            "#{sipDomain}, " +
+            "'#{sipDomain}', " +
             "#{serverId}, " +
             "#{password}, " +
             "#{description}, " +
@@ -53,7 +53,7 @@ public interface SipConfigMapper {
 
     // 更新sip规则
     @Update("UPDATE sip_config SET " +
-            "sipDomain = #{sipUserConfig.sipDomain}, " +
+            "sipDomain = '#{sipUserConfig.sipDomain}', " +
             "serverId = #{sipUserConfig.serverId}, " +
             "password = #{sipUserConfig.password}, " +
             "description = #{sipUserConfig.description}, " +
@@ -65,7 +65,7 @@ public interface SipConfigMapper {
 
 
     // 查询根据域获取对应的sip配置
-    @Select("SELECT * FROM sip_config WHERE sipDomain = ${sipDomain}")
+    @Select("SELECT * FROM sip_config WHERE sipDomain = '${sipDomain}'")
     List<SipUserConfig> querySipConfigByDomain(String sipDomain);
 
     // 获取指定管理员拥有的sip规则

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/utils/DeviceHelper.java

@@ -43,7 +43,7 @@ public class DeviceHelper {
             boolean isPrimaryAdmin = adminAccount.isPrimaryAdminFlag();
 
             if (isPrimaryAdmin) {
-                logger.info("get isPrimaryAdmin admin:{} device:{}", deviceId);
+                logger.info("get isPrimaryAdmin device:{}", deviceId);
                 device = deviceService.getDevice(deviceId);
             } else {
                 // 普通管理员用户目前基本使用 国标id 进行设备操作

+ 11 - 2
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java

@@ -22,6 +22,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.*;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.storager.dao.dto.AdminAccount;
 import com.genersoft.iot.vmp.utils.AuthorUtil;
 import com.genersoft.iot.vmp.utils.DeviceHelper;
 import com.genersoft.iot.vmp.utils.Md5Utils;
@@ -321,8 +322,16 @@ public class PlayController {
         String type = "push";
 
 //        LoginUser userInfo = SecurityUtils.getUserInfo();
-        // todo 生成设备推流鉴权密钥, 无论是什么用户登录都可以正常使用
-        String sign = Md5Utils.hash(adminService.getUserById("1").getPushKey()); //获取推流鉴权密钥
+        String adminId = AuthorUtil.getAdminId();
+        AdminAccount adminAccount;
+        if (adminId != null) {
+            adminAccount = adminService.getUserById(adminId);
+        } else {
+            logger.info("[语音广播] 获取主管理员账户");
+            adminAccount = adminService.getPrimaryAdmin();
+        }
+
+        String sign = Md5Utils.hash(adminAccount.getPushKey()); //获取推流鉴权密钥
         String webRtcPushUrl = String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s&sign=%s", mediaServerItem.getIp(), mediaServerItem.getHttpSSlPort(), app, stream, type, sign);
 
         //首先判断设备是否正在对讲