140 lines
5.7 KiB
Java
140 lines
5.7 KiB
Java
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.AppTools;
|
|
import com.yutou.bilibili.Tools.Config;
|
|
import com.yutou.bilibili.Tools.FFmpegUtils;
|
|
import com.yutou.bilibili.Tools.ServiceTools;
|
|
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.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("live");
|
|
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("live");
|
|
JSONArray array = new JSONArray();
|
|
for (File f : list) {
|
|
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("live" + File.separator + time + File.separator + fileName);
|
|
com.yutou.bilibili.Tools.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);
|
|
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","已添加到后台转码");
|
|
case 1:
|
|
json.put("msg","已经转码,无须二次转码");
|
|
break;
|
|
case 2:
|
|
json.put("msg","正在转码");
|
|
break;
|
|
}
|
|
return json;
|
|
}
|
|
}
|