Commit 3191d0c6a4f0877c217123baf53798e404321167

Authored by 648540858
1 parent e8ac6bf8

优化获取视频时长接口

src/main/java/top/panll/assist/controller/RecordController.java
... ... @@ -423,12 +423,12 @@ public class RecordController {
423 423 })
424 424 @ResponseBody
425 425 @GetMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")
426   - public ResponseEntity<String> fileDuration( @RequestParam String app, @RequestParam String stream, Boolean recordIng) {
427   - if (recordIng == null) recordIng = true;
  426 + @PostMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")
  427 + public ResponseEntity<String> fileDuration( @RequestParam String app, @RequestParam String stream) {
428 428 JSONObject ret = new JSONObject();
429 429 ret.put("code", 0);
430 430 ret.put("msg", "success");
431   - Double duration = videoFileService.fileDuration(app, stream, recordIng);
  431 + long duration = videoFileService.fileDuration(app, stream);
432 432 ret.put("data", duration);
433 433 return new ResponseEntity<>(ret.toString(), HttpStatus.OK);
434 434 }
... ...
src/main/java/top/panll/assist/service/FFmpegExecUtils.java
... ... @@ -151,9 +151,11 @@ public class FFmpegExecUtils implements InitializingBean{
151 151 job.run();
152 152 }
153 153  
154   - public double duration(File file) throws IOException {
  154 + public long duration(File file) throws IOException {
155 155 FFmpegProbeResult in = ffprobe.probe(file.getAbsolutePath());
156   - return in.getFormat().duration * 1000;
  156 + double duration = in.getFormat().duration * 1000;
  157 + long durationLong = new Double(duration).longValue();
  158 + return durationLong;
157 159 }
158 160  
159 161 }
... ...
src/main/java/top/panll/assist/service/VideoFileService.java
... ... @@ -205,55 +205,6 @@ public class VideoFileService {
205 205 return result;
206 206 }
207 207  
208   - public List<File> getAllFiles(String app, String stream, Boolean recording){
209   -
210   - List<File> result = new ArrayList<>();
211   - if (app == null || stream == null) {
212   - return result;
213   - }
214   -
215   - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
216   - SimpleDateFormat formatterForDate = new SimpleDateFormat("yyyy-MM-dd");
217   -
218   - File recordFile = new File(userSettings.getRecord());
219   - File streamFile = new File(recordFile.getAbsolutePath() + File.separator + app + File.separator + stream + File.separator);
220   - if (!streamFile.exists()) {
221   - logger.warn("获取[app: {}, stream: {}]的视频时未找到目录: {}", app, stream, stream);
222   - return null;
223   - }
224   -
225   - File[] dateFiles = streamFile.listFiles((File dir, String name) -> {
226   - if (new File(dir + File.separator + name).isFile()) {
227   - return false;
228   - }
229   - try {
230   - formatterForDate.parse(name);
231   - } catch (ParseException e) {
232   - logger.error("过滤日期文件时异常: {}-{}", name, e.getMessage());
233   - return false;
234   - }
235   -
236   - return true ;
237   - });
238   -
239   - if (dateFiles != null && dateFiles.length > 0) {
240   - for (File dateFile : dateFiles) {
241   - File[] files = dateFile.listFiles((File dir, String name) ->{
242   - File currentFile = new File(dir + File.separator + name);
243   - if (recording) {
244   - return currentFile.isFile() && name.contains(":") && name.endsWith(".mp4") && currentFile.length() > 0;
245   - }else {
246   - return currentFile.isFile() && name.contains(":") && name.endsWith(".mp4") && currentFile.length() > 0 && !name.startsWith(".");
247   - }
248   - });
249   - List<File> fileList = Arrays.asList(files);
250   - result.addAll(fileList);
251   - }
252   - }
253   - return result;
254   - }
255   -
256   -
257 208 /**
258 209 * 获取制定推流的指定时间段内的推流
259 210 * @param app
... ... @@ -653,10 +604,10 @@ public class VideoFileService {
653 604 return result;
654 605 }
655 606  
656   - public Double fileDuration(String app, String stream, Boolean recordIng) {
657   - List<File> allFiles = getAllFiles(app, stream, recordIng);
658   - Double durationResult = 0.0;
659   - if (allFiles.size() > 0) {
  607 + public long fileDuration(String app, String stream) {
  608 + List<File> allFiles = getFilesInTime(app, stream, null, null);
  609 + long durationResult = 0;
  610 + if (allFiles != null && allFiles.size() > 0) {
660 611 for (File file : allFiles) {
661 612 try {
662 613 durationResult += ffmpegExecUtils.duration(file);
... ...