如何使用Google Cardboard SDK for Unity创建VR视频播放器

Rao*_*Rao 7 unity-game-engine google-cardboard virtual-reality

我刚刚下载了Google Cardboard SDK以实现统一.我很好,能够创建VR项目.安装很好,一切正常.

我是VR Apps的诺布.刚刚介入VR应用程序.

我正计划为Android创建我自己的VR Enabled Video Player,就像默认的Google Cardboard Youtube播放器一样.

任何人都可以建议我链接或指导我开发此应用程序.

小智 11

Scott Driscoll的回答完全有效.我有一些初步的问题让Easy Movie Texture Unity插件为我工作,但最终想通了,它完美无缺.我现在在iPhone 6上的球体内部运行360视频作为纹理.我不得不说,我不认为它会发生.

在Mac上工作,这就是我所做的:

  1. 从Unity资源商店下载Easy Movie Texture插件
  2. 从Assets/EasyMovieTexture/Scene打开Demo Sphere演示场景
  3. 为项目创建一个新的(空)预制件,并将Sphere GameObject从Demo Sphere场景拖到预制件上.
  4. 重新打开Cardboard场景并将新的videosphere预制件拖动到层次结构中.
  5. 在Quicktime中打开源360视频
  6. 文件 - >导出 - > 720p
  7. 将文件扩展名从".mov"更改为".mp4"
  8. 将新的mp4文件拖到项目的Assets/Streaming Assets目录中.注意:不要通过菜单系统导入,因为这会强制Unity转换为OGG.
  9. 在您的videosphere GameObject的"Media Player Ctrl"脚本组件中,找到"Str_File_Name"字段并提供FULL文件名.确保将扩展名包含在字符串"mymovie.mp4"中.

很确定这就是一切.希望它可以帮助其他人坚持这个问题.谢谢Scott Driscoll!

最后一点,您只能在手机上观看视频,而不能在编辑器中预览.如果它不能以这种方式工作会更好,但实际上一旦分辨率和放置的初始问题得到解决,我不需要每次在编辑器中运行场景时都能看到视频.


Sco*_*oll 8

以下是我们如何执行此操作的主要步骤:

  1. 在相机周围添加一个带有equirectangular UV贴图和向内法线的球体.
  2. 购买插件以在该球体的纹理上播放电影.我推荐Easy Movie Texture.
  3. 使用与平台兼容的mp4s或ogg vorbis文件.这取决于手机和操作系统.

详细信息:http://immersivetechblog.foundry45.com/2015/07/31/implementing-360-video-in-unity-for-gear-vr-and-cardboard/


小智 1

我无法帮助您使用 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]);
Run Code Online (Sandbox Code Playgroud)

用它来创建表面纹理和表面:

SurfaceTexture surfaceTexture = new SurfaceTexture(textureHandle[0]);
Surface surface = new Surface(surfaceTexture);
Run Code Online (Sandbox Code Playgroud)

然后将该表面传递给 android.media.MediaPlayer:

MediaPlayer mediaPlayer = new MediaPlayer(getContext(), uriToMyMediaFile, surface);
Run Code Online (Sandbox Code Playgroud)

将该纹理绑定到场景中的一个正方形,并在每一帧调用它:

surfaceTexture.updateTexImage()
Run Code Online (Sandbox Code Playgroud)

当您调用 mediaPlayer.start(); 时,视频就会播放;

如果 Unity 允许您编写自己的 java 代码在后台运行,那么当您将该纹理绑定到 Unity 的表面时,这应该可以工作。

如果您有无法使用 mediaPlayer 播放的视频流(例如实时视频聊天等),您也可以将 Surface 与 android.media.MediaCodec 一起使用,但涉及更多设置工作。