Browse Source

fix(audio): :bugs: fix webm audio strconv.ParseFloat: parsing "N/A"

chenjm 6 tháng trước cách đây
mục cha
commit
b33d808bc1
2 tập tin đã thay đổi với 8 bổ sung5 xóa
  1. 7 5
      common/utils.go
  2. 1 0
      relay/channel/openai/relay-openai.go

+ 7 - 5
common/utils.go

@@ -263,17 +263,19 @@ func GetAudioDuration(ctx context.Context, filename string, ext string) (float64
     if err != nil {
       return 0, errors.Wrap(err, "failed to create temporary file")
     }
-    defer os.Remove(tmpFp.Name())
-    defer tmpFp.Close()
+    tmpName := tmpFp.Name()
+    // Close immediately so ffmpeg can open the file on Windows.
+    _ = tmpFp.Close()
+    defer os.Remove(tmpName)
 
-    // ffmpeg -y -i filename -vcodec copy -acodec copy tmpFp
-    ffmpegCmd := exec.CommandContext(ctx, "ffmpeg", "-y", "-i", filename, "-vcodec", "copy", "-acodec", "copy", tmpFp.Name())
+    // ffmpeg -y -i filename -vcodec copy -acodec copy <tmpName>
+    ffmpegCmd := exec.CommandContext(ctx, "ffmpeg", "-y", "-i", filename, "-vcodec", "copy", "-acodec", "copy", tmpName)
     if err := ffmpegCmd.Run(); err != nil {
       return 0, errors.Wrap(err, "failed to run ffmpeg")
     }
 
     // Recalculate the duration of the new file
-    c = exec.CommandContext(ctx, "ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", tmpFp.Name())
+    c = exec.CommandContext(ctx, "ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", tmpName)
     output, err := c.Output()
     if err != nil {
       return 0, errors.Wrap(err, "failed to get audio duration after ffmpeg")

+ 1 - 0
relay/channel/openai/relay-openai.go

@@ -351,6 +351,7 @@ func countAudioTokens(c *gin.Context) (int, error) {
 	if err != nil {
 		return 0, errors.WithStack(err)
 	}
+  defer reqFp.Close()
 
 	tmpFp, err := os.CreateTemp("", "audio-*"+ext)
 	if err != nil {