我想我已经找到了我面对的问题here。当我下载360视频时,它们看起来像这样的普通视频文件:
但是要让VR View正常工作,视频需要像这样拆分:
有什么方法可以将下载的360视频转换为VR(双屏)格式,还是可以通过编程方式将我的应用设置为接受360 mp4文件并显示而不会过度放大或缩小视频的某些区域?
从我的xml文件中提取:
<com.google.vr.sdk.widgets.video.VrVideoView
android:id="@id/video_view"
android:layout_width="match_parent"
android:layout_height="250dip"
android:scrollbars="null" />
答案 0 :(得分:5)
我下载了您关联的视频,并且能够在常规和护目镜模式下使用VrVideoView
正常播放。您链接的视频不是立体视频,而是单视频视频。
为了清楚回答这个问题,我将简要介绍一下Google VR SDK支持的两种VR视频:Monoscopic和Stereoscopic视频。使用monoscopic,视频只用一台摄像机拍摄,在普通播放器中观看时,它看起来像你问题中的顶部图像,带有所有的扭曲。使用立体视频时,视频是使用两个摄像头拍摄的,并且根据立体格式(有顶部/底部和左/右),当使用常规播放器观看时,它看起来就像问题中的底部图像,并且看起来也会变形。 Google的VR播放器仅支持立体格式的顶部/底部版本。
如果您尝试播放的视频是单视频360视频(与链接视频一样),则可以使用VR SDK播放,如下所示:
VrVideoView vrVideoView;
// initialize the view here
Options options = new Options();
// This tells the player that the video is a monoscopic 360 video
options.inputType = Options.TYPE_MONO;
// This tells the player that it should play using HLS or progressive video play
// If you are linking to a single video file, use default.
options.inputFormat = Options.FORMAT_DEFAULT;
// Assuming you've downloaded the video...
vrVideoView.loadVideoFromAssets("my-video.mp4", options);
vrVideoView.playVideo();
现在,如果您正在播放立体上/下格式360视频,那么您可以通过改变视频的输入类型来同样播放它:
VrVideoView vrVideoView;
// initialize the view here
Options options = new Options();
// This tells the player that the video is a stereoscopic top/bottom 360 video
options.inputType = Options.TYPE_STEREO_OVER_UNDER;
// This tells the player that it should play using HLS or progressive video play
// If you are linking to a single video file, use default.
options.inputFormat = Options.FORMAT_DEFAULT;
// Assuming you've downloaded the video...
vrVideoView.loadVideoFromAssets("my-video.mp4", options);
vrVideoView.playVideo();
现在,您可能想要使用护目镜播放此视频。在这种情况下,您只需设置VR播放器的显示模式即可。嵌入式模式是适合您的UI的常规小型播放器,可作为360视频中的小型单眼视口,并且可以纠正失真。全屏单视场模式类似于嵌入式,即同一个单眼视角,而是设备的整个屏幕用作视口。全屏立体声选项将视频分成两个图像,每只眼睛一个,并可通过VR护目镜查看。请参阅下面的代码来执行此操作(注意:此代码可以在VrVideoView
构建后随时调用,并相应调整):
// This displays the video as inside the normal bounds for viewing without the VR goggles.
vrVideoView.setDisplayMode(DisplayMode.EMBEDDED);
// If you want to go full-screen without goggles...
vrVideoView.setDisplayMode(DisplayMode.FULLSCREEN_MONO);
// If you want to go full-screen and use goggles...
vrVideoView.setDisplayMode(DisplayMode.FULLSCREEN_STEREO);
围绕Options
和DisplayMode
的命名可能存在一些混淆。播放器仅使用Options
来确定源视频是否具有一个或两个透视图。播放器使用DisplayMode
来确定如何显示该视频。您可以使用立体拍摄的单视镜头视频,每只眼睛都可以看到相同的视角。同样,您可以通过单眼显示立体拍摄的视频,只是视口只显示一只眼睛的视角而另一种视角将被忽略。
我希望能够解决问题。如果您仍然无法播放视频,请与我们联系。