Bladeren bron

更新 dfs-store 中音频文件相关接口

reghao 2 jaren geleden
bovenliggende
commit
fab7faa00c

+ 3 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/AudioFileMapper.java

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.db.mapper;
 import cn.reghao.dfs.store.model.po.AudioFile;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import cn.reghao.oss.api.dto.media.AudioInfo;
+import cn.reghao.oss.api.dto.media.AudioUrl;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -14,5 +15,6 @@ import java.util.List;
 @Mapper
 public interface AudioFileMapper extends BaseMapper<AudioFile> {
     List<AudioFile> findByAudioFileId(String audioFileId);
-    AudioInfo findAudioInfo(String audioFileId);
+    List<AudioInfo> findAudioInfo(String audioFileId);
+    List<AudioUrl> findAudioUrl(String audioFileId);
 }

+ 6 - 5
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/AudioRepository.java

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.db.repository;
 import cn.reghao.dfs.store.db.mapper.*;
 import cn.reghao.dfs.store.model.po.*;
 import cn.reghao.oss.api.dto.media.AudioInfo;
+import cn.reghao.oss.api.dto.media.AudioUrl;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -23,15 +24,15 @@ public class AudioRepository {
         audioFileMapper.saveAll(audioFiles);
     }
 
-    public AudioFile findAudioFile(String audioFileId) {
-        return null;
-    }
-
     public List<AudioFile> findAudioFiles(String audioFileId) {
         return audioFileMapper.findByAudioFileId(audioFileId);
     }
 
-    public AudioInfo getAudioInfo(String audioFileId) {
+    public List<AudioInfo> getAudioInfo(String audioFileId) {
         return audioFileMapper.findAudioInfo(audioFileId);
     }
+
+    public List<AudioUrl> getAudioUrls(String audioFileId) {
+        return audioFileMapper.findAudioUrl(audioFileId);
+    }
 }

+ 16 - 5
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/media/AudioFileServiceImpl.java

@@ -2,10 +2,13 @@ package cn.reghao.dfs.store.rpc.media;
 
 import cn.reghao.dfs.store.db.repository.AudioRepository;
 import cn.reghao.oss.api.dto.media.AudioInfo;
+import cn.reghao.oss.api.dto.media.AudioUrl;
 import cn.reghao.oss.api.iface.media.AudioFileService;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2023-08-28 15:00:43
@@ -21,12 +24,20 @@ public class AudioFileServiceImpl implements AudioFileService {
 
     @Override
     public AudioInfo getAudioInfo(String audioFileId) {
-        return audioRepository.getAudioInfo(audioFileId);
+        List<AudioInfo> list = audioRepository.getAudioInfo(audioFileId);
+        return list.isEmpty() ? null : list.get(0);
     }
 
-    public void getAudioUrl(String audioFileId) {
-        AudioInfo audioInfo = audioRepository.getAudioInfo(audioFileId);
-        String sign = "";
-        return;
+    @Override
+    public List<AudioUrl> getAudioUrls(String audioFileId) {
+        List<AudioUrl> audioUrls = audioRepository.getAudioUrls(audioFileId);
+        audioUrls.forEach(audioUrl -> {
+            String url = audioUrl.getUrl();
+
+            String sign = "";
+            String signedUrl = url;
+            audioUrl.setUrl(signedUrl);
+        });
+        return audioUrls;
     }
 }

+ 0 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/task/MediaConverter.java

@@ -152,7 +152,6 @@ public class MediaConverter {
         @Override
         public void run() {
             log.info("convert audio file {}", audioFileId);
-            AudioFile audioFile = audioRepository.findAudioFile(audioFileId);
         }
     }
 }

+ 23 - 13
dfs-store/src/main/java/cn/reghao/dfs/store/task/processor/AudioFileProcessor.java

@@ -81,21 +81,23 @@ public class AudioFileProcessor {
         String audioCodec = audioProps.getCodecName();
         int duration = audioProps.getDuration().intValue();
         long bitRate = audioProps.getBitRate();
-        AudioFile audioFile;
+
+        List<AudioFile> list = new ArrayList<>();
+        AudioFile audioFile = new AudioFile(audioFileId, objectId, duration, audioCodec, bitRate, objectUrl);
+        list.add(audioFile);
+
         if (!SupportedMedia.audioCodecs.contains(audioCodec)) {
-            log.info("将 {} 对象的音频转换为 aac 编码", objectName);
             File file = new File(objectResult.getAbsolutePath());
-            audioFile = getConvertedAudioFile(audioFileId, file, objectName, ".m4a");
-        } else {
-            audioFile = new AudioFile(audioFileId, objectId, duration, audioCodec, bitRate, objectUrl);
-        }
-
-        if (audioFile != null) {
-            audioRepository.saveAudioFiles(List.of(audioFile));
-            return new UploadFileRet(audioFileId, null);
+            AudioFile audioFile1 = getConvertedAudioFile(audioFileId, file, objectName, ".m4a");
+            if (audioFile1 != null) {
+                list.add(audioFile1);
+            } else {
+                log.error("{} 对象转换为 aac 编码失败", objectName);
+            }
         }
 
-        return null;
+        audioRepository.saveAudioFiles(list);
+        return new UploadFileRet(audioFileId, null);
     }
 
     private AudioFile getConvertedAudioFile(String audioFileId, File file, String originalObjectName, String suffix) {
@@ -112,15 +114,23 @@ public class AudioFileProcessor {
                 throw new Exception("音频转码失败");
             }
             String sha256sum = DigestUtil.sha256sum(destPath);
+            MediaProps mediaProps = FFmpegWrapper.getMediaProps(destPath);
+            if (mediaProps == null || mediaProps.getAudioProps() == null) {
+                log.error("转码后的 {} 文件 FFmpeg 音频信息为 null", destPath);
+                throw new Exception("音频编码信息获取失败");
+            }
+
+            AudioProps audioProps = mediaProps.getAudioProps();
+            String audioCodec = audioProps.getCodecName();
+            int duration = audioProps.getDuration().intValue();
+            long bitRate = audioProps.getBitRate();
 
             ObjectProp objectProp = objectNameService.getObjectProp(originalObjectName, suffix);
             String originalFilename = "";
             ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
             String objectId = objectResult.getObjectId();
             String url = objectNameService.getObjectUrl(objectResult.getObjectName());
-            int duration = 0;
             String codec = "aac";
-            long bitRate = 0;
             return new AudioFile(audioFileId, objectId, duration, codec, bitRate, url);
         } catch (Exception e) {
             e.printStackTrace();

+ 18 - 3
dfs-store/src/main/resources/mapper/AudioFileMapper.xml

@@ -4,9 +4,17 @@
 <mapper namespace="cn.reghao.dfs.store.db.mapper.AudioFileMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into audio_file
-        (`id`,`deleted`,`create_time`,`update_time`,`audio_file_id`,`object_id`,`duration`,`codec`,`bit_rate`,`url`)
+        (`audio_file_id`,`object_id`,`duration`,`codec`,`bit_rate`,`url`)
         values
-        (#{id},#{deleted},#{createTime},#{updateTime},#{audioFileId},#{objectId},#{duration},#{codec},#{bitRate},#{url})
+        (#{audioFileId},#{objectId},#{duration},#{codec},#{bitRate},#{url})
+    </insert>
+    <insert id="saveAll" useGeneratedKeys="true" keyProperty="id">
+        insert into audio_file
+        (`audio_file_id`,`object_id`,`duration`,`codec`,`bit_rate`,`url`)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.audioFileId},#{item.objectId},#{item.duration},#{item.codec},#{item.bitRate},#{item.url})
+        </foreach>
     </insert>
 
     <select id="findByAudioFileId" resultType="cn.reghao.dfs.store.model.po.AudioFile">
@@ -15,8 +23,15 @@
         where audio_file_id=#{audioFileId}
     </select>
     <select id="findAudioInfo" resultType="cn.reghao.oss.api.dto.media.AudioInfo">
-        select audio_file_id,duration,url
+        select audio_file_id,duration,codec,url
+        from audio_file
+        where audio_file_id=#{audioFileId}
+        order by id desc
+    </select>
+    <select id="findAudioUrl" resultType="cn.reghao.oss.api.dto.media.AudioUrl">
+        select audio_file_id,bit_rate,codec,url
         from audio_file
         where audio_file_id=#{audioFileId}
+        order by id desc
     </select>
 </mapper>

+ 1 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/AudioInfo.java

@@ -16,5 +16,6 @@ public class AudioInfo implements Serializable {
 
     private String audioFileId;
     private int duration;
+    private String codec;
     private String url;
 }

+ 21 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/AudioUrl.java

@@ -0,0 +1,21 @@
+package cn.reghao.oss.api.dto.media;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2023-10-12 15:07:44
+ */
+@Setter
+@Getter
+public class AudioUrl implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String audioFileId;
+    private String codec;
+    private Long bitRate;
+    private String url;
+}

+ 4 - 0
oss-api/src/main/java/cn/reghao/oss/api/iface/media/AudioFileService.java

@@ -1,6 +1,9 @@
 package cn.reghao.oss.api.iface.media;
 
 import cn.reghao.oss.api.dto.media.AudioInfo;
+import cn.reghao.oss.api.dto.media.AudioUrl;
+
+import java.util.List;
 
 /**
  * @author reghao
@@ -8,4 +11,5 @@ import cn.reghao.oss.api.dto.media.AudioInfo;
  */
 public interface AudioFileService {
     AudioInfo getAudioInfo(String audioFileId);
+    List<AudioUrl> getAudioUrls(String audioFileId);
 }