SuperAPI AI 工具集

helios-player

前端与建站

查看项目

更新于 10-16 14:53

技能介绍

Helios Player API

<helios-player> Web Component 允许你在任何 Web 应用中嵌入并控制 Helios 合成作品。它负责在 iframe 中加载合成作品,并建立用于控制和状态管理的桥接。

快速开始

<script type="module" src="path/to/@helios-project/player/dist/index.js"></script>

<helios-player src="composition.html" width="1280" height="720" controls autoplay input-props='{"title": "My Video"}'

</helios-player>

API 参考

HTML 属性

Attribute | Type | Description

src | string | 合成作品的 URL(必须包含 Helios 逻辑)

width | number | 显示宽度(若同时设置 height 则保持宽高比)

height | number | 显示高度

controls | boolean | 显示内置播放控制(播放、音量、字幕、导出)

controlslist | string | 以空格分隔的要隐藏的功能列表:nodownload、nofullscreen

autoplay | boolean | 准备就绪后立即开始播放

loop | boolean | 播放结束后循环

muted | boolean | 初始静音

poster | string | 播放前显示的图片 URL

preload | 'auto' | 'none' | 预加载行为(默认:'auto')

interactive | boolean | 允许直接与 iframe 内容交互(禁用覆盖层)

input-props | JSON 字符串 | 向合成作品传递初始属性

export-mode | 'auto' | 'canvas' | 'dom' | 客户端导出策略(默认:'auto')

export-format | 'mp4' | 'webm' | 客户端导出的输出格式(默认:'mp4')

export-caption-mode | 'burn-in' | 'file' | 导出时字幕处理方式(默认:'burn-in')

export-width | number | 导出视频宽度(独立于显示宽度)

export-height | number | 导出视频高度

export-bitrate | number | 导出目标码率(bits/s)

export-filename | string | 导出文件名(默认:'video')

disablepictureinpicture | boolean | 禁用画中画按钮

canvas-selector | string | canvas 元素的 CSS 选择器(默认:'canvas')

sandbox | string | iframe 沙箱标志(默认:'allow-scripts allow-same-origin')

CSS 变量(主题)

你可以使用 CSS 变量自定义播放器外观:

helios-player { --helios-controls-bg: rgba(0, 0, 0, 0.8); --helios-text-color: #ffffff; --helios-accent-color: #ff0000; --helios-range-track-color: #555555; --helios-range-selected-color: rgba(255, 255, 255, 0.5); --helios-font-family: 'Helvetica', sans-serif; }

JavaScript API

该元素实现了类似 Standard Media API 的接口,便于与视频封装组件集成。

const player = document.querySelector('helios-player');

// 播放控制 player.play(); player.pause(); player.load(); player.requestPictureInPicture(); // 进入画中画模式 player.currentTime = 5.0; // 跳转到第 5 秒 player.currentFrame = 150; // 跳转到第 150 帧

// 音频控制 player.volume = 0.5; // 0.0 到 1.0 player.muted = true;

// 可写属性 console.log(player.duration); // 总时长(秒) console.log(player.paused); // 布尔值 console.log(player.playbackRate); // 速度倍数 console.log(player.fps); // 合成作品 FPS console.log(player.loop); // 循环状态 console.log(player.autoplay); // 自动播放状态

// 只读属性 console.log(player.videoWidth); // 固有宽度 console.log(player.videoHeight); // 固有高度 console.log(player.readyState); // 0-4(HAVE_NOTHING 到 HAVE_ENOUGH_DATA) console.log(player.networkState); // 0-3(EMPTY、IDLE、LOADING、NO_SOURCE) console.log(player.seeking); // 布尔值(拖动时为 true) console.log(player.played); // 已播放片段的 TimeRanges 对象 console.log(player.buffered); // 已缓冲片段的 TimeRanges 对象 console.log(player.seekable); // 可跳转片段的 TimeRanges 对象 console.log(player.error); // 失败时的 MediaError 对象

// 输入属性 player.inputProps = { title: "Updated Title" };

// 文本轨道 console.log(player.textTracks); const track = player.addTextTrack("captions", "English", "en");

// 访问当前活动提示 track.addEventListener("cuechange", () => { console.log("Active Cues:", track.activeCues); });

事件

播放器会派发标准媒体事件:

loadstart、loadedmetadata、loadeddata、canplay、canplaythrough

play、pause、ended、playing

timeupdate、seeking、seeked

volumechange

durationchange、ratechange

error

高级控制

如需对 Helios 状态进行底层访问,可使用 getController()。

const controller = player.getController();

if (controller) { const state = controller.getState();

// 动态更新 controller.setDuration(30); // 更新时长到 30s controller.setFps(60); // 更新 FPS 到 60 controller.setSize(1080, 1080); // 更新分辨率 controller.setMarkers([{ id: "m1", time: 5, label: "Intro" }]); }

诊断

按 Shift+D 切换覆盖层查看环境能力(WebCodecs、WebGL),或通过程序调用 diagnose()。

const report = await player.diagnose(); console.log("WebCodecs support:", report.webCodecs);

字幕

你可以通过添加 <track> 元素作为子元素来提供字幕。

<helios-player src="..."> <track kind="captions" src="captions.srt" default> </helios-player>

播放器会获取 SRT 文件并将其传递给 Helios 控制器。

客户端导出

播放器支持直接在浏览器中导出视频(使用 VideoEncoder)。

格式:支持 mp4(H.264/AAC)和 webm(VP9/Opus)。

音频:从 <audio> 元素捕获音频(必须启用 CORS)。

字幕:支持“烧录”字幕(export-caption-mode="burn-in")或保存为旁挂文件(export-caption-mode="file")。

分辨率:使用 export-width 和 export-height 独立于播放器尺寸配置导出分辨率。

用法:用户在控制栏中点击“Export”,或手动调用 clientSideExporter(内部 API)。

UI 功能

字幕:切换“CC”按钮以叠加显示当前字幕。

音量:滑块和静音切换。

速度:播放速率选择器(0.25x - 2x)。

全屏:切换全屏模式。

进度条:可视化播放范围指示。

响应式:控制栏会适应较小宽度(紧凑/迷你模式)。

常见问题

跨域(CORS):播放器使用 iframe。如果 src 位于不同源,请确保设置 CORS 头。

音频导出:音频元素必须提供带 Access-Control-Allow-Origin 的数据,才能被导出器捕获。

源文件

组件:packages/player/src/index.ts

导出器:packages/player/src/features/exporter.ts