PlayerAspectRatio
enum PlayerAspectRatio {
w1h1 = '1:1',
w2h1 = '2:1',
w4h3 = '4:3',
w3h4 = '3:4',
w9h16 = '9:16',
w16h9 = '16:9',
w21h9 = '21:9',
}VoiceConfig
interface VoiceConfig {
volume: number; // 音量,取值0~100,默认值50
speech_rate: number; // 语速,取值范围:-500~500,默认值:0
pitch_rate: number; // 语调,取值范围:-500~500,默认值:0
format?: string; // 输出文件格式,支持:PCM/WAV/MP3
}InputMedia
type InputMedia = (InputVideo | InputAudio | InputImage)
interface InputSource {
sourceState?: 'ready' | 'loading' | 'fail';
}
type MediaIdType = 'mediaId' | 'mediaURL';
interface SpriteConfig {
num: string;
lines: string;
cols: string;
cellWidth?: string;
cellHeight?: string;
}
interface MediaMark {
startTime: number;
endTime: number;
content: string;
}
interface InputVideo extends InputSource {
mediaId: string;
mediaIdType?: MediaIdType;
mediaType: 'video';
video: {
title: string;
coverUrl?: string;
duration: number;
format?: string;
src?: string;
snapshots?: string[];
sprites?: string[];
spriteConfig?: SpriteConfig;
width?: number;
height?: number;
rotate?: number;
bitrate?: number;
fps?: number;
hasTranscodedAudio?: true;
agentAudioSrc?: string;
marks?: MediaMark[];
codec?: string;
};
}
interface InputAudio extends InputSource {
mediaId: string;
mediaIdType?: MediaIdType;
mediaType: 'audio';
audio: {
title: string;
duration: number;
coverUrl?: string;
src?: string;
marks?: MediaMark[];
formatNames?: string[];
};
}
interface InputImage extends InputSource {
mediaId: string;
mediaIdType?: MediaIdType;
mediaType: 'image';
image: {
title: string;
coverUrl?: string;
src?: string;
width?: number;
height?: number;
rotate?: number;
};
}
type TimelineMaterial = { mediaIdType: MediaIdType; mediaId: string; mediaType: MediaType };MediaMark
interface MediaMark {
startTime: number;
endTime: number;
content: string;
}ASRResult
interface ASRResult {
content: string; // 字幕的内容
from: number; // 字幕的开始相对于识别素材的开始的时间偏移量
to: number; // 字幕的结束相对于识别素材的开始的时间偏移量
}StickerCategory
interface StickerCategory {
id: string; // 分类的 id
name: string; // 分类的名称,调用者自行切换语言
}StickerResponse
interface Sticker {
mediaId: string;
src: string;
}
interface StickerResponse {
total: number;
stickers: Sticker[];
}IProduceRecommend
interface IProduceRecommend {
width?: number;
height?: number;
bitrate?: number;
}CustomFontItem
interface CustomFontItem {
key: string; // 字体唯一标识
name?: string; // 展示的名字,没有用key
url: string; // 字体地址
// 用于前、后端字体渲染保持一致,页面文字渲染大小是您设置的字体大小乘以这个倍数
fontServerScale?: {
// 普通字幕字体倍数
common: number;
// 花字字体倍数
decorated: number;
};
}VoiceGroup
export interface VoiceGroup {
type: string; // 分类
category:string; // 主分类
voiceList?: Voice[];
emptyContent?: {
description: string;
linkText: string;
link: string;
};
getVoiceList?: (page: number, pageSize: number) => Promise<{ items: Voice[]; total: number }>;
getVoice?: (voiceId: string) => Promise
getDemo?: (mediaId: string) => Promise<{ src: string }>;
}Voice
export interface Voice {
voiceUrl?: string; // 示例音频地址
demoMediaId?: string; // 示例音频的播放地址
voiceType: VoiceType; // 类型
voice: string; // 人声 key
name: string; // “人名”
desc: string; // 简介
tag?: string; // 标签
remark?: string; // 备注支持的语言等信息
custom?: boolean; // 是否专属人声
}VoiceType
enum VoiceType {
Male = 'Male', // 男声
Female = 'Female', // 女声
Boy = 'Boy', // 男孩童声
Girl = 'Girl', // 女孩童声
}AvatarConfig
// 数字人配置说明
interface AvatarConfig {
// 数字人列表
getAvatarList: () => DigitalHumanList[];
// 提交数字人任务
submitAvatarVideoJob:
job: DigitalHumanJob
) => Promise
// 获取数字人任务结果
getAvatarVideoJob: (jobId: string) => Promise
// 任务轮询时间
refreshInterval: number;
// 数字人输出视频配置
outputConfigs: Array<{
width: number;
height: number;
bitrates: number[];
}>;
filterOutputConfig?: (
item: DigitalHuman,
config: Array<{
width: number;
height: number;
bitrates: number[];
}>,
) => Array<{
width: number;
height: number;
bitrates: number[];
}>;
}
// 数字人详细类型说明
// 数字人参数
interface DigitalHuman {
avatarId: string; // 数字人ID
avatarName: string; // 数字人名称
coverUrl: string; // 数字人封面
videoUrl?: string; // 数字人视频demo地址
outputMask?: boolean; // 是否输出遮罩
transparent?: boolean; // 是否背景透明
}
// 数字人列表
interface DigitalHumanList {
default: boolean;
id: string;
name: string;
getItems: (pageNo: number, pageSize: number) => Promise<{ total: number; items: DigitalHuman[] }>;
}
// 数字人提交任务返回的信息
interface DigitalHumanJobInfo {
jobId: string;
mediaId: string;
}
// 数字人任务参数类型
type DigitalHumanJobParamTypes = {
text: {//文字驱动
text?: string;
params?: DigitalHumanTextParams;
output?: DigitalHumanOutputParams;
};
audio: {//音频文件驱动
mediaId?: string;
params?: DigitalHumanAudioParams;
output?: DigitalHumanOutputParams;
};
};
// text|audio
type DigitalHumanJobType = keyof DigitalHumanJobParamTypes;
// 数字人文字驱动任务参数
type DigitalHumanTextParams = {
voice: string;
volume: number;
speechRate: number;
pitchRate: number;
autoASRJob?: boolean;
};
// 数字人音频文件驱动任务参数
type DigitalHumanAudioParams = {
title: string;
autoASRJob?: boolean;
};
// 数字人输出视频其他参数
type DigitalHumanOutputParams = {
bitrate: number;
width: number;
height: number;
};
// 生成数字人字幕切片类型
type SubtitleClip = { from: number; to: number; content: string };
// 数字人任务运行轮询结果
interface DigitalHumanJobResult {
jobId: string;
mediaId: string;
done: boolean;
errorMessage?: string;
job?: DigitalHumanJob
video?: InputVideo;
subtitleClips?: SubtitleClip[];
}
// 数字人任务
type DigitalHumanJob
type: T;
title: string;
avatar: DigitalHuman;
data: DigitalHumanJobParamTypes[T];
};
// 数字人生成视频
interface InputVideo {
mediaId: string;
mediaType: 'video';
video: {
title: string;
coverUrl?: string;
duration: number;
src?: string; // 当 useDynamicUrl 为 true 时,src 可以不传
snapshots?: string[];
sprites?: string[];
spriteConfig?: SpriteConfig;//精灵图
width?: number; // 视频源的宽度
height?: number; // 视频源的高度
rotate?: number; // 视频源的旋转角度
bitrate?: number; // 视频源的码率
fps?: number; // 视频源的帧率
hasTranscodedAudio?: true; // 是否含有转码后的音频流
agentAudioSrc?: string; // 代理的音频地址(用于分离音频轨),当 useDynamicUrl 为 true 时,agentAudioSrc 可以不传
marks?: MediaMark[];// 视频标记
};
}LicenseConfig // license的配置
type LicenseConfig = {
rootDomain?: string; // license使用的根域名,例如使用的域名是 editor.abc.com,这里填的值就是abc.com
licenseKey?: string; // 申请的licenseKey,参考顶部使用说明在控制台中申请
}AsrConfig// 智能生成字幕的配置
type AsrConfig = {
interval?: number; // 轮询时长,单位:毫秒
defaultText?: string; // 默认的文案
maxPlaceHolderLength?: number; // 默认的文案最大长度
submitASRJob: (mediaId: string, startTime: string, duration: string) => Promise
getASRJobResult?: (jobId: string) => Promise
}
interface ASRJobInfo {
jobId?: string;
jobDone: boolean;
jobError?: string;
result?: ASRResult[];
}TTSConfig// 智能配音任务的配置
type TTSConfig = {
interval?: number; // 轮询时长,单位:毫秒
submitAudioProduceJob: (text: string, voice: string, voiceConfig?: VoiceConfig) => Promise
getAudioJobResult?: (jobId: string) => Promise
}
interface VoiceConfig {
volume: number;
speech_rate: number;
pitch_rate: number;
format?: string;
custom?: boolean;
}
interface TTSJobInfo {
jobId?: string;
jobDone: boolean;
jobError?: string;
asr?: AudioASRResult[];
result?: InputAudio | null;
}
interface AudioASRResult {
begin_time?: string;
end_time?: string;
text?: string;
content?: string;
from?: number;
to?: number;
}PublicMaterialLibrary// 公共媒资库的配置
type PublicMaterialLibrary = {
getLists: () => Promise
name?: string;
pageSize?: number; // 单页展示数量
};
type MaterialList = {
name?: string;
key: string;
tag?: string;
mediaType: 'video' | 'audio' | 'image';
styleType?: 'video' | 'audio' | 'image' | 'background';
getItems: (
pageIndex: number,
pageSize: number,
) => Promise<{
items: InputMedia[];
end: boolean;
}>;
};SubtitleConfigtype SubtitleConfig = {
// 自定义纹理列表
customTextures?: {
list: () => Promise<
Array<{
key: string;
url: string;
}>
>;
// 添加自定义纹理
onAddTexture: () => Promise<{
key: string;
url: string;
}>;
// 删除自定义纹理
onDeleteTexture: (key: string) => Promise
};
}AliyunVideoEditor// AliyunVideoEditor 实例方法
type AliyunVideoEditor = {
init: (config: IConfig) => void; // 初始化编辑器
destroy: (keepState?: boolean) => boolean; // 销毁编辑器
version: string | undefined; // 获取编辑器版本
setCurrentTime: (currentTime: number) => void; // 设置编辑器预览时间
getCurrentTime: () => number; // 获取编辑器预览时间
getDuration: () => number; // 获取编辑器时长
addProjectMaterials: (materials: InputMedia[]) => void; // 添加项目素材到编辑器
setProjectMaterials: (materials: InputMedia[]) => void; // 设置项目素材到编辑器
updateProjectMaterials: (update: (materials: InputMedia[]) => InputMedia[]) => void; // 更新编辑器当前项目素材
deleteProjectMaterial: (mediaId: string) => void; // 删除编辑器项目素材
setProjectTimeline: ({ VideoTracks, AudioTracks, AspectRatio }: CustomTimeline) => Promise
getProjectTimeline: () => any; // 获取编辑器的timeline
getEvents: (eventType?: 'ui' | 'player' | 'error' | 'websdk' | 'timeline') => IObservable
importSubtitles: (type: 'ass' | 'srt' | 'clip' | 'asr', config: string) => void; // 批量导入字幕到编辑器
}VideoTranslation
type VideoTranslation = {
language?: {
// 源语言
source: Array<{
value: string;
label: string;
}>;
// 目标语言
target: Array<{
value: string;
label: string;
}>;
};
// 视频翻译
translation?: {
interval?: number;
submitVideoTranslationJob: (params: TranslationJobParams) => Promise
getVideoTranslationJob: (jobId: string) => Promise
};
// 字幕擦除
detext?: {
interval?: number;
submitDetextJob: (param: DetextJobParams) => Promise
getDetextJob: (jobId: string) => Promise
};
// 字幕提取
captionExtraction?: {
interval?: number;
submitCaptionExtractionJob: (param: CaptionExtractionJobParams) => Promise
getCaptionExtractionJob: (jobId: string) => Promise
};
};
interface TranslationJobParams {
type: 'Video' | 'Text' | 'TextArray';
mediaId?: string;
mediaIdType?: MediaIdType;
text?: string;
textArray?: string[];
editingConfig: {
SourceLanguage: string;
TargetLanguage: string;
DetextArea?: string;
SupportEditing?: boolean;
SubtitleTranslate?: {
TextSource: 'OCR' | 'SubtitleFile';
OcrArea?: string;
SubtitleConfig?: string;
};
};
}
interface TranslationJobInfo {
jobId?: string;
jobDone: boolean;
jobError?: string;
result?: {
video?: InputVideo;
timeline?: string;
text?: string;
textArray?: Array<{
Target: string;
Source: string;
}>;
};
}
interface DetextJobParams {
mediaId: string;
mediaIdType: MediaIdType;
box?: 'auto' | Array<[number, number, number, number]>;
}
interface DetextJobInfo {
jobId?: string;
jobDone: boolean;
jobError?: string;
result?: {
video?: InputVideo;
};
}
interface CaptionExtractionJobParams {
mediaId: string;
mediaIdType: MediaIdType;
box?: 'auto' | Array<[number, number, number, number]>;
}
interface CaptionExtractionJobInfo {
jobId?: string;
jobDone: boolean;
jobError?: string;
result?: {
srtContent?: string;
};
}