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 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 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 files = service.getDanmuFileList("22047448"); for (File file : files) { Log.i(file); } } }