iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android开发VR实战之播放360度全景视频
  • 777
分享到

Android开发VR实战之播放360度全景视频

vrAndroid 2022-06-06 05:06:44 777人浏览 泡泡鱼
摘要

VR即Virtual Reality虚拟现实。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体

VR即Virtual Reality虚拟现实。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。
那么,如何在Android中去开发VR功能的APP呢?我们利用谷歌提供的开源SDK去实现一个360°全景视频的功能

一.在build.gradle中引入谷歌VR的SDK依赖

   compile 'com.Google.vr:sdk-videowidget:1.10.0'

二.注意支持的最小SDK

  minSdkVersion 19
  targetSdkVersion 25

三.界面布局文件


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="cn.bluemobi.dylan.vrdevelopvideo.MainActivity">
 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Android开发VR360度全景视频" />
 <com.google.vr.sdk.widgets.video.VrVideoView
 android:id="@+id/vr_video_view"
 android:layout_width="match_parent"
 android:layout_height="250dp"></com.google.vr.sdk.widgets.video.VrVideoView>
 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal">
 <ImageButton
 android:id="@+id/play_toggle"
 android:layout_width="0dp"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:background="@android:color/transparent"
 android:paddingStart="0dp"
 android:src="@drawable/pause" />
 <SeekBar
 android:id="@+id/seek_bar"
 style="?android:attr/progressBarStyleHorizontal"
 android:layout_width="0dp"
 android:layout_height="32dp"
 android:layout_weight="8" />
 <ImageButton
 android:id="@+id/volume_toggle"
 android:layout_width="0dp"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:background="@android:color/transparent"
 android:paddingStart="0dp"
 android:paddingTop="4dp"
 android:src="@drawable/volume_on" />
 </LinearLayout>
</LinearLayout>

四.加载360°全景视频


 
 private void load360Video() {
 vr_video_view = (VrVideoView) findViewById(R.id.vr_video_view);
 seek_bar = (SeekBar) findViewById(R.id.seek_bar);
 volume_toggle = (ImageButton) findViewById(R.id.volume_toggle);
 play_toggle = (ImageButton) findViewById(R.id.play_toggle);
 
 VrVideoView.Options options = new VrVideoView.Options();
 options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;
 
 vr_video_view.setEventListener(new VrVideoEventListener() {
 
 @Override
 public void onCompletion() {
 super.onCompletion();
 
 vr_video_view.seekTo(0);
 setIsPlay(false);
 Log.d(TAG, "onCompletion()");
 }
 
 @Override
 public void onNewFrame() {
 super.onNewFrame();
 seek_bar.setProgress((int) vr_video_view.getCurrentPosition());
 Log.d(TAG, "onNewFrame()");
 }
 
 @Override
 public void onClick() {
 super.onClick();
 Log.d(TAG, "onClick()");
 }
 
 @Override
 public void onLoadError(String errORMessage) {
 super.onLoadError(errorMessage);
 Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);
 }
 
 @Override
 public void onLoadSuccess() {
 super.onLoadSuccess();
 
 seek_bar.setMax((int) vr_video_view.getDuration());
 Log.d(TAG, "onNewFrame()");
 }
 
 @Override
 public void onDisplayModeChanged(int newDisplayMode) {
 super.onDisplayModeChanged(newDisplayMode);
 Log.d(TAG, "onLoadError()->newDisplayMode=" + newDisplayMode);
 }
 });
 try {
 
 vr_video_view.loadVideoFromAsset("congo.mp4", options);
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 volume_toggle.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
 setIsMuted(!isMuted);
 }
 });
 
 play_toggle.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
 setIsPlay(!isPlay);
 }
 });
 
 seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 
 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 if (fromUser) {
 
 vr_video_view.seekTo(progress);
 }
 }
 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {
 }
 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
 }
 });
 }
 
 private void setIsMuted(boolean isMuted) {
 this.isMuted = isMuted;
 volume_toggle.setImageResource(isMuted ? R.drawable.volume_off : R.drawable.volume_on);
 vr_video_view.setVolume(isMuted ? 0.0f : 1.0f);
 }
 
 private void setIsPlay(boolean isPlay) {
 this.isPlay = isPlay;
 play_toggle.setImageResource(isPlay ?R.drawable.pause: R.drawable.play );
 if(isPlay){
 vr_video_view.playVideo();
 }else{
 vr_video_view.pauseVideo();
 }
 }

五.GitHub

https://GitHub.com/linglongxin24/VRDevelopVideo

您可能感兴趣的文章:Android提高之MediaPlayer播放网络视频的实现方法Android使用VideoView播放本地视频和网络视频的方法一个HTML5播放视频的video控件只支持android的默认格式mp4和3gp详解Android App中使用VideoView来实现视频播放的方法android WEBvie指定视频播放器播放网站视频Android提高之MediaPlayer音视频播放android使用videoview播放视频Android播放assets文件里视频文件相关问题分析Android播放视频的三种方式Android仿新浪微博/QQ空间滑动自动播放视频功能Android DragVideo实现播放视频时任意拖拽的方法Android编程实现播放视频的方法示例


--结束END--

本文标题: Android开发VR实战之播放360度全景视频

本文链接: https://www.lsjlt.com/news/22762.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作