@alpha2-sh/编辑
A. 编辑 SDK for alpha2: 在引擎项目文档上编辑会话, 并有输入命令、 校验和撤销, 以及浏览器桥接, 用于预览、 播放和导出文档 alpha2 发动机.
安装
npm install @alpha2-sh/editor alpha2
alpha2 是一个与此软件包相同的版本的对等依赖。 反应是一个可选的对等方,仅需要用于 @alpha2-sh/editor/react (反应19.3或后19. 浏览器要求是 alpha2对.
文档和命令
Root导入是编辑核心. 它没有装入DOM,React,Web Assembly或音频,所以它也在Node.js中运行.
import { createEditor, createEmptyDocument, serializeDocument, parseDocument } from "@alpha2-sh/editor";
const editor = createEditor({ document: createEmptyDocument({ width: 1280, height: 720 }) });
const result = editor.dispatch({
type: "track.add",
track: { id: "video", name: "Video", kind: "video", clips: [] },
});
if (!result.ok) throw result.error; // an EditorError with a `code`
editor.undo();
editor.redo();
const json = serializeDocument(editor.document); // portable JSON; media bytes stay apart
const reopened = parseDocument(json);
editor.dispose();
- 编辑器文档持有一个引擎工程( Name
document.project),编辑元数据,以及每个资产的描述符.serializeDocument财务报告和审定财务报表parseDocument写作并读作JSON;parseDocument还读取了平版引擎项目. dispatch应用一个Command(被键入的结合涵盖项目、音轨、剪辑、效果、过渡、标题提示、组成图、资产和标记);atransaction应用若干项,并按其结尾的文档检查一次。 命令文件的规则拒绝返回{ ok: false, error }改变什么.canExecute问而不应用.- 每一个变化都是一步之遥。 历史持续到120步,默认为64米B(
createEditor({ historyLimit, historyByteLimit })) (中文(简体) ). beginGesture()预览拖曳:每个update(command)显示在editor.draft不接触文件或历史commit()添加一个倒数步骤( e)cancel()页:1.subscribe, (中文(简体) ),getSnapshot财务报告和审定财务报表subscribeSelector通知更改的意见。 拒绝是EditorError,其code显示哪个检查失败 .
浏览器桥
@alpha2-sh/editor/browser 连接一个会话到浏览器中的引擎:导入,预览,用音频回放,并通过WebCodecs导出到一个MP4,MOV,MKV或WebM文件.
import { createEditor, createEmptyDocument } from "@alpha2-sh/editor";
import { createBrowserBridge } from "@alpha2-sh/editor/browser";
const editor = createEditor({ document: createEmptyDocument({ width: 1280, height: 720 }) });
const bridge = createBrowserBridge({
editor,
// URLs of alpha2/wasm/alpha2_wasm_bg.wasm, alpha2/wasm/alpha2_audio_worklet.wasm and
// alpha2/audio-worklet-processor, as the application's bundler serves them.
runtimeAssets: { wasmUrl, audioWasmUrl, workletUrl },
});
await bridge.bindPreview(canvas);
const { assetIds } = await bridge.importFiles(files); // from an <input type="file">
const trackId = crypto.randomUUID();
const placed = editor.dispatch({
type: "transaction",
commands: [
{ type: "track.add", track: { id: trackId, kind: "video", name: "Video", clips: [] } },
{
type: "clip.insert",
trackId,
clip: {
id: crypto.randomUUID(),
source_id: assetIds[0],
timeline_range: { start: 0, end: 120000 },
source_range: { start: 0, end: 120000 },
time_map: { type: "forward" },
},
},
],
});
if (!placed.ok) throw placed.error;
await bridge.seek(0);
const artifact = await bridge.startExport({ container: "webm" }).result;
// artifact.kind "file": a temporary file in the origin's private storage; release it once downloaded.
if (artifact.kind === "file") await artifact.release();
await bridge.dispose();
await editor.dispose();
- 导入以引擎检查每个文件( 介质, 字体, ),
.cubeLUT, SRT 和 WebVTT 字幕通过importCaptions),并添加到文档中一个可撤销的步骤.importSequence导入 PNG 或 OpenEXR 文件为一图像序列。 提供者未读取文件的源, 如 LaTeX 公式({ format: "latex", latex, font_size }),保留在项目本身中:putProviderSource在一个可撤销的步骤中添加或编辑一个,它在预览和两个导出中都画出没有重链接的文件. bindPreview画布上画的 与runtimeAssets.workerFactory,一个工人运行@alpha2-sh/editor/preview-worker条目使预览脱离了主线;没有主线,或者当工人失败时,主线就是主线.hashWorkerFactory(单位:千美元)@alpha2-sh/editor/hash-worker和extensionsWorkerFactory(单位:千美元)@alpha2-sh/editor/extensions-worker,与extensionsWasmUrl财务报告和审定财务报表extensionModuleUrls例如{ pdf })将文件散列和SVG,动画图像,洛蒂,OpenEXR和PDF读取到工人中去.seek, (中文(简体) ),play财务报告和审定财务报表pause移动播放头; 有音频, 回放跟随音频时钟。 音频预览需要交叉出处的孤立页面;编辑和视频预览则不.startExport返回一个工作result,进展(subscribe和cancel。 。 。 .container(单位:千美元)mp4默认,mov, (中文(简体) ),mkv或者说webm命名文件和决定解码器:缺席videoCodec或者说audioCodec是容器的默认值(H.264和AAC,或WebM的VP9和Opus,其中浏览器不能将AAC编码入MP4或MKV),而一个容器不提供,被拒绝。 输出默认会转到来源的私人存储中的临时文件( O) :release()删除它),用户选择的文件(output: { kind: "file", handle }),或为内存(output: { kind: "memory", maxBytes }) (中文(简体) ). 浏览器是否编码了可解码器,是浏览器说:bridge.videoEncoders()询问前面,浏览器没有编码的导出会被拒绝.
反应
@alpha2-sh/editor/react 已经 EditorProvider, (中文(简体) ), useEditor, (中文(简体) ), useEditorSelector(selector, equal?) 财务报告和审定财务报表 EditorPreview,将桥的预览与它制作的画布结合:
<EditorProvider editor={editor}>
<EditorPreview bridge={bridge} onError={reportError} />
</EditorProvider>
应用程序拥有会话:卸载提供者不处理会话.
本地导出
@alpha2-sh/editor/native-client (单位:千美元)createNativeClient({ baseUrl })) 输出应用程序运行的HTTP出口服务文件,例如: @alpha2-sh/node上传文档的媒体(bridge.nativeAssets)并跟踪工作到可下载文件.
许可证
MIT,版权Alpha2贡献.