50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
// Author: fruit.com.cn
|
|
|
|
import type { MediaTranscodeProfile } from '@/api/admin/types'
|
|
import { defaultProfile, defaultRung, defaultSprite } from './transcodeProfileDefaults'
|
|
|
|
/** 用服务端响应回填表单,同时保持字段名与后端完全一致。 */
|
|
export const applyProfileToForm = (
|
|
form: MediaTranscodeProfile,
|
|
profile?: MediaTranscodeProfile | null
|
|
): void => {
|
|
const source = profile || defaultProfile()
|
|
form.enabled = Boolean(source.enabled)
|
|
form.segmentSeconds = Number(source.segmentSeconds)
|
|
form.sprite = { ...defaultSprite(), ...(source.sprite || {}) }
|
|
const ladder =
|
|
Array.isArray(source.ladder) && source.ladder.length ? source.ladder : [defaultRung()]
|
|
form.ladder.splice(
|
|
0,
|
|
form.ladder.length,
|
|
...ladder.map((row) => ({
|
|
quality: row.quality || '',
|
|
width: Number(row.width),
|
|
height: Number(row.height),
|
|
videoBitrateKbps: Number(row.videoBitrateKbps),
|
|
audioBitrateKbps: Number(row.audioBitrateKbps),
|
|
enabled: Boolean(row.enabled)
|
|
}))
|
|
)
|
|
}
|
|
|
|
/** 生成只包含后端约定字段的 PUT 请求体。 */
|
|
export const buildProfilePayload = (form: MediaTranscodeProfile): MediaTranscodeProfile => ({
|
|
enabled: form.enabled,
|
|
segmentSeconds: Number(form.segmentSeconds),
|
|
ladder: form.ladder.map((row) => ({
|
|
quality: row.quality.trim(),
|
|
width: Number(row.width),
|
|
height: Number(row.height),
|
|
videoBitrateKbps: Number(row.videoBitrateKbps),
|
|
audioBitrateKbps: Number(row.audioBitrateKbps),
|
|
enabled: Boolean(row.enabled)
|
|
})),
|
|
sprite: {
|
|
enabled: Boolean(form.sprite.enabled),
|
|
intervalSeconds: Number(form.sprite.intervalSeconds),
|
|
columns: Number(form.sprite.columns),
|
|
thumbWidth: Number(form.sprite.thumbWidth)
|
|
}
|
|
})
|