|
@@ -44,6 +44,7 @@ import com.ym.mec.common.page.PageInfo;
|
|
|
import com.ym.mec.common.page.PageUtil;
|
|
|
import com.ym.mec.common.page.WrapperUtil;
|
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
|
+import com.ym.mec.im.ImFeignService;
|
|
|
import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
@@ -114,6 +115,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
@Autowired
|
|
|
private LivePluginContext livePluginContext;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ImFeignService imFeignService;
|
|
|
+
|
|
|
//待替换的变量
|
|
|
public static final String USER_ID = "${userId}";
|
|
|
public static final String ROOM_UID = "${roomUid}";
|
|
@@ -1314,8 +1318,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (intEquals(roomSpeakerInfo.getWhetherVideo(), 0)) {
|
|
|
//开始录制视频
|
|
|
try {
|
|
|
-// imFeignService.startRecord(roomUid, videoResolution);
|
|
|
-
|
|
|
// 查询房间信息
|
|
|
ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomUid);
|
|
|
if (Objects.isNull(imLiveBroadcastRoomVo)) {
|
|
@@ -1329,19 +1331,23 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 直播开始时间
|
|
|
- DateTime dateTime = new DateTime(imLiveBroadcastRoomVo.getLiveStartTime());
|
|
|
-
|
|
|
- RTCRoom.RecordResp recordResp = pluginService.rtcRoomRecordStart(RTCRequest.RecordStart.builder()
|
|
|
- .startTime(dateTime.plusMillis(5).getMillis() / 1000)
|
|
|
- .endTime(dateTime.plusDays(1).getMillis() / 1000)
|
|
|
- .streamName(MessageFormat.format("{0}_{1}", imLiveBroadcastRoomVo.getRoomUid(), String.valueOf(imLiveBroadcastRoomVo.getSpeakerId())))
|
|
|
- .sessionId(rtcRoom.getSessionId())
|
|
|
- .config(RTCRequest.RecordConfig.builder()
|
|
|
- .videoResolution(videoResolution)
|
|
|
- .build())
|
|
|
- .build());
|
|
|
- log.info("startLive 直播录录开启: recordResp={}", JSON.toJSONString(recordResp));
|
|
|
+ if (imLiveBroadcastRoomVo.getServiceProvider().equals(RongCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
+ imFeignService.startRecord(roomUid, videoResolution);
|
|
|
+ } else if (imLiveBroadcastRoomVo.getServiceProvider().equals(TencentCloudLivePlugin.PLUGIN_NAME) && roomSpeakerInfo.getVideoTemplate() == 0) {
|
|
|
+ // 直播开始时间
|
|
|
+ DateTime dateTime = new DateTime(imLiveBroadcastRoomVo.getLiveStartTime());
|
|
|
+
|
|
|
+ RTCRoom.RecordResp recordResp = pluginService.rtcRoomRecordStart(RTCRequest.RecordStart.builder()
|
|
|
+ .startTime(dateTime.getMillis() )
|
|
|
+ .endTime(dateTime.plusDays(1).getMillis() )
|
|
|
+ .streamName(MessageFormat.format("{0}_{1}", imLiveBroadcastRoomVo.getRoomUid(), String.valueOf(imLiveBroadcastRoomVo.getSpeakerId())))
|
|
|
+ .build());
|
|
|
+ roomSpeakerInfo.setVideoTemplate(1);
|
|
|
+
|
|
|
+ log.info("startLive 直播录录开启: recordResp={}", JSON.toJSONString(recordResp));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
|
log.error("startRecord error: {}", e.getMessage());
|
|
|
}
|
|
@@ -1403,12 +1409,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 若返回的sessionId为空,则手动查询录制任务taskId
|
|
|
- if (StringUtils.isBlank(rtcRoom.getSessionId())) {
|
|
|
- // FIXME: 获取腾讯云直播录制任务Id
|
|
|
+ // 融云停止录制 腾讯云录制在直播间销毁时自动停止
|
|
|
+ if (imLiveBroadcastRoomVo.getServiceProvider().equals(RongCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
+ pluginService.rtcRoomRecordStop(rtcRoom.getSessionId());
|
|
|
}
|
|
|
-
|
|
|
- pluginService.rtcRoomRecordStop(rtcRoom.getSessionId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("stopRecord error: {}", e.getMessage());
|
|
|
}
|
|
@@ -1520,8 +1524,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
// 创建直播间IM群
|
|
|
pluginService.chatRoomCreate(room.getRoomUid(), room.getRoomTitle(),sysUser.getId().toString());
|
|
|
|
|
|
+ Boolean whetherVideoFlag = getRoomConfig(room.getRoomConfig()).map(o -> o.getWhether_video() == 0).orElse(true);
|
|
|
+
|
|
|
// 腾讯云直播,提前生成录制规则
|
|
|
- if (room.getServiceProvider().equals(TencentCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
+ if (room.getServiceProvider().equals(TencentCloudLivePlugin.PLUGIN_NAME) && whetherVideoFlag) {
|
|
|
|
|
|
DateTime now = DateTime.now();
|
|
|
|
|
@@ -1567,9 +1573,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (video) {
|
|
|
//可以录制视频
|
|
|
speakerInfo.setWhetherVideo(0);
|
|
|
+ // 设置模板
|
|
|
+ speakerInfo.setVideoTemplate(1);
|
|
|
} else {
|
|
|
//不可以录制视频
|
|
|
speakerInfo.setWhetherVideo(1);
|
|
|
+ speakerInfo.setVideoTemplate(0);
|
|
|
}
|
|
|
speakerInfo.setOs(room.getOs());
|
|
|
//写入主讲人信息
|
|
@@ -2258,6 +2267,17 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//播出端- pc网页端 移动端mobile
|
|
|
private String os = "pc";
|
|
|
|
|
|
+ // 腾讯视频模板 0: 没有 1:有
|
|
|
+ private Integer videoTemplate;
|
|
|
+
|
|
|
+ public Integer getVideoTemplate() {
|
|
|
+ return videoTemplate;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setVideoTemplate(Integer videoTemplate) {
|
|
|
+ this.videoTemplate = videoTemplate;
|
|
|
+ }
|
|
|
+
|
|
|
public Integer getSpeakerId() {
|
|
|
return speakerId;
|
|
|
}
|