You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

视频流对象创建时loadeddata事件监听器无法触发问题排查

排查video元素loadeddata事件不触发的原因

以下是针对问题的具体排查方向:

1. 确认video元素及资源基础状态

  • 先验证console.log("Video Acquired")是否输出,确保document.querySelector("video")成功获取到DOM元素。如果没拿到元素,事件绑定根本不会生效。
  • 检查video的src属性是否正确配置,直接在控制台打印video.src,确认资源地址可正常访问,同时排查是否存在跨域(CORS)问题。
  • 查看video的preload属性:若设置为none,浏览器不会预加载视频数据,可能导致loadeddata无法触发,可尝试改为preload="auto"。

2. 检查事件绑定时机

  • 确认createStreamingPlane函数的执行时机:如果函数执行时video元素还未挂载到DOM中,querySelector会返回null,事件绑定失败。建议将函数放在DOMContentLoaded事件回调中执行,或确保video元素在函数执行前已存在于DOM。
  • 排查是否事件已提前触发:如果video在你绑定loadeddata监听器之前就已经完成了第一帧加载,事件不会再触发。可通过video.readyState判断,若readyState >= 2(对应HAVE_CURRENT_DATA状态),说明数据已加载,可直接手动执行监听器内的逻辑。

3. 排查视频资源本身问题

  • 检查视频格式/编码是否被当前浏览器支持,可在控制台打印video.error查看具体错误信息。
  • loadeddata触发的前提是浏览器已加载视频的第一帧,若视频文件损坏或无有效帧数据,事件不会触发。

4. 浏览器环境与权限限制

  • 若使用的是直播流,注意非HTTPS环境下可能存在资源加载限制,或检查是否存在浏览器权限限制(如媒体资源访问权限)。
  • 打开浏览器控制台的Network面板,查看视频资源的加载状态,是否存在404、500等加载错误;Console面板是否有相关报错提示。

相关代码:

static createStreamingPlane(){
console.log("Stream Test")

    const video = document.querySelector("video");
    console.log("Video Acquired")
    video.addEventListener('loadeddata',function(){
        console.log("Function start")
        const videoTexture = new THREE.VideoTexture(video);
        console.log("Video Texture loaded")
        var size = 3;
        var geometry = new THREE.PlaneGeometry(size+2, size);
        
        //var texture = new THREE.TextureLoader().load(link);
        console.log('add');
        
        var material = new THREE.MeshBasicMaterial({
            map: videoTexture,
            side: THREE.DoubleSide,
            transparent: true,
        });
        console.log("Material loaded")
        var mesh = new THREE.Mesh(geometry, material);
        console.log("Mesh loaded")

        var frame_geo = new THREE.PlaneGeometry(size + 2.81, size + 0.815);
        frame_geo.name = 'frame_check';
        var frame_text = new THREE.TextureLoader().load(link_f);
        var frame_mat = new THREE.MeshBasicMaterial({
            map: frame_text,
            side: THREE.DoubleSide,
            transparent: true,
        });
        var frame_mesh = new THREE.Mesh(frame_geo, frame_mat);
        frame_mesh.position.set(0, -0.15, 0);

        const group = new THREE.Group();
        group.name = 'image with frame';
        mesh.name = 'image';
        frame_mesh.name = 'frame';
        frame_mesh.visible = true;
        frame_mesh.renderOrder = 1;

        group.add(mesh);
        group.add(frame_mesh);
        VRPandaEditor.vrPandaSceneController.currentScene.scene.add(group);

        var newObject1 = new VRPandaObject(group);
        VRPandaEditor.execute(new AddObjectCommand(newObject1));
        VRPandaEditor.vrPandaObjectController.selectObject(newObject1);
    },false);
}

内容的提问来源于stack exchange,提问作者J H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:21:22