视频/透明视频/色度视频
相关参考:Scene API / 视频
Web 高级 API 提供了三类视频对象创建能力:
- 普通视频:
createVideo() - 透明视频:
createAlphaVideo() - 色度抠像视频:
createKeyingVideo()
创建视频
普通视频
js
const video = await api.createVideo('https://your.domain.com/ar.mp4');
await api.add(video);透明视频
js
const alphaVideo = await api.createAlphaVideo('/assets/glow.mp4');
await api.add(alphaVideo);色度视频
js
const keyingVideo = await api.createKeyingVideo(
'/assets/green-screen.mp4',
{
// 被抠出的颜色值,默认#00F400
color: '#00F400',
// 颜色相似度(0~1),默认0.42
similarity: 0.42,
// 柔和度(0~1),默认0.08
smoothness: 0.08,
// 饱和度下降速度(0~1),默认0
spill: 0,
}
);
await api.add(keyingVideo);虽然支持传递ArrayBuffer,但视频文件一般较大,会占用不少内存。更建议传递URL地址来创建视频类对象。
播放控制
播放
js
await api.playVideo(video, {
loop: true, // 是否循环播放
full_screen: false // 使其全屏播放
});后续也可以使用setVideoLoop()来修改是否循环
暂停、停止、重播
js
await api.pauseVideo(video);
await api.stopVideo(video);
await api.playbackVideo(video, { loop: false });读取状态
js
// 获取视频时长
const duration = await api.getVideoDuration(video);
// 获取视频是否暂停播放
const paused = await api.getVideoPaused(video);
// 获取当前播放的时间点
const currentTime = await api.getVideoCurrentTime(video);
// 获取当前是否循环播放
const loop = await api.getVideoLoop(video);跳转时间与循环设置
js
// 让视频跳到某一个时间
await api.setVideoCurrentTime(video, 3.2);
// 设置视频是否循环播放
await api.setVideoLoop(video, true);播放事件
play- 视频播放时触发
js
function onPlay(event) {
const { type, target } = event;
}
await api.on('play', onPlay, video);pause- 播放暂停时触发
js
function onPause(event) {
const { type, target } = event;
}
await api.on('pause', onPause, video);ended- 自然播放完毕时触发
js
function onEnded(event) {
const { type, target } = event;
}
await api.on('ended', onEnded, video);replay- 重新播放时触发
js
function onReplay(event) {
const { type, target } = event;
}
await api.on('replay', onReplay, video);什么时候用哪种视频
普通视频
适合绝大多数平面视频播放场景。
透明视频
适合你已经准备好了平台支持的透明视频素材(左侧正常视频,右侧透明度),希望直接叠加到场景中。
色度视频
适合绿幕/蓝幕等抠色类效果,但最终视觉质量高度依赖素材质量和抠色配置。
注意
视频都是在3D场景中呈现,不是以普通的video标签形式在页面上出现。
自动播放注意
浏览器对视频自动播放有强限制。即便 Kivicube 内部做了一些处置,以下情况仍要特别注意:
- 强制隐藏立即体验按钮后,媒体更容易被浏览器拦截,导致不能播放
- iOS 和部分 App 内 WebView 的策略更严格,也会导致不能播放
- 首次播放时,如果不是用户点击视频播放,也会影响播放成功率
因此视频型内容上线前,务必在真实终端上做一次完整回归。