我有一个本地主机Web服务器,该服务器运行一个页面,该页面以<video>
标签播放(来自Firestore Storage)远程视频。视频正常播放。好,很好。现在,我想将该视频用作ThreeJS画布中的纹理(使用THREE.VideoTexture
)。但是,ThreeJS不再显示视频,而是开始重复打印
THREE.WebGLState: DOMException: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The video element contains cross-origin data, and may not be loaded.
无限循环。
我的视频真的只需要在ThreeJS画布内设置CORS标头吗?如果是这样,为什么?我该如何解决?
答案 0 :(得分:1)
我的视频真的只需要在ThreeJS画布内设置CORS标头吗?
是的
如果是,为什么?
当您希望JavaScript从另一个来源读取数据时,CORS是必需的(与简单地让浏览器呈现数据而无需JavaScript触摸相反)。
将其用作纹理时,需要读取视频数据并使用JavaScript对其进行处理。
我该如何解决?
配置要从中提取视频的服务器,以授予您使用CORS的权限,或移动数据以使其位于同一原始位置。
答案 1 :(得分:0)
我遇到了同样的问题,因为视频托管在具有不同域的服务器上。该服务器提供了CORS,但另外,我应该在视频中添加一个crossorigin =“ anonymous”
<video src="URL" crossorigin="anonymous"/>
首先要添加它。当我尝试动态添加视频标签后,该视频标签已经存在,但无法正常工作。