Skip to main content

createVideoFrameUpdater 创建视频帧更新器

createVideoFrameUpdater

类型: MethodDeclaration

所属类: VideoElement

定义位置: ui.ts

描述

创建视频帧更新器

返回值

类型: void

源代码

位置: 第 5417 行

private createVideoFrameUpdater(): void {
const {player, texture} = this
if ('requestVideoFrameCallback' in player) {
// 优先使用请求视频帧回调的方法
const update = () => {
if (texture.destroyed) return
if (!texture.complete) {
texture.complete = true
}
if (texture.width !== player.videoWidth || texture.height !== player.videoHeight) {
texture.resize(player.videoWidth, player.videoHeight)
}
GL.bindTexture(GL.TEXTURE_2D, texture.base.glTexture)
GL.texImage2D(GL.TEXTURE_2D, 0, GL.RGBA, texture.width, texture.height, 0, GL.RGBA, GL.UNSIGNED_BYTE, player)
player.requestVideoFrameCallback(update)
}
player.requestVideoFrameCallback(update)
} else {
// 兼容模式:添加更新器
const vplayer = player as HTMLVideoPlayer
const fps = 60
const interval = 1000 / fps
let elapsed = 0
this.updaters.add({
update: () => {
elapsed += Time.rawDeltaTime
if (elapsed >= interval) {
elapsed %= interval
// 当视频已加载时,上传视频画面到纹理
if (vplayer.readyState === 4) {
if (texture.destroyed) return
if (!texture.complete) {
texture.complete = true
}
if (texture.width !== vplayer.videoWidth || texture.height !== vplayer.videoHeight) {
texture.resize(vplayer.videoWidth, vplayer.videoHeight)
}
GL.bindTexture(GL.TEXTURE_2D, texture.base.glTexture)
GL.texImage2D(GL.TEXTURE_2D, 0, GL.RGBA, texture.width, texture.height, 0, GL.RGBA, GL.UNSIGNED_BYTE, player)
}
}
}
})
}
}

文档生成时间:2025/7/7 12:07:07