我刚刚下载了 Google Cardboard SDK 以实现统一。我很好,能够创建 VR 项目。设置很好,一切正常。
我是 VR 应用程序的菜鸟。刚刚进入 VR 应用程序。
我计划为安卓创建自己的支持 VR 的视频播放器,就像默认的 Google Cardboard Youtube 播放器一样。
任何人都可以建议我一个链接或者可以指导我开发这个应用程序。
我刚刚下载了 Google Cardboard SDK 以实现统一。我很好,能够创建 VR 项目。设置很好,一切正常。
我是 VR 应用程序的菜鸟。刚刚进入 VR 应用程序。
我计划为安卓创建自己的支持 VR 的视频播放器,就像默认的 Google Cardboard Youtube 播放器一样。
任何人都可以建议我一个链接或者可以指导我开发这个应用程序。
Scott Driscoll 的回答完全有效。我在让 Easy Movie Texture Unity 插件为我工作时遇到了一些问题,但最终解决了这个问题,它完美地工作。我现在在我的 iPhone 6 上的球体内部以纹理的形式运行 360 度视频。我不得不说,我认为这不会发生。
对于在 Mac 上工作,这是我所做的:
很确定这就是一切。希望它可以帮助其他人解决这个问题。谢谢斯科特·德里斯科尔!
最后一点,您只能在手机上查看视频,而不是在编辑器中预览。如果它不以这种方式工作会更好,但实际上一旦解决了最初的分辨率和位置问题,我真的不需要每次在编辑器中运行场景时都查看视频。
以下是我们如何做到这一点的主要步骤:
我看到了上面的答案,但所有这些都需要 Easy Movie Texture Unity 插件或编写自己的方式。还有另一个简单的解决方案,它不需要您购买该资产或编写自己的方式.. Oculus 提供了一个已经构建的免费示例框架,您可以轻松使用它。下面的解决方案展示了如何为 Unity 创建照片查看器和视频查看器。
构建您的 360 度 PhotoViewer:
构建您的 360 度 MoviePlayer:
*要在您的设备中播放它,只需转到构建设置并选择所需的平台并删除所有场景,然后添加打开场景并单击播放器设置下的其他设置中支持的虚拟现实。要在您的 android 手机上播放它,您需要像上面一样下载 GoogleVR SDK 并将其放入您的资产文件夹并在资产文件夹中找到 GVRViewerMain 并将其放入场景中并取消选中您在上面所做的 Virtual Reality Supported 并构建并在您的设备中运行整个程序(当您在 Unity 中点击播放时,您应该能够在游戏模式中看到视图)。您应该能够以各自的装备观看视频。
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 及更高版本,这变得非常简单。
唯一的缺点是,默认情况下它只播放单视场图像/视频,并且需要进行一些调整才能运行立体图像/视频。