Как получить видео 360 VR в правильном формате для Android VR View

Я думаю, что понял проблему, с которой столкнулся, с моим первоначальным вопросом здесь . Когда я загрузил видео 360°, они выглядят как обычный видеофайл, например:

Обычное видео

Но для корректной работы VR View видео нужно разделить следующим образом:

VR-видео

Можно ли каким-либо образом преобразовать загруженные 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" /> 

person Anish    schedule 25.01.2017    source источник


Ответы (1)


Я скачал видео, на которое вы ссылаетесь, и смог заставить его правильно воспроизводиться с помощью VrVideoView как в обычном режиме, так и в режиме очков. Видео, на которое вы ссылаетесь, является не стереоскопическим, а моноскопическим видео.

Для ясности этого ответа я кратко объясню два типа VR-видео, поддерживаемых Google VR SDK: моноскопические и стереоскопические видео. При моноскопии видео снято только одной камерой и при просмотре в обычном плеере выглядит как верхнее изображение в вашем вопросе, со всеми искажениями. Со стереоскопическим видео было снято двумя камерами, и в зависимости от стереоскопического формата (есть верх/низ и лево/право) оно будет выглядеть как нижнее изображение в вашем вопросе при просмотре с помощью обычного проигрывателя, а также будет выглядеть искаженным. Плеер 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-плеера. Встроенный режим — это обычный небольшой проигрыватель, который вписывается в ваш пользовательский интерфейс и действует как небольшое окно просмотра одним глазом в 360-градусном видео с коррекцией искажений. Полноэкранный моноскопический режим аналогичен встроенному в том, что это та же одноглазая перспектива, но вместо этого в качестве окна просмотра используется весь экран устройства. Опция полноэкранного стерео разделит видео на два изображения, по одному для каждого глаза, и их можно будет просматривать в очках виртуальной реальности. См. ниже код для этого (примечание: этот код можно вызвать в любое время после создания 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 используется проигрывателем, чтобы определить, как отображать это видео. У вас может быть моноскопически снятое видео, которое отображается стереоскопически, просто каждый глаз будет видеть одинаковую перспективу. Точно так же вы можете отображать стереоскопически снятое видео моноскопически, просто окно просмотра будет отображать только перспективу одного глаза, а другая перспектива будет игнорироваться.

Я надеюсь, что это проясняет ситуацию. Дайте мне знать, если у вас все еще есть проблемы с воспроизведением видео.

person anthonycr    schedule 25.01.2017
comment
Вы видели Бога? У меня есть. Он известен под именем anthonycr в stackoverflow. Большое спасибо за вашу помощь здесь. Установка типа ввода на MONO была причиной проблем. Я пытался смотреть моноскопическое видео с типом ввода STEREO_OVER_UNDER. Очень ценю ваше объяснение! - person Anish; 25.01.2017
comment
Пожалуйста! Тип ввода для меня тоже был проблематичным, поэтому я рад, что смог помочь кому-то еще разобраться с этим. - person anthonycr; 25.01.2017