# PubEditor **Repository Path**: cpsoft13/pub-editor ## Basic Information - **Project Name**: PubEditor - **Description**: 信发节目编辑器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-23 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pub-editor 节目编辑器(Program Editor)独立库 — 从 zPublisher 主项目中抽离,以三方库形式引入。 包含三个独立的包: - **Rust** — 数据模型 (`zpublisher-program-model`) 和数据库仓储层 (`zpublisher-program-db`) - **Vue** — 节目编辑器 UI 组件 (`@cpsoft/pub-editor-vue`) - **Flutter** — 节目渲染器 (`pub_editor_flutter`) ## Rust ### zpublisher-program-model 纯数据类型,包含节目、组件模板、排程和素材的结构体定义。 ```toml [dependencies] zpublisher-program-model = { git = "https://gitee.com/cpsoft13/pub-editor.git" } ``` ### zpublisher-program-db 数据库仓储层,提供节目、组件模板和文件夹的 CRUD 操作。依赖 `zpublisher-program-model`。 ```toml [dependencies] zpublisher-program-db = { git = "https://gitee.com/cpsoft13/pub-editor.git" } ``` ## Vue ### @cpsoft/pub-editor-vue 节目编辑器 Vue 3 组件库,包含画布编辑器、时间线编辑器、组件模板编辑器、排程组件等。 ```bash npm install @cpsoft/pub-editor-vue ``` ```ts import { setApiClient, ProgramEditor } from '@cpsoft/pub-editor-vue' import { api } from './api/client' setApiClient(api) ``` ## Flutter ### pub_editor_flutter 节目渲染器 Flutter 组件,将节目布局渲染为视频、图片、文本、容器和背景音乐。 ```yaml dependencies: pub_editor_flutter: git: url: https://gitee.com/cpsoft13/pub-editor.git path: flutter ``` ```dart import 'package:pub_editor_flutter/pub_editor.dart'; ProgramRenderer( program: programDetail, delegate: myDelegate, // implements ProgramRendererDelegate apiBaseUrl: 'http://192.168.1.100:9090/api', screenSize: Size(1920, 1080), ) ``` ## 最近变更 ### 2026-06-02 — Decoder Priming: 视频预加载优化 **问题**:节目素材已在本地缓存,但播放前仍加载缓慢。根因是 `player.open()`(解码器初始化)被推迟到渲染阶段串行执行。 **修复**:在 preinit 阶段 (`_initVideoFromLocal`) prime decoder — 调用 `player.open()` + 等待首帧 + `pause()`。渲染时检测到已 prime 的 player(`duration > 0`),跳过 `open()` 直接 `seek(0)` + `play()`,视频即刻出画面。 - `Future.wait` 并行 prime 所有视频,总耗时 = 最慢单个视频解码时间 - 通过 `DeviceProfile.requiresSurfaceBeforeOpen` 控制,需 Surface-before-open 的设备自动跳过 - `_doOpenPlayer` 配套修改:已 prime player 跳过重复 `open()` 参见:[[lesson-async-preinit-block-render]] ## License MIT