|
@@ -8,6 +8,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.microsvc.toolkit.middleware.live.LivePluginContext;
|
|
|
+import com.microsvc.toolkit.middleware.live.LivePluginService;
|
|
|
+import com.microsvc.toolkit.middleware.live.impl.TencentCloudLivePlugin;
|
|
|
+import com.microsvc.toolkit.middleware.live.message.LiveRoomConfig;
|
|
|
+import com.microsvc.toolkit.middleware.live.message.LiveRoomUser;
|
|
|
+import com.microsvc.toolkit.middleware.live.message.RTCRoom;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
|
|
@@ -92,6 +98,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
private ImLiveRoomReservationService imLiveRoomReservationService;
|
|
|
@Autowired
|
|
|
private ImLiveRoomBlackService imLiveRoomBlackService;
|
|
|
+ @Autowired
|
|
|
+ private TencentCloudLivePlugin tencentCloudLivePlugin;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LivePluginContext livePluginContext;
|
|
|
|
|
|
//待替换的变量
|
|
|
public static final String USER_ID = "${userId}";
|
|
@@ -130,6 +141,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
SysUser sysUser = Optional.ofNullable(userId)
|
|
|
.map(this::getSysUser)
|
|
|
.orElseGet(this::getSysUser);
|
|
|
+ // 默认学生端查询
|
|
|
osType = Optional.ofNullable(osType).orElse(1);
|
|
|
if (osType == 1) {
|
|
|
//学生端
|
|
@@ -138,6 +150,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//老师端
|
|
|
return teacherQueryRoomAndCheck(roomUid, sysUser);
|
|
|
}
|
|
|
+
|
|
|
+ // 直播助手
|
|
|
+ if (osType == 3) {
|
|
|
+ // 校验直播间是否存在
|
|
|
+ ImLiveBroadcastRoomVo vo = Optional.ofNullable(roomUid).map(this::queryRoomInfo)
|
|
|
+ .orElseThrow(() -> new BizException("直播间不存在"));
|
|
|
+
|
|
|
+ if (vo.getOs().equals("mobile")) {
|
|
|
+ throw new BizException("该直播间仅可在电脑端直播");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return queryRoomAndCheck(roomUid, sysUser);
|
|
|
}
|
|
|
|
|
@@ -160,7 +184,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
ImLiveBroadcastRoomVo vo = Optional.ofNullable(roomUid).map(this::queryRoomInfo)
|
|
|
.orElseThrow(() -> new BizException("直播间不存在"));
|
|
|
if (vo.getOs().equals("pc")) {
|
|
|
- throw new BizException("该直播间仅可在电脑端直播");
|
|
|
+ throw new BizException("该直播间仅可在移动端直播");
|
|
|
}
|
|
|
return queryRoomAndCheck(vo, sysUser);
|
|
|
}
|
|
@@ -200,7 +224,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (count > 0) {
|
|
|
room.setBlacklistFlag(1);
|
|
|
}
|
|
|
- return room;
|
|
|
+
|
|
|
+ // 直播房间配置信息
|
|
|
+ String userSig = "";
|
|
|
+ try {
|
|
|
+ userSig = tencentCloudLivePlugin.register(String.valueOf(sysUser.getId()), sysUser.getUsername(),
|
|
|
+ sysUser.getAvatar());
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("直播房间用户注册失败: userId={}", sysUser.getId(), e);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 直播间配置信息
|
|
|
+ LiveRoomConfig liveRoomConfig = tencentCloudLivePlugin.getLiveRoomConfig();
|
|
|
+
|
|
|
+ return room.userSig(userSig).liveRoomConfig(liveRoomConfig);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -260,6 +298,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
continue;
|
|
|
}
|
|
|
record.setRoomReservationNum(imLiveBroadcastRoomVos.get(0).getRoomReservationNum());
|
|
|
+
|
|
|
+ // 设置直播间参数信息
|
|
|
+
|
|
|
}
|
|
|
|
|
|
return PageUtil.pageInfo(page);
|
|
@@ -447,7 +488,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void destroyExpiredLiveRoom(Date now, ImLiveBroadcastRoom room, int expiredMinute) {
|
|
|
+ private void destroyExpiredLiveRoom(Date now, ImLiveBroadcastRoom room, int expiredMinute) throws Exception {
|
|
|
log.error("roomDestroy destroyExpiredLiveRoom >>>> now {} roomInfo : {} expiredMinute:{}", now, JSONObject.toJSONString(room), expiredMinute);
|
|
|
//过期时间 = LiveStartTime + expiredMinute
|
|
|
Date expiredTime = DateUtil.addMinutes(room.getLiveStartTime(), expiredMinute);
|
|
@@ -460,7 +501,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (speakerCache.isExists()) {
|
|
|
RoomSpeakerInfo speakerInfo = speakerCache.get();
|
|
|
//查询用户是否在线
|
|
|
- if (imFeignService.checkOnline(speakerInfo.getSpeakerId().toString())) {
|
|
|
+ LiveRoomUser liveRoomUser = livePluginContext.getPluginService(room.getServiceProvider()).chatRoomUserExist(room.getId().toString(),speakerInfo.getSpeakerId().toString());
|
|
|
+ if (Objects.nonNull(liveRoomUser) && StringUtils.equals(liveRoomUser.getStatus(),"1")) {
|
|
|
log.info("roomDestroy destroyExpiredLiveRoom is online >>>> roomId:{} speakerId:{}", room.getId(), speakerInfo.getSpeakerId());
|
|
|
return;
|
|
|
}
|
|
@@ -944,6 +986,22 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//开始录制视频
|
|
|
try {
|
|
|
imFeignService.startRecord(roomUid, videoResolution);
|
|
|
+
|
|
|
+ // 查询房间信息
|
|
|
+ ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomUid);
|
|
|
+ if (Objects.isNull(imLiveBroadcastRoomVo)) {
|
|
|
+ log.info("opsRoom>>>> startRecord error roomUid: {}", roomUid);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ LivePluginService pluginService = livePluginContext.getPluginService(imLiveBroadcastRoomVo.getServiceProvider());
|
|
|
+ RTCRoom rtcRoom = pluginService.rtcRoomInfo(roomSpeakerInfo.getRoomUid());
|
|
|
+ if (rtcRoom == null) {
|
|
|
+ log.info("startRecord>>>> rtcRoom is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ pluginService.rtcRoomRecordStop(rtcRoom.getSessionId());
|
|
|
+ // pluginService.rtcRoomRecordStart(roomUid, videoResolution);
|
|
|
} catch (Exception e) {
|
|
|
log.error("startRecord error: {}", e.getMessage());
|
|
|
}
|
|
@@ -990,7 +1048,22 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (whetherVideoFlag && stateFlag) {
|
|
|
try {
|
|
|
//停止录制视频
|
|
|
- imFeignService.stopRecord(roomSpeakerInfo.getRoomUid());
|
|
|
+ // imFeignService.stopRecord(roomSpeakerInfo.getRoomUid());
|
|
|
+
|
|
|
+ // 查询房间信息
|
|
|
+ ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomSpeakerInfo.getRoomUid());
|
|
|
+ if (imLiveBroadcastRoomVo == null) {
|
|
|
+ log.warn("closeLive imLiveBroadcastRoomVo is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ LivePluginService pluginService = livePluginContext.getPluginService(imLiveBroadcastRoomVo.getServiceProvider());
|
|
|
+ RTCRoom rtcRoom = pluginService.rtcRoomInfo(roomSpeakerInfo.getRoomUid());
|
|
|
+ if (rtcRoom == null) {
|
|
|
+ log.warn("closeLive rtcRoom is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ pluginService.rtcRoomRecordStop(rtcRoom.getSessionId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("stopRecord error: {}", e.getMessage());
|
|
|
}
|
|
@@ -1092,11 +1165,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
SysUser sysUser = getSysUser(room.getSpeakerId());
|
|
|
createSpeakerInfo(room, sysUser);
|
|
|
//去融云创建房间
|
|
|
- imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
|
|
|
+ LivePluginService pluginService = livePluginContext.getPluginService(room.getServiceProvider());
|
|
|
+ pluginService.chatRoomCreate(room.getRoomUid(),room.getRoomTitle(),sysUser.getId().toString());
|
|
|
+
|
|
|
+ // imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
|
|
|
//推送预约直播间消息
|
|
|
imLiveRoomReservationService.push(room);
|
|
|
//推送直播开始消息
|
|
|
- sendRoomLiveState(sysUser, room, MessageTypeEnum.JIGUANG_LIVE_STARTED);
|
|
|
+ this.sendRoomLiveState(sysUser, room, MessageTypeEnum.JIGUANG_LIVE_STARTED);
|
|
|
} catch (Exception e) {
|
|
|
log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
|
|
|
}
|