biliob/src/main/java/com/yutou/bilibili/BiliBili/Controllers/BiliVideoController.java

150 lines
6.3 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.BiliBili.Controllers;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yutou.bilibili.BiliBili.LiveUtils;
import com.yutou.bilibili.BiliBili.Services.IBiliBiliLiveService;
import com.yutou.bilibili.BiliBili.Tools.BiliTools;
import com.yutou.bilibili.Services.ISystemConfigService;
import com.yutou.bilibili.Services.IUserService;
import com.yutou.bilibili.Tools.*;
import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliUpInfo;
import com.yutou.bilibili.mybatis.model.UUser;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Controller
public class BiliVideoController {
@Resource
IUserService service;
@Resource
IBiliBiliLiveService liveService;
@Resource
ISystemConfigService configService;
@ResponseBody
@RequestMapping("/bili/video/get/list.do")
public JSONObject videoList(HttpServletRequest request) {
JSONObject json = new JSONObject();
String token = AppTools.getLoginToken(request);
UUser user = service.getUserToToken(token);
if (user == null) {
json.put("code", -1);
json.put("msg", "未登录");
json.put("data", new JSONObject());
return json;
}
if (ServiceTools.getInstance().auth(request, user.getUser(), "/bili/video/get/")) {
File file = new File(ConfigTools.load(ConfigTools.CONFIG,"liveSavePath",String.class));
Log.i(file.getAbsolutePath());
if (!file.exists() || Objects.requireNonNull(file.listFiles()).length == 0) {
json.put("code", 0);
json.put("msg", "文件夹为空");
json.put("data", new JSONObject());
} else {
List<File> list = AppTools.scanFilePath(file.getAbsolutePath()+File.separator+"live");
JSONArray array = new JSONArray();
for (File f : list) {
if(!f.getName().endsWith(".mp4")){
continue;
}
JSONObject item = new JSONObject();
String _time = f.getName().split(" ")[0].substring(1);
File mpeg = new File("ffmpeg_out" + File.separator + _time + File.separator + f.getName());
if (mpeg.exists()) {
f = mpeg;
item.put("ffmpeg", true);
} else {
item.put("ffmpeg", false);
}
String date = f.getName().split(" ")[0].substring(1);
String time = f.getName().split(" ")[1].split("\\]")[0];
String roomid = f.getName().split("\\]")[1].replace(".mp4", "").replace("_ffmpeg", "").trim();
BilibiliUpInfo info = liveService.queryUpToRoomId(Integer.parseInt(roomid));
long size = f.length();
String _size;
if (size < 1024) {
_size = size + "B";
} else if (size < 1048576) {
_size = (size / 1024) + "KB";
} else if (size < 1073741824) {
_size = (size / 1048576) + "MB";
} else {
_size = (size / 1073741824) + "GB";
}
item.put("fileName", f.getName());
item.put("fileSize", _size);
item.put("date", date);
item.put("time", time);
item.put("name", info == null ? roomid : info.getName());
array.add(item);
}
json.put("code", 0);
json.put("msg", "ok");
json.put("data", array);
}
} else {
json.put("code", -2);
json.put("msg", "未授权");
json.put("data", new JSONObject());
}
return json;
}
@RequestMapping("/bili/video/download/get.do")
public ResponseEntity<FileSystemResource> download(String fileName) {
String time = fileName.split(" ")[0].substring(1);
File file = new File("ffmpeg_out" + File.separator + time + File.separator + fileName);
if (!file.exists()) {
file = new File(ConfigTools.load(ConfigTools.CONFIG,"liveSavePath",String.class)+File.separator+"live" + File.separator + time + File.separator + fileName);
}
Log.i(file.getAbsolutePath());
return AppTools.getFile(file);
}
@ResponseBody
@RequestMapping("/bili/video/set/ffmpeg.do")
public JSONObject ffmpegOut(String fileName) throws UnsupportedEncodingException {
fileName= URLDecoder.decode(fileName,"UTF-8");
JSONObject json=new JSONObject();
json.put("code",0);
json.put("msg","ok");
String time = fileName.split(" ")[0].substring(1);
File file = new File("live" + File.separator + time + File.separator + fileName);
System.out.println("file "+file.getAbsolutePath()+" "+file.exists());
String ffmpeg=configService.getConfig(Config.SYSTEM_VIDEO_FFMPEG);
if(StringUtils.isEmpty(ffmpeg)||!new File(ffmpeg).exists()){
json.put("msg","FFmpeg未设置请联系管理员");
return json;
}
int i= FFmpegUtils.add(configService.getConfig(Config.SYSTEM_VIDEO_FFMPEG),file,new File("ffmpeg_out"+File.separator+time));
json.put("model",i);
switch (i){
case 0:
json.put("msg","已添加到后台转码");
break;
case 1:
json.put("msg","已经转码,无须二次转码");
break;
case 2:
json.put("msg","正在转码");
break;
}
return json;
}
}