Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user