MIGRATED
XiVST 技术架构 v1.0 · 插件协议 + Marketplace 双形态
1. 产品定位与目标
1.1 产品定位
XiVST = 羲音生态(Y1Q1 Seed · Y1Q4 Marketplace Beta 公开上线 · Y5 目标 5000 款插件 / 年 GMV 3 亿+)。车载声学行业的 VST:
- XVST 协议(开放规范)· 定义插件 manifest / 生命周期 / 通信 / 沙箱
- XVST SDK(C/C++/Python 开发工具链)· 开发者在本地编写插件并本地调试
- XVST Marketplace(嵌入 XiStudio 内的插件商店 + 公网站点)· 发布 / 浏览 / 安装
- 三级认证(Official ◆ / Verified ✓ / Community ⚪)· 不同级别享受不同曝光与分成
- WASM + 原生 C++ 双栈(桌面调试用 WASM · 车规部署用原生 C++ · DSP 芯片端进一步 AOT 编译)
1.2 核心能力(双形态共用)
- Plugin Browser:浏览 / 搜索 / 分类 / 认证级别筛选 / 排行榜
- Plugin Detail:详情 · 评分 · 版本 · 依赖 · 截图/视频 · 开发者信息
- Install Manager(仅内嵌):安装到当前工程 / 版本锁定 / 升级提醒
- Developer Console(仅公网):上架 · 审核进度 · 收益报表 · 用户反馈
- XVST SDK Docs(仅公网):开发者文档站
- Review System:用户评分 + 评论 + 举报
- Payment & Revenue(仅公网):7:2:1 分成(开发者 70% / 平台 20% / 芯片伙伴 10%)
1.3 目标用户
| 用户类型 |
场景 |
XiVST 提供的能力 |
| Tier1 / OEM 采购 |
在 XiStudio 内采购补足算法库 |
内嵌 Plugin Browser + 一键安装 |
| 独立算法开发者 ⭐ |
上架插件赚 70% 分成 |
Developer Console + SDK + 收益报表 |
| 声学工作室 |
发布品牌插件 + 建立技术影响力 |
Verified 级别申请 + 认证标识 + 推荐曝光 |
| 院校 / 开源贡献者 |
学习 + 免费发布 Free Tier 插件 |
Community 级别 + Free Tier + 公开源码引流 |
1.4 版本矩阵
| 版本 |
时点 |
覆盖能力 |
| Seed |
Y1Q1 |
XVST 协议 v0.1 + Runtime 原型(仅内部 dog-food) |
| Growth Beta |
Y1Q3 |
SDK 开发者内测 · Marketplace 骨架 |
| Marketplace 公开上线 |
Y1Q4 |
双形态完整可用 · 500 开发者 / 200 插件 · 首批 7:2:1 分成结算 |
| Scale |
Y2H1 |
跨芯片架构 v0.2 · 1000 开发者 · 支付闭环 |
| v1.0 GA |
Y2H2 |
首批 Official ◆ 级插件 · 2000+ 插件 |
| v2.0 |
Y3 |
5000+ 插件 · 生态护城河形成 · 国际化(xvst.dev) |
2. 架构总览
2.1 双形态架构
graph TB
subgraph Embedded["内嵌形态 · xi-studio/algo-library/xivst"]
EB[Plugin Browser]
ED[Plugin Detail]
EI[Install Manager]
end
subgraph Marketplace["公网形态 · marketplace.xisound.com"]
MB[Plugin Browser]
MD[Plugin Detail]
MDC[Developer Console]
MSDK[SDK Docs]
MR[Review System]
end
subgraph Shared["共享数据 / 协议"]
XVST[XVST 协议<br/>manifest/lifecycle/runtime]
API[Plugin Registry API]
Payment[Payment & Revenue API]
Runtime[XVST Runtime<br/>WASM + 原生 C++]
end
subgraph Packages["packages/"]
VSTEmb["@xi-apps/xi-vst/embedded"]
VSTMP["@xi-apps/xi-vst/marketplace"]
Protocol["@xi/protocol/xvst"]
end
subgraph Backend["Backend"]
Registry[Plugin Registry DB]
CDN[Plugin CDN<br/>S3/OSS]
Audit[审核队列]
PaymentGateway[支付网关<br/>Stripe/支付宝]
end
EB --> API
MB --> API
EI --> Runtime
MDC --> Audit
Payment --> PaymentGateway
API --> Registry
Registry --> CDN
classDef embedded fill:#E6F7FF,stroke:#1890FF,stroke-width:2px
classDef marketplace fill:#F0E6FA,stroke:#9D4EDD,stroke-width:2px
classDef shared fill:#FFF4E6,stroke:#D4A574,stroke-width:3px
classDef be fill:#F5F2EA,stroke:#6B7280,stroke-width:1px
class EB,ED,EI embedded
class MB,MD,MDC,MSDK,MR marketplace
class XVST,API,Payment,Runtime shared
class VSTEmb,VSTMP,Protocol be
class Registry,CDN,Audit,PaymentGateway be
class Embedded,Marketplace,Packages xySgL4; class Shared,Backend xySgL3;
2.2 双构建产物(vite 双 config)
apps/xi-vst/
├── src/
│ ├── embedded/ # 被 xi-studio 内嵌的面板
│ │ ├── index.ts # 导出 <VSTPanel>
│ │ ├── VSTPanel.vue
│ │ └── views/...
│ ├── marketplace/ # 独立公网站点入口
│ │ ├── main.ts
│ │ ├── App.vue
│ │ └── views/...
│ └── shared/ # 两形态共用
│ ├── components/
│ ├── stores/
│ ├── services/
│ └── types/
├── vite.config.embedded.ts # 产出组件库
└── vite.config.marketplace.ts # 产出独立 SPA + SSG
2.3 技术栈
| 层 |
选型 |
说明 |
| 框架 |
Vue 3.4+ |
两形态共用 |
| 内嵌形态 |
组件库模式 · @xi-apps/xi-vst/embedded 导出 <VSTPanel> |
XiStudio import |
| 公网形态 |
Vite 5 + vue-router 4 + vite-ssg(SEO) |
独立 SPA |
| UI |
@xi/ui-kit |
D3-FE-ARCH-003 |
| 协议 |
@xi/protocol/xvst |
独立子目录 · 三端契约 |
| 支付 |
Stripe(国际) + 支付宝/微信(国内) |
后端处理 · 前端仅跳转 |
| 视频 |
Vimeo / 自建 CDN |
插件 demo 视频 |
3. XVST 协议规范(权威 · Y1Q1 Seed 版 v0.1)
3.1 Plugin Manifest
// @xi/protocol/xvst/manifest.ts
import { z } from 'zod'
export const XVSTManifestSchema = z.object({
// 基础信息
xvstVersion: z.string(), // "0.1" · 协议版本
id: z.string(), // 反向域名如 "com.acme.anc-pro"
name: z.string(),
version: z.string(), // SemVer
author: z.object({
name: z.string(),
email: z.string().email().optional(),
url: z.string().url().optional(),
}),
description: z.string(),
keywords: z.array(z.string()),
license: z.string(), // MIT / Proprietary / Custom
// 分类(对齐 20 类前端 categoryDefinitions)
category: z.enum([
'gain', 'delay', 'filter', 'frequency', 'dynamics', 'logic', 'ai',
'signalManagement', 'mixing', 'statistics', 'voice', 'soundDesign',
'debug', 'sampleRate', 'scheduling', 'paramInteraction',
'canvasControl', 'spatialAudio', 'source', 'sink',
]),
// 技术规格
modules: z.array(z.object({
typeName: z.string(), // 模块类型代号
entry: z.string(), // 入口文件(如 "dist/anc_pro.wasm")
ports: z.object({
inputs: z.array(PortDefinitionSchema),
outputs: z.array(PortDefinitionSchema),
}),
params: z.array(ParamDefinitionSchema),
runtime: z.object({
target: z.enum(['wasm', 'native-x86_64', 'native-arm64', 'dsp-xidsp']),
minRuntime: z.string(), // 最低 XVST Runtime 版本
maxCpuLoad: z.number(), // 预估 CPU 负载(%)
maxMemoryMB: z.number(),
}),
tuningUi: z.object({
jsonUri: z.string(), // TuningUIDocument 引用
}).optional(),
})),
// 依赖
dependencies: z.record(z.string()).optional(), // 其他 XVST 插件
// 认证信息(由 Xisound 后端填充)
certification: z.object({
level: z.enum(['official', 'verified', 'community']),
signedBy: z.string(),
signedAt: z.number(),
signature: z.string(), // 数字签名
}).optional(),
// 商业信息
pricing: z.object({
model: z.enum(['free', 'paid-once', 'subscription', 'usage-based']),
price: z.number().optional(),
currency: z.string().default('USD'),
trialDays: z.number().optional(),
}),
// 资源
icon: z.string().url(),
screenshots: z.array(z.string().url()).optional(),
demoVideo: z.string().url().optional(),
homepage: z.string().url().optional(),
repository: z.string().url().optional(),
})
export type XVSTManifest = z.infer<typeof XVSTManifestSchema>
3.2 Plugin Lifecycle
// @xi/protocol/xvst/lifecycle.ts
export interface PluginLifecycleHooks {
// 安装阶段
onInstall(context: InstallContext): Promise<void>
onUninstall(context: UninstallContext): Promise<void>
onUpdate(oldVersion: string, newVersion: string, context: UpdateContext): Promise<void>
// 运行阶段(每个模块实例)
onModuleInstantiate(moduleId: string, params: any): Promise<ModuleInstance>
onModuleDispose(moduleId: string): Promise<void>
// 参数变更
onParamUpdate(moduleId: string, paramKey: string, value: any): void
// 沙箱通信(WASM 形态)
onHostMessage(msg: HostMessage): void
postToHost(msg: PluginMessage): void
}
3.3 Runtime 加载机制
stateDiagram-v2
[*] --> Discovered: Marketplace 发现插件
Discovered --> Installed: 点击安装 + 下载 + 签名校验
Installed --> Loaded: XiStudio/XiTune 启动时加载 manifest
Loaded --> Instantiated: 用户拖到 LinkCanvas
Instantiated --> Running: 链路启动后 Process 调度
Running --> Paused: 链路暂停
Paused --> Running
Running --> Disposed: 用户删除模块
Loaded --> Updated: 升级版本
Installed --> Uninstalled: 用户卸载
Uninstalled --> [*]
3.4 WASM + 原生 C++ 双栈
| 环境 |
使用形态 |
目的 |
| 开发者本地桌面调试 |
WASM |
跨平台 · 快速迭代 · 沙箱隔离 |
| XiStudio 浏览器运行 |
WASM |
无需本地工具链 · 热更新 |
| 车规 DSP 部署 |
原生 C++ → AOT 编译到 XiDSP |
实时性 + AEC-Q100 |
| 桌面 XiStudio 高性能需求 |
原生 C++(通过 pysidecar 调用) |
最低延迟 |
SDK 构建流程:
# 开发者在本地
xvst-sdk init my-plugin
xvst-sdk build --target wasm # 产出 my_plugin.wasm
xvst-sdk build --target native-arm64 # 产出 my_plugin.so
xvst-sdk test # 本地跑单测
xvst-sdk publish # 上传到 Marketplace(走审核流程)
3.5 沙箱安全
- WASM 沙箱:浏览器自带 · 插件无法访问 DOM / localStorage / 网络(除非 manifest 声明权限)
- 权限模型:
network.http(默认 false)
network.websocket(默认 false)
storage.local(默认 false)
signals.subscribe(订阅 Signal I/O · 默认 false)
- 数字签名:Official ◆ 级别必须用 Xisound 私钥签名 · Verified ✓ 用开发者私钥 + Xisound 审核
- 版本锁定:工程中安装
my-plugin@1.0.0 · 后续插件作者发 1.0.1 · 用户可选升级或保持锁定
4. 三级认证体系
| 级别 |
标识 |
条件 |
曝光权重 |
分成比例 |
| Official ◆ |
🟡 金色 |
Xisound 官方或合作伙伴出品 · 严格代码审查 + AEC-Q100 认证 |
1.0(最高) |
100% 开发者 / 0% 平台(Xisound 自研或战略合作) |
| Verified ✓ |
🟢 绿色 |
提交代码审查 + 安全扫描 + 测试覆盖率 ≥ 70% |
0.7 |
70% / 20% / 10%(7:2:1 标准分成) |
| Community ⚪ |
⚪ 灰色 |
自助发布 · 仅自动化安全扫描 · 免费或低价 |
0.3 |
85% / 15% / 0%(简化分成 · 无芯片伙伴) |
升级路径:Community → 申请 Verified → 通过后升级 → Official 需 Xisound 官方邀请
5. 目录结构
apps/xi-vst/
├── src/
│ ├── embedded/ # XiStudio 内嵌形态
│ │ ├── index.ts # 导出 <VSTPanel>
│ │ ├── VSTPanel.vue
│ │ └── views/
│ │ ├── PluginBrowserView.vue
│ │ ├── PluginDetailView.vue
│ │ └── InstallManagerView.vue
│ ├── marketplace/ # 独立公网站点
│ │ ├── main.ts
│ │ ├── App.vue
│ │ ├── router/index.ts # /, /browse, /plugin/:slug, /developer, /docs
│ │ ├── layouts/
│ │ │ ├── MarketplaceLayout.vue
│ │ │ └── DeveloperLayout.vue
│ │ └── views/
│ │ ├── LandingView.vue
│ │ ├── BrowseView.vue
│ │ ├── PluginDetailView.vue
│ │ ├── CategoryView.vue
│ │ ├── SearchView.vue
│ │ ├── DeveloperDashboardView.vue
│ │ ├── PluginSubmitView.vue
│ │ ├── RevenueView.vue
│ │ ├── AnalyticsView.vue
│ │ └── SDKDocsView.vue
│ └── shared/
│ ├── components/
│ │ ├── plugin/
│ │ │ ├── PluginCard.vue
│ │ │ ├── PluginScreenshots.vue
│ │ │ ├── RatingStars.vue
│ │ │ └── CertificationBadge.vue
│ │ ├── review/
│ │ │ ├── ReviewList.vue
│ │ │ └── ReviewForm.vue
│ │ └── common/
│ │ ├── CategoryFilter.vue
│ │ └── SearchBar.vue
│ ├── stores/
│ │ ├── usePluginStore.ts
│ │ ├── useInstallStore.ts # 仅内嵌
│ │ ├── useDeveloperStore.ts # 仅公网
│ │ └── useReviewStore.ts
│ ├── services/
│ │ ├── pluginRegistryApi.ts
│ │ ├── xvstRuntime.ts # 插件加载/卸载
│ │ └── paymentApi.ts # 仅公网
│ └── types/
│ ├── Plugin.ts
│ ├── Review.ts
│ └── RevenueReport.ts
├── vite.config.embedded.ts
├── vite.config.marketplace.ts
├── tsconfig.json
├── package.json
└── README.md
6. Store 设计(关键)
6.1 usePluginStore(两形态共用)
export const usePluginStore = defineStore('xi-vst-plugins', () => {
const plugins = ref<Plugin[]>([])
const featured = ref<Plugin[]>([])
const categories = ref<CategoryStat[]>([])
const searchQuery = ref('')
const filters = ref<PluginFilters>({ category: null, certification: null, priceRange: null })
async function browse(options?: BrowseOptions): Promise<Plugin[]>
async function search(query: string): Promise<Plugin[]>
async function getBySlug(slug: string): Promise<Plugin>
async function getFeatured(): Promise<Plugin[]>
async function getTrending(): Promise<Plugin[]>
async function rate(pluginId: string, rating: number, comment?: string): Promise<void>
return { plugins, featured, categories, searchQuery, filters, browse, search, ... }
})
6.2 useInstallStore(仅内嵌)
export const useInstallStore = defineStore('xi-vst-install', () => {
const installed = ref<InstalledPlugin[]>([])
const installing = ref<Set<string>>(new Set())
async function install(pluginId: string, version?: string): Promise<void>
async function uninstall(pluginId: string): Promise<void>
async function update(pluginId: string, toVersion: string): Promise<void>
async function listInstalled(): Promise<InstalledPlugin[]>
function isInstalled(pluginId: string): boolean
return { installed, installing, install, uninstall, update, ... }
})
6.3 useDeveloperStore(仅公网)
export const useDeveloperStore = defineStore('xi-vst-developer', () => {
const myPlugins = ref<DeveloperPlugin[]>([])
const revenue = ref<RevenueReport | null>(null)
const analytics = ref<AnalyticsData | null>(null)
async function submitPlugin(manifest: XVSTManifest, assets: File[]): Promise<SubmitResult>
async function listMyPlugins(): Promise<DeveloperPlugin[]>
async function updatePlugin(id: string, newVersion: string, assets: File[]): Promise<void>
async function getRevenue(period: 'week' | 'month' | 'quarter'): Promise<RevenueReport>
async function getAnalytics(pluginId: string): Promise<AnalyticsData>
async function requestVerification(pluginId: string): Promise<void>
return { myPlugins, revenue, analytics, submitPlugin, listMyPlugins, ... }
})
7. 与后端的接口契约
7.1 HTTP API(关键端点)
| 端点 |
方法 |
用途 |
/api/xvst/plugins |
GET |
浏览(支持 filter / pagination) |
/api/xvst/plugins/:slug |
GET |
详情 |
/api/xvst/plugins/:slug/install |
POST |
安装(内嵌形态) |
/api/xvst/plugins/:slug/reviews |
GET/POST |
评论 |
/api/xvst/search |
GET |
全文搜索 |
/api/xvst/developer/plugins |
GET/POST |
开发者的插件列表 / 提交 |
/api/xvst/developer/revenue |
GET |
收益报表 |
/api/xvst/developer/analytics/:pluginId |
GET |
分析数据 |
/api/xvst/audit/submit |
POST |
提交审核 |
/api/xvst/payment/checkout |
POST |
创建支付单 |
7.2 XVST Runtime 本地 API(嵌入 XiStudio)
xvstRuntime.loadPlugin(pluginId, version) → 下载 WASM · 校验签名 · 实例化
xvstRuntime.unloadPlugin(pluginId)
xvstRuntime.listLoaded() → 当前工程已加载的插件
8. SEO 优化(仅 Marketplace)
参考 D3-FE-ARCH-006 §3.5:
- 预渲染(Y1):用
vite-ssg 预渲染 Landing + 热门 plugin 详情页
- SSR(Y2+):如流量 > 10万 PV/日 · 迁移到 Nuxt 3
- sitemap.xml:插件 detail 页自动生成
- 结构化数据(JSON-LD):每个 plugin 页 emit
SoftwareApplication schema.org 标记
- i18n:中英文双语站点(中文 marketplace.xisound.com · 英文 xvst.dev)
9. 监控指标
| 维度 |
指标 |
目标(Y1Q4 Marketplace 公开上线时) |
| 生态规模 |
开发者注册 |
500+ |
|
已上架插件 |
200+ |
|
月活开发者 |
100+ |
| 使用量 |
Marketplace DAU |
1000+ |
|
插件日安装量 |
50+ |
|
插件总下载 |
10000+ |
| 商业 |
月 GMV |
¥50万+(Y1Q4 起步) |
|
平均客单价 |
¥500-2000 |
| 质量 |
Verified 级插件占比 |
≥ 20% |
|
严重 bug 率 |
< 1% |
10. DQ 与风险
10.1 新增 DQ
| DQ 编号 |
问题 |
建议 |
| DQ-VST-01 |
国际化域名 xvst.dev 是否 Y1 就上 |
Y1Q4 marketplace.xisound.com 中文版上线 · Y2H1 上 xvst.dev 国际版 |
| DQ-VST-02 |
支付网关先 Stripe 还是支付宝 |
Y1 先支付宝/微信(国内市场优先)· Y2 加 Stripe(国际) |
| DQ-VST-03 |
插件审核人工 vs AI 自动 |
v1.0 人工(3 个审核员)· v2.0 AI 辅助筛查 |
| DQ-VST-04 |
开源插件是否强制 GPL 兼容 |
不强制 · 但 manifest 声明 license · Copyleft 与 proprietary 混用时提示 |
| DQ-VST-05 |
XVST 协议向后兼容策略 |
至少 2 个 major 版本并行支持 · 废弃提前 180 天公告 |
10.2 风险
| 风险 |
缓解 |
| 生态冷启动难(鸡和蛋问题) |
Y1 先自研 20+ Official 插件引流 · 邀请 5-10 个合作伙伴首批入驻 |
| 恶意插件(窃取算法 IP / 安全漏洞) |
WASM 沙箱 + 签名校验 + 代码审查(Verified+)+ 举报机制 |
| 支付合规(跨境分成税务) |
聘请国际税务顾问 · 开发者自行 KYC |
| 插件与 XiDSP 车规认证冲突 |
车规部署前强制走 XiTest 完整回归 · Official 级强制 AEC-Q100 测试 |
11. 版本与变更记录
| 版本 |
日期 |
作者 |
说明 |
| v1.0 |
2026-05-08 |
work-cline |
初稿 · XVST 协议 v0.1 · 双形态架构 · 三级认证 · WASM/原生双栈 · 7:2:1 分成 · SEO 优化 |
附录 A · 引用