产品概述

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播放器相关推荐

  1. SDK开发mp3播放器

    一.概述 mp3播放器软件设计需要硬件平台,硬件仿真器件,软件平台,软件开发底台SDK等等,做起来很麻烦. 先考虑在windows上用SDK开发MP3播放器,源代码开发完成后再向硬件平台转移,可以方便 ...

  2. GOOGLE VR SDK开发VR游戏,VR播放器之一

    最近一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.其实VR,AR技术很早就有了,一直没有流行开来,不可否认价格是影响技术推广的最大壁垒.谷歌对VR最大的贡献是提供了廉价的谷歌眼镜,按照GOOG ...

  3. GOOGLE VR SDK开发VR游戏,VR播放器之中的一个

    近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...

  4. GOOGLE VR SDK开发VR游戏,VR播放器之二

    之前简单说了CardBoardView的使用,这里写CardboardView.StereoRenderer的,使用上十分简单,和编写glsurface的Renderer一样导出有关的接口,使用OPG ...

  5. three.js通过CubeTexture加载环境贴图,和RGBELoader加载器加载hdr环境贴图

    一.使用CubeTexture进行环境贴图 1.CubeTexture使用介绍 Three.js中可以通过使用CubeTexture进行环境贴图,CubeTexture需要将6张图片(正面.反面.上下 ...

  6. 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc

    android音乐播放器课程设计报告 android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓 ...

  7. 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )

    文章目录 I . FFMPEG 播放视频流程 II . OpenSLES 播放音频流程 III . OpenSLES 播放参考 Google 官方示例 IV . OpenSL ES 播放代码 ( 详细 ...

  8. Android多媒体学习五:调用Android自带的播放器播放Audio

    Android有其自带的播放器,我们可以使用隐式Intent来调用它:通过传入一个Action为ACTION_VIEW同时,指定Data为所要播放的Audio的Uri对象,并指定格式信息,则我们就可以 ...

  9. Xamarin.Android开发音乐播放器

    最近.Net开源着实让C#火了一把,好久就听说Mono for Android一直没静下心来看,上周末找来看看,确实不错,前台界面axml编写跟Java安卓开发毫无区别,后台用C#其实很多window ...

最新文章

  1. 2022-2028年中国粘胶纤维市场投资分析及前景预测报告
  2. Fragment-FragmentMannager中的方法
  3. python的数字转汉字金额的不完善代码
  4. python编写一个软件-使用python制作一个解压缩软件
  5. python叫什么-什么叫Python运算符重载
  6. 深入理解计算机操作系统:链接
  7. Customing 维护中TR弹出逻辑
  8. OpenCV3学习(11.7) BRISK特征检测器及BRISK描述符
  9. Given two binary trees, write a function to check if they areequal or not.
  10. mysql密码登陆过程_mysql单实例忘记密码如何登陆过程
  11. PHP 图片处理类 错误处理方法:
  12. 《笨方法学习python》学习笔记
  13. cmos和ttl_TTL与CMOS详细介绍
  14. 怎么做网站,网站制作步骤有哪些?
  15. 如何在企业微信网页授权链接中加入自定义参数
  16. IPv6动态地址DNS解析
  17. 基于皮尔逊相关系数的电影智能推荐系统
  18. 学大伟业(杭州分校)数学联赛 GA3-1 国奥专题班
  19. 设置360浏览器的背景色为绿豆色或护眼色
  20. 网站性能优化解决方案

热门文章

  1. BUUCTF 能看得懂音符吗
  2. 一边没辞职另一边入职_我从事业单位辞职,再重新考事业单位的经历~
  3. xpath 第一个元素_贝程学院:Selenium与XPath
  4. LAMP架构概述+搭建论坛平台
  5. 自然语言处理--词向量使用基于 Annoy 的高级索引(近似最近邻)来查找最近邻词项
  6. 顶尖专家戳穿媒体谎言:5G宣传大部分是假的!
  7. 2020.11.27哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)
  8. can信号中的dlc_电子游戏中的DLC是什么?
  9. 长沙学院2022暑假训练赛(一)六级阅读
  10. Windows用于控制 TCP 确认 (ACK)行为的注册表项 -TcpAckFrequency