ThreeJS视频纹理需要CORS标头,即使<video>标签不需要它

时间:2018-07-26 15:39:03

标签: html video three.js cors firebase-storage

我有一个本地主机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标头吗?如果是这样,为什么?我该如何解决?

2 个答案:

答案 0 :(得分:1)

  

我的视频真的只需要在ThreeJS画布内设置CORS标头吗?

是的

  

如果是,为什么?

当您希望JavaScript从另一个来源读取数据时,CORS是必需的(与简单地让浏览器呈现数据而无需JavaScript触摸相反)。

将其用作纹理时,需要读取视频数据并使用JavaScript对其进行处理。

  

我该如何解决?

配置要从中提取视频的服务器,以授予您使用CORS的权限,或移动数据以使其位于同一原始位置。

答案 1 :(得分:0)

我遇到了同样的问题,因为视频托管在具有不同域的服务器上。该服务器提供了CORS,但另外,我应该在视频中添加一个crossorigin =“ anonymous”

<video src="URL" crossorigin="anonymous"/>

首先要添加它。当我尝试动态添加视频标签后,该视频标签已经存在,但无法正常工作。