| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package service
- import "strings"
- const (
- VideoBillingResolution480P = "480p"
- VideoBillingResolution720P = "720p"
- VideoBillingResolution1080P = "1080p"
- )
- // xAI 视频生成按秒计费,duration 请求参数允许 1-15 秒;未指定时上游默认生成 8 秒。
- // 计费时长必须与上游实际消耗对齐,否则用户可通过拉长 duration 套利(提交时长由用户控制)。
- const (
- VideoBillingMinDurationSeconds = 1
- VideoBillingMaxDurationSeconds = 15
- VideoBillingDefaultDurationSeconds = 8
- )
- // NormalizeVideoBillingDurationSecondsOrDefault 归一化计费用视频时长:
- // 未指定(<=0)按上游默认 8 秒计,超出上游允许区间按边界收敛。
- func NormalizeVideoBillingDurationSecondsOrDefault(durationSeconds int) int {
- if durationSeconds <= 0 {
- return VideoBillingDefaultDurationSeconds
- }
- if durationSeconds < VideoBillingMinDurationSeconds {
- return VideoBillingMinDurationSeconds
- }
- if durationSeconds > VideoBillingMaxDurationSeconds {
- return VideoBillingMaxDurationSeconds
- }
- return durationSeconds
- }
- // LookupVideoBillingResolution 归一化分辨率并报告是否为已知档位。
- // 配置解析路径必须用它而不是 OrDefault:把无法识别的档位(如 "4k"、拼错的
- // "1080i")静默折算成 480p,会让管理员配的高分辨率单价被挂到低分辨率档上。
- func LookupVideoBillingResolution(resolution string) (string, bool) {
- switch strings.ToLower(strings.TrimSpace(resolution)) {
- case "480", "480p", "sd":
- return VideoBillingResolution480P, true
- case "720", "720p", "hd":
- return VideoBillingResolution720P, true
- case "1080", "1080p", "full_hd", "full-hd", "fhd":
- return VideoBillingResolution1080P, true
- default:
- return "", false
- }
- }
- // NormalizeVideoBillingResolutionOrDefault 用于运行时计费:上游回传的分辨率
- // 缺失或无法识别时按最低档兜底,保证请求仍可计费。
- func NormalizeVideoBillingResolutionOrDefault(resolution string) string {
- if normalized, ok := LookupVideoBillingResolution(resolution); ok {
- return normalized
- }
- return VideoBillingResolution480P
- }
|