android vr播放器 躺着,Android使用得图SDK开发VR播放器
产品概述
Android SDK包含全景图片、VR视频、漫游主题等多种展示方式,支持小行星模式、陀螺仪、VR双屏沉浸式观看。文件下载、解码都在播放器中完成,您只需一个链接地址或是一条配置即可展现炫酷的全景效果。
注: 该SDK支持不低于4.0.0的Android版本(api14)。
下载并集成SDK
下载SDK最新版
下载最新版panoplay_android_jar SDK,解压SDK压缩包,将panoplay_android_jar文件夹中的'libs'和'res/raw'文件夹复制到你的项目工程根目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中)。
AndroidManifest配置
增加权限
配置最低可运行版本
android:minSdkVersion="14"
android:targetSdkVersion="21" />
在manifest根节点配置OpenGL版本:
为了达到最好的播放效果建议开启硬件加速:在Application节点中声明android:hardwareAccelerated="true"
初始化配置
由于本播放器使用universal-image-loader类库来管理图片,因此首先要在Application中初始化ImageLoader,若在您的项目中已使用到了该类库,只需保证 DisplayImageOptions 中bitmapConfig为Bitmap.Config.ARGB_8888类型,imageScaleType为ImageScaleType.NONE,并且开启了内存和磁盘缓存。 没有配置过的可以按以下方式配置:
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.imageScaleType(ImageScaleType.NONE)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(this)
.defaultDisplayImageOptions(defaultOptions)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.FIFO)
.build();
ImageLoader.getInstance().init(config);
播放器引入
布局文件引用
播放器需要借助com.player.renderer.PanoPlayerSurfaceView(继承自android.opengl.GLSurfaceView)类来播放全景图片和视频,您可以根据需要自定义他的宽高和位置,还可以再继承自 PanoPlayerSurfaceView 根据需求自定义点击事件和滑动事件。
函数调用
创建播放渲染器:
播放器需要借助 com.player.panoplayer.PanoPlayer(PanoPlayerSurfaceView view, Context context)来控制OpenGL渲染。 首先获取布局文件播放器:
PanoPlayerSurfaceView ppsview;
创建渲染器并和播放器绑定:
PanoPlayer renderer=new PanoPlayer(ppsview, this);
ppsvVideo.setRenderer(renderer);
创建播放文件链接:
创建播放链接类PanoPlayerUrl加载文件 PanoPlayerUrl panoplayerurl = new PanoPlayerUrl();
加载视频或图像
加载视频或图像有三种方法:
1) 通过网络地址直接加载
加载视频方法: panoplayerurl.SetVideoUrlImage("视频地址","");
加载六面图方法: panoplayerurl.SetCubeUrlImage("六面图地址","六面图的预览图") 其中六面图的地址输入格式为:http://fwpano813.img.detuyun.cn/143461522655827dbad040a/oper/59gv8ty1gte1p9l2_html_%s.jpg 后面以%s结尾; 访问时可把%s换成f(/u/b/l/r/d);
加载2:1全景图方法: panoplayerurl.SetSphereUrlImage("2:1图的地址","");
2) 通过加载Xml文件: panoplayerurl. setXmlUrl("xml文件")
3) 通过构造xml加载:如构造一个鱼眼视频的xml
String T =
"
";
初始化XML配置
String xmlstring = String.format(T,"","video", "需要加载的地址", 240,1);
//[type=video,degree =240(鱼眼度数),device=1(鱼眼设备类型)]
加载xml
panoplayerurl.setXmlContent(xmlstring);
开始播放
renderer.Play(panoplayerurl);
注: 可使用的文件路径规则:
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables
播放回调函数调用
播放图片回调:
在播放图片时可通过IPanoPlayerListener接口绑定播放事件:
renderer.setListener(IPanoPlayerListener listener);
播放视频回调:
在播放视频时需同时绑定IPanoPlayerListener和IPanoPlayerVideoPluginListener接口才可获取到完整的播放事件:
renderer.setListener(IPanoPlayerListener listener);
renderer.setVideoPluginListener(IPanoPlayerVideoPluginListener listener);
播放回调说明:
回调接口
包含回调
回调说明
IPanoPlayerListener
void PanoPlayOnLoading()
播放器数据正在加载中
void PanoPlayOnLoaded()
播放器数据加载完成
void PanoPlayOnEnter(PanoramaData var1)
播放器场景加载完成
void PanoPlayOnLeave(PanoramaData var1);
播放器场景已移除
void PanoPlayOnError(PanoPlayerErrorCode var1)
播放出错
IPanoPlayerVideoPluginListener
void PluginVideoOnInit()
播放器数据初始化完成
void PluginVideoOnStatusChanged(PanoVideoPluginStatus status)
播放状态变化
void PluginVideoOnProgressChanged(int curTime, int bufTime, int maxTime)
播放进度变化。其中curTime为当前播放的位置;bufTime为缓冲位置;maxTime为视频总长度
void PluginVideoOnSeekFinished()
视频进度拖动完成
void PluginVideOnPlayerError(PanoPlayerErrorStatus var1, String var2)
播放出错
模式切换
在播放图片和视频时还可进行模式切换,有两种方式: 直接切换和渐变切换,您可根据需要选择其中一种。
直接切换:renderer.setViewMode(ViewMode mode);
渐变切换 : prenderer.setAnimationViewMode(ViewMode mode);
模式说明
模式
说明
ViewMode.VIEWMODE_FISHEYE
鱼眼模式
ViewMode.VIEWMODE_LITTLEPLANET
小行星模式
ViewMode.VIEWMODE_DEF
默认模式
ViewMode.VIEWMODE_PLANE
平面模式
ViewMode.VIEWMODE_VR
VR 模式
其他设置
设置陀螺仪开关
可调用renderer.setGyroEnable(boolean enable);来设置播放器是否使用陀螺仪:enable 为true 时,陀螺仪可用;为false 时,陀螺仪不可用。
视频播放进度控制
在视频播放过程中还可进行视频播放控制。在public void PluginVideoOnInit()函数中获取播放器插件控制器:
@Override
public void PluginVideoOnInit() {
Plugin plugin = renderer.getCurPlugin();
if (plugin instanceof VideoPlugin) {
videoplugin = (VideoPlugin) plugin;
//设置播放器日志级别
//videoplugin.setLogLevel(IjkMediaPlayer.IJK_LOG_VERBOSE);
}
}
从某一时刻开始播放:
videoplugin.seekTo(int progress);
获取播放缓冲百分比:
int buffr = videoplugin.getreadBufferingPercent();
暂停播放:
videoplugin.pause();
开始播放:
videoplugin.start();
重新播放:
videoplugin.replayer();
注意事项
为了更好的管理播放器资源引用,您需在您的onDestroy() 方法手动销毁播放器,释放播放资源。
@Override
protected void onDestroy() {
super.onDestroy();
if (renderer != null) {
renderer.release();
}
}
更多内容请关注个人微信公众帐号:极客峰
android vr播放器 躺着,Android使用得图SDK开发VR播放器相关推荐
- SDK开发mp3播放器
一.概述 mp3播放器软件设计需要硬件平台,硬件仿真器件,软件平台,软件开发底台SDK等等,做起来很麻烦. 先考虑在windows上用SDK开发MP3播放器,源代码开发完成后再向硬件平台转移,可以方便 ...
- GOOGLE VR SDK开发VR游戏,VR播放器之一
最近一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.其实VR,AR技术很早就有了,一直没有流行开来,不可否认价格是影响技术推广的最大壁垒.谷歌对VR最大的贡献是提供了廉价的谷歌眼镜,按照GOOG ...
- GOOGLE VR SDK开发VR游戏,VR播放器之中的一个
近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...
- GOOGLE VR SDK开发VR游戏,VR播放器之二
之前简单说了CardBoardView的使用,这里写CardboardView.StereoRenderer的,使用上十分简单,和编写glsurface的Renderer一样导出有关的接口,使用OPG ...
- three.js通过CubeTexture加载环境贴图,和RGBELoader加载器加载hdr环境贴图
一.使用CubeTexture进行环境贴图 1.CubeTexture使用介绍 Three.js中可以通过使用CubeTexture进行环境贴图,CubeTexture需要将6张图片(正面.反面.上下 ...
- 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc
android音乐播放器课程设计报告 android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓 ...
- 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )
文章目录 I . FFMPEG 播放视频流程 II . OpenSLES 播放音频流程 III . OpenSLES 播放参考 Google 官方示例 IV . OpenSL ES 播放代码 ( 详细 ...
- Android多媒体学习五:调用Android自带的播放器播放Audio
Android有其自带的播放器,我们可以使用隐式Intent来调用它:通过传入一个Action为ACTION_VIEW同时,指定Data为所要播放的Audio的Uri对象,并指定格式信息,则我们就可以 ...
- Xamarin.Android开发音乐播放器
最近.Net开源着实让C#火了一把,好久就听说Mono for Android一直没静下心来看,上周末找来看看,确实不错,前台界面axml编写跟Java安卓开发毫无区别,后台用C#其实很多window ...
最新文章
- 2022-2028年中国粘胶纤维市场投资分析及前景预测报告
- Fragment-FragmentMannager中的方法
- python的数字转汉字金额的不完善代码
- python编写一个软件-使用python制作一个解压缩软件
- python叫什么-什么叫Python运算符重载
- 深入理解计算机操作系统:链接
- Customing 维护中TR弹出逻辑
- OpenCV3学习(11.7) BRISK特征检测器及BRISK描述符
- Given two binary trees, write a function to check if they areequal or not.
- mysql密码登陆过程_mysql单实例忘记密码如何登陆过程
- PHP 图片处理类 错误处理方法:
- 《笨方法学习python》学习笔记
- cmos和ttl_TTL与CMOS详细介绍
- 怎么做网站,网站制作步骤有哪些?
- 如何在企业微信网页授权链接中加入自定义参数
- IPv6动态地址DNS解析
- 基于皮尔逊相关系数的电影智能推荐系统
- 学大伟业(杭州分校)数学联赛 GA3-1 国奥专题班
- 设置360浏览器的背景色为绿豆色或护眼色
- 网站性能优化解决方案
热门文章
- BUUCTF 能看得懂音符吗
- 一边没辞职另一边入职_我从事业单位辞职,再重新考事业单位的经历~
- xpath 第一个元素_贝程学院:Selenium与XPath
- LAMP架构概述+搭建论坛平台
- 自然语言处理--词向量使用基于 Annoy 的高级索引(近似最近邻)来查找最近邻词项
- 顶尖专家戳穿媒体谎言:5G宣传大部分是假的!
- 2020.11.27哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)
- can信号中的dlc_电子游戏中的DLC是什么?
- 长沙学院2022暑假训练赛(一)六级阅读
- Windows用于控制 TCP 确认 (ACK)行为的注册表项 -TcpAckFrequency