浏览代码

fix:测试直播间关闭,视频录制

liujunchi 3 年之前
父节点
当前提交
b539ba0f68

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -985,7 +985,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         if (whetherVideoFlag && stateFlag) {
             try {
                 //停止录制视频
-                imFeignService.stopRecord(roomSpeakerInfo.getRoomUid());
+                // imFeignService.stopRecord(roomSpeakerInfo.getRoomUid());
             } catch (Exception e) {
                 log.error("stopRecord error: {}", e.getMessage());
             }

+ 5 - 0
mec-im/pom.xml

@@ -107,6 +107,11 @@
             <groupId>io.netty</groupId>
             <artifactId>netty-all</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.googlecode.mp4parser</groupId>
+            <artifactId>isoparser</artifactId>
+            <version>1.1.22</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 105 - 0
mec-im/src/main/java/com/ym/utils/Mp4MergeUtil.java

@@ -0,0 +1,105 @@
+package com.ym.utils;
+
+import com.coremedia.iso.boxes.Container;
+import com.googlecode.mp4parser.authoring.Movie;
+import com.googlecode.mp4parser.authoring.Track;
+import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
+import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
+import com.googlecode.mp4parser.authoring.tracks.AppendTrack;
+import org.apache.commons.io.FileUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Description 直播视频合并
+ *
+ * @author liujunchi
+ * @date 2022-07-06
+ */
+public class Mp4MergeUtil {
+
+
+    /**
+     * 合并视频
+     *
+     * @param videoUrlList:  所有视频地址集合
+     * @return
+     */
+    public static String mergeVideo(List<String> videoUrlList) throws IOException {
+        FileOutputStream fos = null;
+        FileChannel fc = null;
+        String path = "/var/tmp/mp4";
+        File mergeFile = new File("/var/tmp/mp4/merge.mp4");
+        for (String video : videoUrlList) {
+            File file = new File("/var/tmp/mp4/" + video + ".mp4");
+            FileUtils.copyURLToFile(new URL(video), file);
+        }
+
+        try {
+            List<Movie> sourceMovies = new ArrayList<>();
+            for (String video : videoUrlList) {
+                sourceMovies.add(MovieCreator.build(video));
+            }
+
+            List<Track> videoTracks = new LinkedList<>();
+            List<Track> audioTracks = new LinkedList<>();
+
+            for (Movie movie : sourceMovies) {
+                for (Track track : movie.getTracks()) {
+                    if ("soun".equals(track.getHandler())) {
+                        audioTracks.add(track);
+                    }
+
+                    if ("vide".equals(track.getHandler())) {
+                        videoTracks.add(track);
+                    }
+                }
+            }
+
+            Movie mergeMovie = new Movie();
+            if (audioTracks.size() > 0) {
+                mergeMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
+            }
+
+            if (videoTracks.size() > 0) {
+                mergeMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
+            }
+
+            Container out = new DefaultMp4Builder().build(mergeMovie);
+            fos = new FileOutputStream(mergeFile);
+            fc = fos.getChannel();
+            out.writeContainer(fc);
+            fc.close();
+            fos.close();
+            return mergeFile.getAbsolutePath();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (fc != null) {
+                try {
+                    fc.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            if (fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        return null;
+    }
+}