Scott Driscoll的答案完全有效。我最初在让Easy Movie Texture Unity插件为我工作时遇到了一些问题,但最终找到了解决办法,并且它可以完美运行。现在我在我的iPhone 6上拥有360度视频在球体内部作为纹理运行。我必须说,我没想到这会发生。
对于在Mac上工作的情况,这是我所做的:
非常确定这就是全部内容。希望它对其他卡在这个问题上的人有所帮助。谢谢Scott Driscoll!
最后注意一点,您只能在手机上查看视频,而不能在编辑器中预览。如果不工作,这将更好,但实际上,一旦解决了分辨率和位置等初始问题,我并不需要每次在编辑器中运行场景时都看到视频。
*要在设备上播放它,请转到构建设置并选择所需的平台,删除所有场景,只添加Open Scene并在Player Settings下的Other Settings中启用Virtual Reality Supported。 要在Android手机上播放它,您需要下载GoogleVR SDK,就像上面那样,将其带入您的资源文件夹中,并在资源文件夹中查找GVRViewerMain,并将其带入场景中,并取消您之前启用的Virtual Reality Supported,然后在设备上构建和运行整个东西(当您在Unity中点击Play时,您应该能够在游戏模式中看到视图)。 您应该能够在相应的设备上看到视频。
唯一的缺点是,默认情况下仅播放单眼图像/视频,并且需要进行一些调整才能运行立体图像/视频。
我无法帮助你解决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传递过来的surface上,这应该可以实现。
如果您有一个无法使用mediaPlayer播放的视频流(如实时视频聊天等),您也可以使用android.media.MediaCodec与surface一起使用,但需要进行更多的设置工作。