Android VR 视屏
效果图
谷歌的VR:
虚拟实境(英语:virtual reality,缩写为VR),简称虚拟技术,也称虚拟环境,是利用电脑模拟产生一个三维空间的虚拟世界,提供用户关于视觉等感官的模拟,让用户感觉仿佛身历其境,可以及时、没有限制地观察三维空间内的事物。用户进行位置移动时,电脑可以立即进行复杂的运算,将精确的三维世界视频传回产生临场感。该技术集成了计算机图形、计算机仿真、人工智能、感应、显示及网络并行处理等技术的最新发展成果,是一种由计算机技术辅助生成的高技术模拟系统。
VR软件:爱美艺家VR,房总管VR,旅行VR,VR科学馆,百度VR,腾讯炫境VR
VR资源下载
Google VR 技术 官网:点击打开链接(需要翻墙)
android VR 资源下载网址:点击打开链接
android VR API:点击打开链接(需要翻墙)
VR视频步骤
1.搭建VR开发环境,添加资源,修改Gradle,清单文件等
打开android VR 资源下载网址下载下图中的文件
下载好的是一个压缩包,解压压缩包得到下图中的文件
VR视屏需要导入VR资源的common,commonwidget,videowidget包
在Studio中导入,选择File>New>import Project进行导入
打开Studio选择project目录下的app>src>main,在main文件中新建一个Directory包必须命名为assets,将需要播放的视屏放进包中,视屏名全小写
在AndroidManifest.xml清单文件中添加: android :largeHeap= "true"
因为使用 VR 的资源很消耗内存,所以我们为了避免 OOM 的问题, 要把警报权限提高,从 192 提高到 512m
打开build.gradle文件,在最底下添加如下代码
compile 'com.google.android.exoplayer:exoplayer:r1.5.10' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'并修改版本号为19: minSdkVersion 19
如果不修改会报下图中的错误,这个错是说最低版本不能低于16,故要修改版本号,最好修改到19
在Studio中使用快捷键:control+alt+shift+s打开Project Structure按下图步骤关联上面导入的三个包
打开activity_main.xml布局文件,在布局文件中输入<Vr出现以下控件就说明关联成功了
<com.google.vr.sdk.widgets.video.VrVideoView android:layout_width="wrap_content" android:layout_height="wrap_content"> </com.google.vr.sdk.widgets.video.VrVideoView>
到这里环境配置就完成了
2.完成项目XML布局
<?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:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.cxy.vrvideo.MainActivity"><com.google.vr.sdk.widgets.video.VrVideoView android:id="@+id/vr_video" android:layout_width="match_parent" android:layout_height="250dp"></com.google.vr.sdk.widgets.video.VrVideoView><android.support.v7.widget.AppCompatSeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content"/><TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp"/></LinearLayout>3.自定义AsyncTask,读取显示VR视频
package com.example.cxy.vrvideo;import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.SeekBar; import android.widget.TextView;import com.google.vr.sdk.widgets.video.VrVideoView;import java.io.IOException;public class MainActivity extends AppCompatActivity {private VrVideoView vr_video;private SeekBar seek_bar;private TextView tv_progress;private VideoLoadTask mVideoLoadTask;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//进行空间的初始化 vr_video = (VrVideoView) findViewById(R.id.vr_video);seek_bar = (SeekBar) findViewById(R.id.seekbar);tv_progress = (TextView) findViewById(R.id.textview);// mVideoLoadTask = new VideoLoadTask();mVideoLoadTask.execute("video.mp4");}//由于VR资源数据量很大,获取需要时间,故把加载视屏放到子线程中进行,主线程来显示,可以使用异步任务AsyncTask或EventBus技术完成 //自定义一个类继承AsyncTask,只使用我们需要的方法,完成在子线程加载图片资源,在主线程显示 private class VideoLoadTask extends AsyncTask<String, Void, Void> {//该方法在子线程运行,从本地文件中把资源加载到内存中 @Override protected Void doInBackground(String... strings) {//创建VrVideoView.Options对象,决定VR是普通效果,还是立体效果 VrVideoView.Options options = new VrVideoView.Options();//立体模式 options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;//处理加载的视屏格式 //FORMAT_DEFAULT:默认格式(sdcard或assets) //FORMAT_HLS:流媒体数据模式(直播) options.inputFormat = VrVideoView.Options.FORMAT_DEFAULT;try {//重点 //提示:(视频加载的方法还做了把视频读取到内存中的操作,所以它会有一个矛盾, // 调用该方法是在主线程还是在子线程(一般我们放在子线程去调用该方法)) //使用VR控件对象,从资产目录加载数据,显示效果 // 参数1.String对象 2.VrVideoView.Options对象,决定显示的效果 vr_video.loadVideoFromAsset(strings[0], options);} catch (IOException e) {e.printStackTrace();}return null;}}//因为VR很占用内存,所以当界面进入OnPause状态,暂停VR视图显示,进入OnResum状态,继续VR视图显示进入OnDestroy状态杀死Vr //当失去焦点时,回调 @Override protected void onPause() {super.onPause();//暂停渲染和显示 vr_video.pauseRendering();}//当获取焦点时,回调 @Override protected void onResume() {super.onResume();//继续渲染和显示 vr_video.resumeRendering();}//当Activity毁掉时,回调 @Override protected void onDestroy() {super.onDestroy();//关闭渲染和显示,回调 vr_video.shutdown();//在退出Activity时,如果异步任务没有取消,则取消 if (mVideoLoadTask != null) {if (!mVideoLoadTask.isCancelled()) {mVideoLoadTask.cancel(true);}}} }到这里VR视屏显示就完成了,如有疑问请留言!