@ -30,6 +30,7 @@ import com.theokanning.openai.service.OpenAiService;
@@ -30,6 +30,7 @@ import com.theokanning.openai.service.OpenAiService;
import lombok.RequiredArgsConstructor ;
import lombok.SneakyThrows ;
import okhttp3.ResponseBody ;
import org.bytedeco.javacv.FFmpegFrameGrabber ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.web.multipart.MultipartFile ;
@ -117,6 +118,12 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
@@ -117,6 +118,12 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
. build ( ) ;
ResponseBody responseBody = openAiService . createSpeech ( createSpeechRequest ) ;
// 获取音频时长
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber ( responseBody . byteStream ( ) ) ;
grabber . start ( ) ;
long durationInSec = grabber . getFormatContext ( ) . duration ( ) / 1000000 ;
grabber . close ( ) ;
// 构建发送文件信息进行OSS存储
OssFile receiveOssOssFile = new OssFile ( )
. setFileName ( receiveFileName )
@ -124,6 +131,7 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
@@ -124,6 +131,7 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
. setOriginal ( speechName )
. setType ( FileUtil . extName ( speechName ) )
. setFileSize ( responseBody . contentLength ( ) )
. setDuration ( durationInSec )
. setMimeType ( Objects . requireNonNull ( responseBody . contentType ( ) ) . toString ( ) ) ;
ossTemplate . putObject ( ossProperties . getBucketName ( ) , receiveFileName , Objects . requireNonNull ( responseBody . contentType ( ) ) . toString ( ) , responseBody . byteStream ( ) ) ;
String receiveVoiceUrl = ossTemplate . getObjectURL ( ossProperties . getBucketName ( ) , receiveFileName ) ;