biliob/src/main/java/com/yutou/bilibili/services/SystemService.java

106 lines
3.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yutou.bilibili.services;
import com.yutou.biliapi.bean.live.database.LiveConfigDatabaseBean;
import com.yutou.biliapi.databases.BiliLiveConfigDatabase;
import com.yutou.bilibili.Tools.DateFormatUtils;
import com.yutou.bilibili.databases.SystemConfigDatabases;
import com.yutou.bilibili.datas.SystemConfigDatabaseBean;
import com.yutou.common.utils.Log;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@Service
public class SystemService {
@Resource
LiveVideoDownloadService videoService;
@Resource
LiveDanmuService danmuService;
@Resource
LiveDatabasesService databasesService;
SystemConfigDatabases databases = new SystemConfigDatabases();
private ScheduledExecutorService timer;
private ScheduledFuture<?> scheduled;
public long getLoopTimer() {
SystemConfigDatabaseBean config = databases.getConfig();
if (config == null) {
return databases.getDefaultConfig().getTimerLoop();
}
return config.getTimerLoop();
}
public void start() {
if (timer == null) {
timer = Executors.newScheduledThreadPool(1);
}
Log.i("执行任务");
if (scheduled != null) {
scheduled.cancel(true);
}
scheduled = timer.scheduleAtFixedRate(() -> {
List<LiveConfigDatabaseBean> list = databasesService.getConfigDatabase().getAllConfig();
Log.i("循环任务:" + list.size());
for (LiveConfigDatabaseBean bean : list) {
try {
// 如果bean需要录制弹幕并且检查录制弹幕时间并且不需要同步直播弹幕则录制弹幕
if (bean.isRecordDanmu() && bean.checkRecordDanmuTime() && !bean.isSyncDanmuForLive()) {
recordDanmu(bean);
} else if (!bean.checkRecordDanmuTime() && !bean.isSyncDanmuForLive()) {
// 如果不在录制弹幕时间,并且不需要同步直播弹幕,则停止录制弹幕
stopRecordDanmu(bean);
}
// 如果bean需要录制直播并且检查录制直播时间
if (bean.isRecordLive() && bean.checkRecordLiveTime()) {
// 录制视频
recordVideo(bean);
}
} catch (Exception e) {
Log.e(e);
}
}
}, 0, getLoopTimer(), TimeUnit.MILLISECONDS);
}
private void stopRecordDanmu(LiveConfigDatabaseBean bean) {
if (!videoService.checkDownload(bean.getRoomId())) {
danmuService.stop(bean.getRoomId(), false);
}
}
public void stop() {
scheduled.cancel(true);
videoService.stopAll();
}
// 录制弹幕
private void recordDanmu(LiveConfigDatabaseBean bean) {
danmuService.start(bean, false);
}
// 录制视频
private void recordVideo(LiveConfigDatabaseBean bean) {
videoService.start(bean, false);
}
public static void main(String[] args) throws InterruptedException {
SystemService service = new SystemService();
Log.i(new Date());
service.start();
Thread.sleep(15000);
Log.i(new Date());
service.start();
}
}