From 4779c1b1bcafa9194c50bbb802fd45dedb3e1870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Wed, 2 Apr 2025 16:44:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A6=82=E6=9E=9C=E6=B5=81?= =?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8=E5=88=99=E5=85=B3=E9=97=AD=E6=97=B6?= =?UTF-8?q?=E5=80=99=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StreamRecordController.java | 14 +++-- .../tuoheng/steam/service/ITaskService.java | 2 +- .../tuoheng/steam/service/TaskService.java | 61 +++++++++++-------- src/main/resources/application.properties | 24 ++++---- 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/tuoheng/steam/controller/StreamRecordController.java b/src/main/java/com/tuoheng/steam/controller/StreamRecordController.java index cc25aab..bc12117 100644 --- a/src/main/java/com/tuoheng/steam/controller/StreamRecordController.java +++ b/src/main/java/com/tuoheng/steam/controller/StreamRecordController.java @@ -72,12 +72,16 @@ public class StreamRecordController { if(Objects.isNull(streamUrl)) { return Response.fail(-1); } - Response response = Response.success(taskService.stopTask(streamUrl)); - if(Objects.isNull(response.getData().getOutFileName()) || response.getData().getOutFileName().isEmpty()){ - response.setCode(500); + try { + Response response = Response.success(taskService.stopTask(streamUrl)); + if(Objects.isNull(response.getData()) || Objects.isNull(response.getData().getOutFileName()) || response.getData().getOutFileName().isEmpty()){ + response.setCode(500); + } + System.out.println("关闭录制返回 :"+ JSON.toJSONString(response)); + return response; + }catch (Exception e){ + return Response.fail(-1); } - System.out.println("关闭录制返回 :"+ JSON.toJSONString(response)); - return response; } @GetMapping("info") diff --git a/src/main/java/com/tuoheng/steam/service/ITaskService.java b/src/main/java/com/tuoheng/steam/service/ITaskService.java index 2aa59b5..5bb9882 100644 --- a/src/main/java/com/tuoheng/steam/service/ITaskService.java +++ b/src/main/java/com/tuoheng/steam/service/ITaskService.java @@ -8,7 +8,7 @@ public interface ITaskService { public String startPic(String streamUrl); - public StreamTask stopTask(String streamUrl); + public StreamTask stopTask(String streamUrl) throws Exception; public StreamTask getLastTask(String streamUrl); diff --git a/src/main/java/com/tuoheng/steam/service/TaskService.java b/src/main/java/com/tuoheng/steam/service/TaskService.java index e970eb4..1a2de59 100644 --- a/src/main/java/com/tuoheng/steam/service/TaskService.java +++ b/src/main/java/com/tuoheng/steam/service/TaskService.java @@ -44,16 +44,18 @@ public class TaskService implements ITaskService{ StreamTask streamTask = entry.getValue(); if(streamTask.getStartTime().getTime() < new Date().getTime() - 30 * 60 * 1000 ) { logger.info("清理废弃任务 {}", JSON.toJSONString(streamTask)); - StreamTask s = stopTask(entry.getKey()); - scheduler.schedule(() -> { - File file = new File(targetPath +"/"+ s.getOutFileName()); - try { - file.delete(); - logger.info("废弃文件删除成功"); - }catch (Exception e) { - logger.error(e.getMessage()); - } - }, 60, TimeUnit.SECONDS); + try { + StreamTask s = stopTask(entry.getKey()); + scheduler.schedule(() -> { + File file = new File(targetPath +"/"+ s.getOutFileName()); + try { + logger.info("废弃文件删除成功 {}",file.delete()); + }catch (Exception e) { + logger.error(e.getMessage()); + } + }, 60, TimeUnit.SECONDS); + }catch (Exception ignore) {} + } } } @@ -93,7 +95,9 @@ public class TaskService implements ITaskService{ Date twoHoursAgo = calendar.getTime(); if (value.getStartTime().before(twoHoursAgo)) { logger.error("taskId {} 执行超时,手动关闭", key); - stopTask(key); + try { + stopTask(key); + }catch (Exception ignore) {} } }); @@ -170,7 +174,9 @@ public class TaskService implements ITaskService{ } - public StreamTask stopTask(String streamUrl) { + public StreamTask stopTask(String streamUrl) throws Exception { + + boolean recordSuccess = true; StreamTask currentStreamTask = runningTasks.remove(streamUrl); if (currentStreamTask!= null) { @@ -178,11 +184,18 @@ public class TaskService implements ITaskService{ if (!CollectionUtils.isEmpty(currentStreamTask.getStreamProcesses())) { for (StreamProcess streamProcess : currentStreamTask.getStreamProcesses()) { + if(!new File(streamProcess.getFileName()).exists()){ + recordSuccess = false; + } logger.info("streamUrl {} taskId {} destroy Process {}", streamUrl,currentStreamTask.getTaskId() ,streamProcess.getInnerProcessId()); streamProcess.destroy(); } } + if(!recordSuccess){ + throw new Exception(""); + } + try { String outFileName = UUID.randomUUID().toString() + ".mp4"; StreamProcess mergeProcess = processService.mergeStream(outFileName, currentStreamTask.getStreamProcesses()); @@ -225,19 +238,10 @@ public class TaskService implements ITaskService{ } -// if( historyTasks.containsKey(streamUrl)){ -// historyTasks.get(streamUrl).add(currentStreamTask); -// }else { -// historyTasks.put(streamUrl, new LinkedList<>()); -// historyTasks.get(streamUrl).offerLast(currentStreamTask); -// } - if(Objects.nonNull(currentStreamTask.getMergeProcess())){ if(Objects.nonNull(currentStreamTask.getMergeProcess().getFileName()) && !currentStreamTask.getMergeProcess().getFileName().isEmpty()){ try { -// -// scheduler.schedule(task, 3, TimeUnit.SECONDS); executor.schedule(new Runnable() { @Override public void run() { @@ -287,11 +291,12 @@ public class TaskService implements ITaskService{ } }else { - if(historyTasks.containsKey(streamUrl)){ - return historyTasks.get(streamUrl).peekLast(); - }else { - return null; - } + throw new Exception(""); +// if(historyTasks.containsKey(streamUrl)){ +// return historyTasks.get(streamUrl).peekLast(); +// }else { +// return null; +// } } } @@ -350,7 +355,9 @@ public class TaskService implements ITaskService{ public void stopAllTask(){ runningTasks.forEach((key, value) -> { - stopTask(key); + try { + stopTask(key); + }catch (Exception ignore){} }); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a205dfd..efde9dd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,14 +1,14 @@ spring.application.name=demo -#server.port = 8989 -#srs.splitPath=/data/java/srs/stream_server/temp -#srs.targetPath=/data/java/srs/srs/trunk/objs/nginx/html -#ffmpeg=/data/ffmpeg/bin/ffmpeg -#recordPath=/data/java/srs/srs/trunk/objs/nginx/html/record -#livedates=8 +server.port = 8989 +srs.splitPath=/data/java/srs/stream_server/temp +srs.targetPath=/data/java/srs/srs/trunk/objs/nginx/html +ffmpeg=/data/ffmpeg/bin/ffmpeg +recordPath=/data/java/srs/srs/trunk/objs/nginx/html/record +livedates=8 -server.port = 8080 -srs.splitPath=/Users/sunpeng/workspace/stream/temp -srs.targetPath=/Users/sunpeng/workspace/stream/html -ffmpeg=ffmpeg -recordPath=/Users/sunpeng/workspace/stream/record -livedates=7 \ No newline at end of file +#server.port = 8080 +#srs.splitPath=/Users/sunpeng/workspace/stream/temp +#srs.targetPath=/Users/sunpeng/workspace/stream/html +#ffmpeg=ffmpeg +#recordPath=/Users/sunpeng/workspace/stream/record +#livedates=7 \ No newline at end of file