浏览代码

直播录制bug

zouxuan 3 年之前
父节点
当前提交
fdc5cb13af

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveRoomVideoDao.java

@@ -16,5 +16,6 @@ public interface ImLiveRoomVideoDao extends BaseMapper<ImLiveRoomVideo> {
 
     int insertBatch(@Param("entities") List<ImLiveRoomVideo> entities);
 
+    ImLiveRoomVideo getLastRecord(@Param("roomId") String roomId, @Param("recordId") String recordId);
 }
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveRoomVideoMapper.xml

@@ -27,5 +27,8 @@
             #{entity.endTime}, #{entity.type}, #{entity.createdTime})
         </foreach>
     </insert>
+    <select id="getLastRecord" resultMap="BaseResultMap">
+        SELECT * FROM im_live_room_video WHERE room_uid_ = #{roomId} AND record_id_ = #{recordId} ORDER BY id_ DESC LIMIT 1
+    </select>
 
 </mapper>

+ 28 - 26
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -20,10 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.net.HttpURLConnection;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -130,15 +127,18 @@ public class LiveRoomServiceImpl implements LiveRoomService {
                 .eq("type", 0));
         if (Objects.nonNull(video)) {
             return;
-        } else {
-            video = new ImLiveRoomVideo();
         }
+        imLiveRoomVideoService.save(initImLiveRoomVideo(roomId, recordId,new Date()));
+    }
+
+    private ImLiveRoomVideo initImLiveRoomVideo(String roomId, String recordId,Date now) {
+        ImLiveRoomVideo video = new ImLiveRoomVideo();
         video.setRoomUid(roomId);
         video.setRecordId(recordId);
-        video.setStartTime(new Date());
+        video.setStartTime(now);
         video.setType(0);
-        video.setCreatedTime(new Date());
-        imLiveRoomVideoService.save(video);
+        video.setCreatedTime(now);
+        return video;
     }
 
     @Override
@@ -161,26 +161,28 @@ public class LiveRoomServiceImpl implements LiveRoomService {
                 String roomId = recordNotify.getRoomId();
                 //写入数据库
                 try {
-                    ImLiveRoomVideo video = imLiveRoomVideoService.getOne(new QueryWrapper<ImLiveRoomVideo>()
-                            .eq("room_uid_", roomId)
-                            .eq("record_id_", recordNotify.getRecordId())
-                            .eq("type", 0));
-                    if (Objects.isNull(video)) {
+                    Date now = new Date();
+                    //获取最后一次录制视频
+                    ImLiveRoomVideo video = imLiveRoomVideoService.getDao().getLastRecord(roomId,recordNotify.getRecordId());
+                    if(Objects.isNull(video)){
+                        log.error("获取录制视频失败:roomId : {} ,recordId:{}", roomId, recordNotify.getRecordId());
                         return;
                     }
-                    Date now = new Date();
-                    video.setEndTime(now);
-                    video.setType(2);
-                    //逗号拼接录制视频地址
-                    String videoUrl = video.getUrl();
-                    if (StringUtils.isEmpty(videoUrl)) {
-                        videoUrl = fileUrl;
-                    } else {
-                        videoUrl = videoUrl + "," + fileUrl;
+                    if (StringUtils.isNotEmpty(video.getUrl())) {
+                        //保存切片
+                        ImLiveRoomVideo imLiveRoomVideo = initImLiveRoomVideo(roomId, recordNotify.getRecordId(), now);
+                        imLiveRoomVideo.setStartTime(video.getEndTime());
+                        video.setUrl(fileUrl);
+                        video.setType(2);
+                        imLiveRoomVideoService.save(imLiveRoomVideo);
+                        return;
+                    }else {
+                        video.setEndTime(now);
+                        video.setType(2);
+                        video.setUrl(fileUrl);
+                        video.setCreatedTime(now);
+                        imLiveRoomVideoService.updateById(video);
                     }
-                    video.setUrl(videoUrl);
-                    video.setCreatedTime(now);
-                    imLiveRoomVideoService.updateById(video);
                 } catch (Exception e) {
                     log.error("recordSync >>>>  error : {}", e.getMessage());
                 }