斯科特·德里斯科尔的回答完全有效。我有一些初步的问题让Easy Movie Texture Unity插件为我工作,但最终想通了,它完美无缺。我现在在iPhone 6上的球体内部运行360视频作为纹理。我不得不说,我认为它不会发生。
在Mac上工作,这就是我所做的:
- 从Unity资源商店下载Easy Movie Texture插件
- 从Assets / EasyMovieTexture / Scene
打开Demo Sphere演示场景
- 为项目创建一个新的(空)预制件,并将Sphere GameObject从Demo Sphere场景拖到预制件上。
- 重新打开您的Cardboard场景并将新的videosphere预制件拖到您的层次结构中。
- 在Quicktime中打开源360视频
- 文件 - >出口 - > 720P
- 将文件扩展名从“.mov”更改为“.mp4”
- 将新的mp4文件拖到项目的Assets / Streaming Assets目录中。注意:不要通过菜单系统导入,因为这会强制Unity转换为OGG。
- 在您的videosphere GameObject的“Media Player Ctrl”脚本组件中,找到“Str_File_Name”字段并提供FULL文件名。确保将扩展名包含在字符串“mymovie.mp4”中。
醇>
很确定这就是一切。希望它可以帮助其他人坚持这个问题。谢谢Scott Driscoll!
最后一点,您只能在手机上观看视频,而不能在编辑器中预览。如果它不能以这种方式工作会更好,但实际上一旦解决了分辨率和放置的初始问题,我不需要每次在编辑器中运行场景时都能看到视频。
Here are the major steps for how we do this:
- Add a sphere with an equirectangular UV mapping and inward facing normals around the camera.
- Purchase a plugin to play a movie on that sphere’s texture. I recommend Easy Movie Texture.
- Use mp4s or ogg vorbis files that are compatible with the platform. This is phone and OS dependent.
Full details: http://immersivetechblog.foundry45.com/2015/07/31/implementing-360-video-in-unity-for-gear-vr-and-cardboard/
我看到了上面的答案,但所有这些都需要Easy Movie Texture Unity插件或编码你的方式..
还有另一种简单的解决方案,它不需要您通过自己的方式购买该资产或代码。
Oculus提供了一个已经构建的免费样本框架,您可以毫不费力地使用它。
下面的解决方案显示了如何创建照片查看器以及Unity的视频查看器。
构建360度PhotoViewer:
- 转到Blender并删除所有prexisitng对象(如果有的话)并创建一个icosphere并将细分增加到一个看起来更像6的球体的点并点击Generate UVs(这两个选项都可以在下面的设置中找到)创建选项卡添加到球体)并转到编辑并选择翻转法线,以便您可以看到内部而不是外部并保存。
- 将该icosphere保存的文件带入Unity中的资产文件夹。
- 下载GoogleVR SDK并将GoogleVR插件添加到您的资源文件夹中..(您可以在此处下载:https://developers.google.com/vr/unity/)
- 删除默认显示的主摄像头和方向灯。
- 将您的icosphere资产带入您的项目。
- 将您的资源文件夹中的GVR Main带入您的项目:GoogleVR插件 - >遗产 - >预制 - > GVR Main
- 拍摄任何panaroma或360照片并将其放入资源文件夹。
- 将此照片放在资源文件夹中,并将其放在场景中的icosphere上方并点击播放。你应该可以看到你的360度照片。
醇>
构建360度MoviePlayer:
- 步骤1相同。
- 现在转到Oculus开发人员控制台并下载此文件并将其带到您的资源文件夹。 https://developer3.oculus.com/downloads/game-engines/1.5.0/Oculus_Sample_Framework_for_Unity_5_Project/
- 将您在上面下载的此文件带到资源文件夹。
- 在您的assetsFolder中找到MoviePlayer,将其带入您的项目中。
- 将您下载的icosphere添加到您的资源文件夹中并稍微缩放以便您正确查看。
- 从项目中复制MovieSurface组件中的MoviePlayer示例脚本和音频源,并将其添加到场景中球体的组件中,同时删除球体组件中的动画制作者。
- 在MovieSurface的Mesh Renderer下的Materials中找到Movie Player材质,并将其添加到球体顶部。
- 现在这个球体形成了你的360度电影播放器,所以将它作为资产存储在资产文件夹中。
- 创建一个新场景,删除定向灯并将保存的icosphere资源带入此场景,并将主摄像头移动到中心位置。
- 删除非必需资源以清除项目中除MoviePlayer,插件和流媒体资产之外的一些空间。
- 您必须将所需的mp4转换为ogv文件以及插件才能在VR中播放,并将mp4和ogv文件带入您的流媒体资源文件夹并更改MovieName并单击“播放”。你应该可以看到你的360度视频播放。
醇>
*要在您的设备中播放,只需转到构建设置并选择所需的平台并删除所有场景,然后只需添加打开场景并单击播放器设置下其他设置中支持的虚拟现实。
要在Android手机中播放它,您需要像上面一样下载GoogleVR SDK并将其放入您的资源文件夹并在资源文件夹中找到GVRViewerMain并将其带入场景并取消选中您在上面支持的虚拟现实并且只需构建并在你的设备中运行整个事情(当你在Unity中玩游戏时,你应该可以在游戏模式中看到视图)。
您应该可以在各自的设备中看到视频。
- 还有一个视频教程可用,但我只能与我的新StackOverFlow个人资料共享2个链接。
我无法帮助您使用Unity,但在java中,您可以使用OpenGL-ES创建纹理:
private static int GL_TEXTURE_EXTERNAL_OES = 0x8D65;
....
GLES20.glGenTextures(1, textureHandle, 0);
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureHandle[0]);
用它来创建表面纹理和表面:
SurfaceTexture surfaceTexture = new SurfaceTexture(textureHandle[0]);
Surface surface = new Surface(surfaceTexture);
然后将该表面传递给android.media.MediaPlayer:
MediaPlayer mediaPlayer = new MediaPlayer(getContext(), uriToMyMediaFile, surface);
将纹理绑定到场景中的正方形并在每帧中调用它:
surfaceTexture.updateTexImage()
,当您调用mediaPlayer.start();
时,视频将播放
如果Unity允许您编写自己的java代码以在幕后运行,那么如果您将该纹理绑定到Unity的表面,这应该可以。
如果您有一个不能与mediaPlayer一起玩的视频流(如实时视频聊天等),您也可以使用android.media.MediaCodec的表面,但那里有很多更多的设置工作。
对于Unity 5.6及更高版本,这已变得非常简单。
- 你只需要一个倒置法线的球体,你可以在网上找到它,或者只是进入搅拌机并制作一个IcoSphere并翻转法线,或者你可以使用着色器在普通球体上做同样的事情。在任何一种情况下,都要为着色器使用Unlit纹理。
- 在默认使用Unity的组件中添加一个视频播放器。
- 为此视频播放器添加任意360度视频。您也可以添加在线链接。并且它在从GoogleVR到SteamVR的各种平台上都能很好地发挥作用。
醇>
唯一的缺点是,它默认只播放单视场图像/视频,需要进行一些调整才能运行立体图像/视频。