跨源视频工作html5,但不是webgl



我正在尝试使用流视频作为我的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>&lt;video&gt;</code> element.  
</video> 

从上面的评论中,我将提出以下建议。

  1. 确保您实际使用的是代理。 VLC 正在流式传输到 8081。 您希望确保它通过 Apache 代理,您声明该 Apache 在端口 8888 上运行。
  2. 由于代理使您的视频"同源",因此您不必使用完整的 uri 来引用它;您只需要准确引用您需要的内容。 (这是代理的重点,使资源看起来来自同一来源(。 到同一台机器上两个不同端口上的HTTP服务器仍然不是同源。

下面是修改后的代码:

 <video id="video" src="/desktop.ogg" autoplay>  
    Your browser doesn't appear to support the HTML5 <code>&lt;video&gt;</code> element.  
 </video> 
  1. 我不能说这些代理设置是否正确。一些Apache专家将不得不对此发表评论。我只相信你的话,这是设置代理的正确方法,因为我不知道。

最新更新