89 lines
3.6 KiB
Java
89 lines
3.6 KiB
Java
package com.yutou.bilibili.services;
|
|
|
|
import com.alibaba.fastjson2.JSONArray;
|
|
import com.yutou.biliapi.bean.live.LiveRoomConfig;
|
|
import com.yutou.biliapi.bean.live.database.LiveConfigDatabaseBean;
|
|
import com.yutou.biliapi.bean.live.database.LiveDanmuDatabaseBean;
|
|
import com.yutou.biliapi.bean.live.database.LiveVideoDatabaseBean;
|
|
import com.yutou.biliapi.databases.BiliLiveConfigDatabase;
|
|
import com.yutou.biliapi.databases.BiliLiveDatabase;
|
|
import com.yutou.biliapi.net.WebSocketManager;
|
|
import com.yutou.bilibili.Tools.AssTools;
|
|
import com.yutou.bilibili.Tools.DateFormatUtils;
|
|
import com.yutou.bilibili.Tools.Tools;
|
|
import com.yutou.common.utils.FFmpegUtils;
|
|
import com.yutou.common.utils.Log;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.io.File;
|
|
import java.math.BigInteger;
|
|
import java.util.List;
|
|
|
|
@Service
|
|
public class LiveDanmuService {
|
|
|
|
public void start(String roomId,boolean isUser) {
|
|
WebSocketManager.getInstance().addRoom(LiveRoomConfig.buildConfig(roomId), isUser);
|
|
}
|
|
public boolean check(String roomId) {
|
|
LiveRoomConfig roomConfig = new LiveRoomConfig();
|
|
roomConfig.setRoomId(roomId);
|
|
return WebSocketManager.getInstance().checkRoom(roomConfig);
|
|
}
|
|
|
|
public void stop(String roomId,boolean isUser) {
|
|
WebSocketManager.getInstance().stopRoom(roomId, isUser);
|
|
}
|
|
|
|
public JSONArray getLiveRoomList() {
|
|
return WebSocketManager.getInstance().getLiveRoomList();
|
|
}
|
|
public void clearUserList(){
|
|
WebSocketManager.getInstance().clearUserStopList();
|
|
}
|
|
|
|
public List<File> getDanmuFileList(String roomId) {
|
|
BiliLiveConfigDatabase configDatabase=new BiliLiveConfigDatabase();
|
|
LiveConfigDatabaseBean bean = configDatabase.getConfig(new String(roomId));
|
|
configDatabase.close();
|
|
return Tools.scanFile(new File(bean.getRecordPath() + File.separator + bean.getAnchorName()));
|
|
}
|
|
|
|
public void saveDanmuXML(LiveVideoDatabaseBean videoDatabaseBean, BiliLiveDatabase database) {
|
|
File videoFile = new File(videoDatabaseBean.getPath());
|
|
long videoTime = FFmpegUtils.getVideoTime(videoFile) + videoDatabaseBean.getStartTime().getTime();
|
|
Log.i("开始时间:" + videoDatabaseBean.getStartTime().getTime());
|
|
Log.i("结束时间:" + videoTime);
|
|
String startTime = DateFormatUtils.format(videoDatabaseBean.getStartTime());
|
|
String endTime = DateFormatUtils.format(videoTime);
|
|
List<LiveDanmuDatabaseBean> danmus = database.getOfTime(startTime, endTime, LiveDanmuDatabaseBean.class);
|
|
Log.i("弹幕数量:" + danmus.size());
|
|
AssTools assTools = new AssTools(videoFile.getName().replace(".flv", ""), videoDatabaseBean.getStartTime());
|
|
for (LiveDanmuDatabaseBean dm : danmus) {
|
|
assTools.addDanmu(dm.createDanmuData());
|
|
}
|
|
assTools.saveDanmu(videoFile.getAbsolutePath().replace(".flv", ".ass"));
|
|
}
|
|
|
|
public String toTimeString(long videoTime) {
|
|
long seconds = videoTime / 1000;
|
|
long hours = seconds / 3600;
|
|
long remainingSecondsAfterHours = seconds % 3600;
|
|
long minutes = remainingSecondsAfterHours / 60;
|
|
long finalRemainingSeconds = remainingSecondsAfterHours % 60;
|
|
// long finalRemainingMilliseconds = videoTime % 1000;
|
|
return String.format("%d小时%d分钟%d秒", hours, minutes, finalRemainingSeconds);
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
LiveDanmuService service = new LiveDanmuService();
|
|
List<File> files = service.getDanmuFileList("22047448");
|
|
for (File file : files) {
|
|
Log.i(file);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|