如何以正确的Android VR视图格式获取360 VR视频

时间:2017-01-25 14:56:56

标签: android android-videoview google-vr 360-virtual-reality

我想我已经找到了我面对的问题here。当我下载360视​​频时,它们看起来像这样的普通视频文件:

Normal Video

但是要让VR View正常工作,视频需要像这样拆分:

VR Video

有什么方法可以将下载的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" /> 

1 个答案:

答案 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);

围绕OptionsDisplayMode的命名可能存在一些混淆。播放器仅使用Options来确定源视频是否具有一个或两个透视图。播放器使用DisplayMode来确定如何显示该视频。您可以使用立体拍摄的单视镜头视频,每只眼睛都可以看到相同的视角。同样,您可以通过单眼显示立体拍摄的视频,只是视口只显示一只眼睛的视角而另一种视角将被忽略。

我希望能够解决问题。如果您仍然无法播放视频,请与我们联系。