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

三.界面布局文件

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">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Android开发VR360度全景视频" />

android:id="@+id/vr_video_view"

android:layout_width="match_parent"

android:layout_height="250dp">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

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" />

android:id="@+id/seek_bar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="0dp"

android:layout_height="32dp"

android:layout_weight="8" />

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" />

四.加载360°全景视频

/**

* 加载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()");

}

/**

* 点击VR视频回调

*/

@Override

public void onClick() {

super.onClick();

Log.d(TAG, "onClick()");

}

/**

* 加载VR视频失败回调

* @param errorMessage

*/

@Override

public void onLoadError(String errorMessage) {

super.onLoadError(errorMessage);

Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);

}

/**

* 加载VR视频成功回调

*/

@Override

public void onLoadSuccess() {

super.onLoadSuccess();

/**加载成功后设置回调**/

seek_bar.setMax((int) vr_video_view.getDuration());

Log.d(TAG, "onNewFrame()");

}

/**

* 显示模式改变回调

* 1.默认

* 2.全屏模式

* 3.VR观看模式,即横屏分屏模式

* @param newDisplayMode 模式

*/

@Override

public void onDisplayModeChanged(int newDisplayMode) {

super.onDisplayModeChanged(newDisplayMode);

Log.d(TAG, "onLoadError()->newDisplayMode=" + newDisplayMode);

}

});

try {

/**加载VR视频**/

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() {

/**

* 进度条拖动改变监听

* @param seekBar 拖动条

* @param progress 进度

* @param fromUser 是否是用户手动操作的

*/

@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) {

}

});

}

/**

* 设置声音开关

*

* @param isMuted 开关

*/

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

}

/**

* 设置播放暂停

*

* @param isPlay 播放暂停

*/

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 360度视频播放器,Android开发VR实战之播放360度全景视频相关推荐

  1. Android多媒体之视频播放器高级开发

    1.获取播放的数据源 播放视频的数据源一般有两个,一个是请求网络,从服务器后台直接获取播放的视频信息,另一种是播放手机中本地的视频,这里我们采用的播放源为播放手机本地的视频 1.1 查询获取手机中的视 ...

  2. android 仿微信 视频播放器,Android仿微信多媒体选择器 - SmartMediaPicker

    2019.5.27 更新 版本已更新至[1.1.1]详情参考GitHub. 多媒体选择器 SmartMediaPicker 好久没写简书了,这次带来的是自己封装的一个多媒体选择器.这是一款方便好用的仿 ...

  3. 【Android开发VR实战】二.播放360°全景视频

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发 ...

  4. 【Android开发VR实战】一.给用户呈现一个360°全景图片

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53905681 本文出自[DylanAndroid的博客] [Android开发 ...

  5. 【Android开发VR实战】三.开发一个寻宝类VR游戏TreasureHunt

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53939303 本文出自[DylanAndroid的博客] [Android开发 ...

  6. 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码

    本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551/article/details/60802145 我们在开发安卓Android流媒体音视频播放 ...

  7. 视频教程-FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器-Android

    FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发 ...

  8. android系统更新视频播放器,基于的Android系统地视频播放器.doc

    本科毕业设计(论文) 基于Android系统的视频播放器Through the implementation of video player based on Android platform 致 谢 ...

  9. 简易网络视频播放器android

    简易网络视频播放器android demo: Qvod 1.新建: app\src\main\res\xml\network_security_config.xml 作用是可以发送 http请求 &l ...

  10. android 实现视频播放功能,Android项目实现视频播放器

    本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...

最新文章

  1. Windows Server 2003文件夹不能共享的解决办法【转】
  2. PostCSS理解与运用
  3. AutoCAD .NET API二次开发学习指南
  4. 一台电脑安装多个Redis服务
  5. 在FreeBSD上彻底禁用sendmail
  6. mie散射理论方程_散射,原子分子散射
  7. Android报错:FAILED:_nl_intern_locale_data: ?? ‘cnt < (sizeof (_nl_value_type_LC_TIME)
  8. 口碑销量双爆的数据分析丛书再添新成员!
  9. 汉化风暴 python_手机端强大的汉化风暴工具 可汉化软件
  10. 计算机软件方面的核心期,计算机方面期刊_计算机方面适合阅读的期刊_计算机八大核心期刊...
  11. OAuth2.0公钥私钥授权技术
  12. 广义速度V与管理理论——流水线、TPS…
  13. poi操作word模板替换数据并且导出word
  14. 读《Machine Learning Done Wrong》(机器学习易犯错误)有感
  15. Microsoft Teams管理(一)
  16. 互联网科普贴-阿里巴巴国际站是什么
  17. 华为电脑怎么录屏?分享你两个好方法
  18. 【对学习现状的总结和思考】
  19. 1660s功耗多少w_非公版 1660S 首测 :GDDR6 升级 , 能打大哥 1660Ti
  20. 中国医护服装制造行业投资前景与盈利能力分析报告2022版

热门文章

  1. sublime text2配置文件详解(转)
  2. JQuery详解(讲解+举例)--(后端开发适用)
  3. Flutter随记四:null safe之 ??= 和??和 ?使用区别
  4. 在html中如何做SEO优化
  5. python存根文件_python中的函数存根
  6. [创业-18]:财务报表之资产负债表
  7. OpenWrt 防火墙基础过滤--域名过滤
  8. ABSOLUTE评估肿瘤纯度
  9. Backdoor Attack with Imperceptible Input and Latent Modification
  10. python 006 __ 小斌文档 | 特殊字符的使用