|
@@ -798,6 +798,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
@Override
|
|
|
public void syncLike(String roomUid, Integer likeNum) {
|
|
|
redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).set(likeNum);
|
|
|
+
|
|
|
+ // 同步点赞数到直播间数据表
|
|
|
+ ImLiveBroadcastRoomVo roomVo = getImLiveBroadcastRoomVo(roomUid);
|
|
|
+ setGroupDefinedData(roomVo,EGroupDefinedDataType.LIKES,likeNum.toString());
|
|
|
//增加房间心跳
|
|
|
redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid)).set(new Date());
|
|
|
}
|
|
@@ -830,18 +834,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
- //将最新的时间写入缓存
|
|
|
- userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES);
|
|
|
//获取当前用户所在房间的uid
|
|
|
RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid));
|
|
|
if (!userRoom.isExists()) {
|
|
|
return;
|
|
|
}
|
|
|
String roomUid = userRoom.get();
|
|
|
- //查询userId是不是主讲人 ,如果是主讲人则返回
|
|
|
- if (isSpeaker(user, now, userid, roomUid)) {
|
|
|
- return;
|
|
|
- }
|
|
|
|
|
|
//向直播间发送当前在线人数消息
|
|
|
ImLiveBroadcastRoomVo roomVo = this.getImLiveBroadcastRoomVo(roomUid);
|
|
@@ -850,6 +848,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // 腾讯云直播不需要处理融云im的消息
|
|
|
+ if (roomVo.getServiceProvider().equals(TencentCloudLivePlugin.PLUGIN_NAME) && StringUtils.isNotBlank(user.getClientIp())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //将最新的时间写入缓存
|
|
|
+ userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES);
|
|
|
+
|
|
|
+ //查询userId是不是主讲人 ,如果是主讲人则返回
|
|
|
+ if (isSpeaker(user, now, userid, roomUid)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
Integer userId = Integer.valueOf(userid);
|
|
|
//这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
|
|
|
if (user.getStatus().equals("0")) {
|
|
@@ -1041,6 +1053,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
// 直播间统计数据
|
|
|
getRoomData(roomVo);
|
|
|
|
|
|
+ // 设置群组属性
|
|
|
+ setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_ONLINE,roomVo.getLookNum().toString());
|
|
|
+ setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_TOTAL,roomVo.getTotalLookNum().toString());
|
|
|
+
|
|
|
// 消息发送用户
|
|
|
LiveRoomMessage.MessageUser messageUser = null;
|
|
|
SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
@@ -1056,7 +1072,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
|
|
|
.builder()
|
|
|
- .count(count.longValue())
|
|
|
+ .count(roomVo.getLookNum().longValue())
|
|
|
.onlineUsers(roomVo.getLookNum().longValue())
|
|
|
.viewers(roomVo.getTotalLookNum().longValue())
|
|
|
.likes(roomVo.getLikeNum().longValue())
|
|
@@ -1309,7 +1325,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (speakerCache.isExists()) {
|
|
|
//如果用户进来时主讲人已经开启直播则修改学生观看时间
|
|
|
Integer state = speakerCache.get().getState();
|
|
|
- if (Objects.nonNull(state) && state == 0) {
|
|
|
+ if (Objects.nonNull(state) && state == 0 && imLiveBroadcastRoomVo.getPushStatus() == 1) {
|
|
|
userInfo.setDynamicLookTime(now);
|
|
|
}
|
|
|
}
|
|
@@ -1371,6 +1387,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (intEquals(roomSpeakerInfo.getState(), 0)) {
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ // 设置推流状态房间信息
|
|
|
+ setPushStatus(roomSpeakerInfo.getRoomUid(), 1);
|
|
|
+
|
|
|
//是否允许录像
|
|
|
if (intEquals(roomSpeakerInfo.getWhetherVideo(), 0)) {
|
|
|
//开始录制视频
|
|
@@ -1447,6 +1468,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
boolean stateFlag = intEquals(roomSpeakerInfo.getState(), 0);
|
|
|
//是否录像 true允许 false不允许
|
|
|
boolean whetherVideoFlag = intEquals(roomSpeakerInfo.getWhetherVideo(), 0);
|
|
|
+
|
|
|
+
|
|
|
+ // 设置推流状态房间信息
|
|
|
+ setPushStatus(roomSpeakerInfo.getRoomUid(), 0);
|
|
|
+
|
|
|
//允许录像并在直播中
|
|
|
if (whetherVideoFlag && stateFlag) {
|
|
|
try {
|
|
@@ -1494,6 +1520,29 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 设置推流状态房间信息
|
|
|
+ * @param roomUid 房间uid
|
|
|
+ * @param status 0:关闭直播 1:开启直播
|
|
|
+ */
|
|
|
+ private void setPushStatus(String roomUid, Integer status) {
|
|
|
+ if (status == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomUid);
|
|
|
+ if (imLiveBroadcastRoomVo == null) {
|
|
|
+ log.warn("setPushStatus imLiveBroadcastRoomVo is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ImLiveBroadcastRoom imLiveBroadcastRoom = new ImLiveBroadcastRoom();
|
|
|
+ imLiveBroadcastRoom.setId(imLiveBroadcastRoomVo.getId());
|
|
|
+ imLiveBroadcastRoom.setPushStatus(status);
|
|
|
+ this.updateById(imLiveBroadcastRoom);
|
|
|
+ setGroupDefinedData(imLiveBroadcastRoomVo,EGroupDefinedDataType.ANCHOR_LIVESTATUS,status == 1?"ON":"OFF");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 打开/关闭直播后-异步计算房间人员观看时长
|
|
|
*
|
|
|
* @param roomUid 房间uid
|
|
@@ -1994,6 +2043,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
whetherChat(room.getId(), liveRoom.getBanStatus());
|
|
|
// 不用前端传时间
|
|
|
// imLiveBroadcastRoom.setLiveTotalTime(liveRoom.getLiveTotalTime());
|
|
|
+ // 设置摄像头状态
|
|
|
+ if (liveRoom.getCameraStatus() != null) {
|
|
|
+ setGroupDefinedData(room,EGroupDefinedDataType.ANCHOR_CAMERA,liveRoom.getCameraStatus() == 1?"ON":"OFF");
|
|
|
+ }
|
|
|
+ // 设置推流状态
|
|
|
+ setPushStatus(room.getRoomUid(), liveRoom.getPushStatus());
|
|
|
|
|
|
return this.updateById(imLiveBroadcastRoom);
|
|
|
}
|
|
@@ -2043,7 +2098,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
imUserState.setStatus(onlineStatus == 1 && liveRoomStatus == 1?"0":"1");
|
|
|
imUserState.setOs(callbackOnMemberStateChange.getOptPlatform());
|
|
|
imUserState.setTime(new Date().getTime());
|
|
|
- imUserState.setClientIp(callbackOnMemberStateChange.getClientIP());
|
|
|
imUserStates.add(imUserState);
|
|
|
}
|
|
|
opsRoom(imUserStates);
|
|
@@ -2076,7 +2130,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
imUserState.setStatus("3");
|
|
|
imUserState.setOs(callbackAfterMemberExit.getOptPlatform());
|
|
|
imUserState.setTime(callbackAfterMemberExit.getEventTime().atZone(ZoneId.systemDefault()).toEpochSecond());
|
|
|
- imUserState.setClientIp(callbackAfterMemberExit.getClientIP());
|
|
|
imUserStates.add(imUserState);
|
|
|
}
|
|
|
opsRoom(imUserStates);
|
|
@@ -2120,7 +2173,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
imUserState.setStatus(userMap.getOrDefault(userId.intValue(), new ImLiveBroadcastRoomMember()).getOnlineStatus() == 1 ? "0" : "1");
|
|
|
imUserState.setOs(callbackAfterNewMemberJoin.getOptPlatform());
|
|
|
imUserState.setTime(callbackAfterNewMemberJoin.getEventTime().atZone(ZoneId.systemDefault()).toEpochSecond());
|
|
|
- imUserState.setClientIp(callbackAfterNewMemberJoin.getClientIP());
|
|
|
imUserStates.add(imUserState);
|
|
|
}
|
|
|
opsRoom(imUserStates);
|