我正在尝试使用流视频作为我的webGL场景中的纹理,使用three.js和threex.videoTexture。
我理解阻止跨源资源的原因,经过大量研究,我设法将其放入 html5 视频标签:)通过在 My Apache 服务器中设置代理设置。
但是,即使我可以看到视频在 Html5 视频标签中播放,当我在 webGl 中将视频作为纹理应用时,我会收到以下错误:
Uncaught SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The video element contains cross-origin data, and may not be loaded.
我确实听到了视频的声音,但我在物体上看不到视频。
有效的 html5 视频标签没有将跨源参数设置为"匿名",但它仍然有效。当我在webGL中使用的视频元素上添加跨源参数时,我没有收到错误,但是我听不到声音,也看不到视频
我真的很感激任何建议!啪!
我使用的代码取自本教程:http://learningthreejs.com/blog/2014/04/30/easy-way-to-integrate-video-or-even-webcam-in-your-texture-with-threex-dot-videotexture-game-extension-for-three-dot-js/
编辑:这是我添加到 httpd.conf 以配置代理设置的内容:
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
# VLC server stream
ProxyPass /desktop.ogg http://localhost:8081/desktop.ogg
ProxyPassReverse /desktop.ogg http://localhost:8081/desktop.ogg
这是我的htm5视频标签(工作(:
<video id="video" src="http://localhost:8081/desktop.ogg" autoplay>
Your browser doesn't appear to support the HTML5 <code><video></code> element.
</video>
从上面的评论中,我将提出以下建议。
- 确保您实际使用的是代理。 VLC 正在流式传输到 8081。 您希望确保它通过 Apache 代理,您声明该 Apache 在端口 8888 上运行。
- 由于代理使您的视频"同源",因此您不必使用完整的 uri 来引用它;您只需要准确引用您需要的内容。 (这是代理的重点,使资源看起来来自同一来源(。 到同一台机器上两个不同端口上的HTTP服务器仍然不是同源。
下面是修改后的代码:
<video id="video" src="/desktop.ogg" autoplay>
Your browser doesn't appear to support the HTML5 <code><video></code> element.
</video>
- 我不能说这些代理设置是否正确。一些Apache专家将不得不对此发表评论。我只相信你的话,这是设置代理的正确方法,因为我不知道。