video_billing_resolution.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package service
  2. import "strings"
  3. const (
  4. VideoBillingResolution480P = "480p"
  5. VideoBillingResolution720P = "720p"
  6. VideoBillingResolution1080P = "1080p"
  7. )
  8. // xAI 视频生成按秒计费,duration 请求参数允许 1-15 秒;未指定时上游默认生成 8 秒。
  9. // 计费时长必须与上游实际消耗对齐,否则用户可通过拉长 duration 套利(提交时长由用户控制)。
  10. const (
  11. VideoBillingMinDurationSeconds = 1
  12. VideoBillingMaxDurationSeconds = 15
  13. VideoBillingDefaultDurationSeconds = 8
  14. )
  15. // NormalizeVideoBillingDurationSecondsOrDefault 归一化计费用视频时长:
  16. // 未指定(<=0)按上游默认 8 秒计,超出上游允许区间按边界收敛。
  17. func NormalizeVideoBillingDurationSecondsOrDefault(durationSeconds int) int {
  18. if durationSeconds <= 0 {
  19. return VideoBillingDefaultDurationSeconds
  20. }
  21. if durationSeconds < VideoBillingMinDurationSeconds {
  22. return VideoBillingMinDurationSeconds
  23. }
  24. if durationSeconds > VideoBillingMaxDurationSeconds {
  25. return VideoBillingMaxDurationSeconds
  26. }
  27. return durationSeconds
  28. }
  29. // LookupVideoBillingResolution 归一化分辨率并报告是否为已知档位。
  30. // 配置解析路径必须用它而不是 OrDefault:把无法识别的档位(如 "4k"、拼错的
  31. // "1080i")静默折算成 480p,会让管理员配的高分辨率单价被挂到低分辨率档上。
  32. func LookupVideoBillingResolution(resolution string) (string, bool) {
  33. switch strings.ToLower(strings.TrimSpace(resolution)) {
  34. case "480", "480p", "sd":
  35. return VideoBillingResolution480P, true
  36. case "720", "720p", "hd":
  37. return VideoBillingResolution720P, true
  38. case "1080", "1080p", "full_hd", "full-hd", "fhd":
  39. return VideoBillingResolution1080P, true
  40. default:
  41. return "", false
  42. }
  43. }
  44. // NormalizeVideoBillingResolutionOrDefault 用于运行时计费:上游回传的分辨率
  45. // 缺失或无法识别时按最低档兜底,保证请求仍可计费。
  46. func NormalizeVideoBillingResolutionOrDefault(resolution string) string {
  47. if normalized, ok := LookupVideoBillingResolution(resolution); ok {
  48. return normalized
  49. }
  50. return VideoBillingResolution480P
  51. }