文档章节

Android使用得图SDK开发VR播放器

feng_blog
 feng_blog
发布于 2016/05/23 14:32
字数 1371
阅读 1069
收藏 1

产品概述

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中)。

sdk包下载

demo下载

AndroidManifest配置

增加权限

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

配置最低可运行版本

  <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="21"   />

在manifest根节点配置OpenGL版本: <uses-feature android:glEsVersion="0x00020000" android:required="true"/>

为了达到最好的播放效果建议开启硬件加速:在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 = 

"<DetuVr>

    <settings init=\"pano1\" initmode=\"default\"  "+"enablevr=\"false\" title=\"\" />      <scenes>

        <scene name=\"pano1\" title=\"\"  "+ "thumburl=\"\">

        <preview url=\"%s\" type=\"CUBESTRIP\"></preview>

        <image type=\"%s\" "+ "url=\"%s\" degree=\"%d\" device=\"%d\"/>

        </scene>

    </scenes>

</DetuVr>";

初始化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();

        }

    }

 

        更多内容请关注个人微信公众帐号:极客峰        

© 著作权归作者所有

共有 人打赏支持
feng_blog

feng_blog

粉丝 120
博文 131
码字总数 105492
作品 3
朝阳
iOS工程师
私信 提问
一个安卓版的房产中介APP

【业务需求】 一、功能需求 1、按省市区街道发布房源,房源可分为二手房、租房和商铺/写字楼,并带联系方式和传图文(房源展示顺序按时间先后排列) 2、房源可以显示地图定位 3、注册用户可以...

tzy0710
2016/04/19
4
0
【AR】在Unity中开始使用Vuforia(1)

原 目录 在Unity中开始使用Vuforia Vuforia在统一 关于Vuforia 安装Vuforia 创建一个新的Unity项目 Vuforia游戏对象 在您的项目中激活Vuforia 访问Unity中的Vuforia功能 将目标添加到您的场景...

lichong951
06/11
0
0
Android SDK Document 框架导读的翻译和注解[3]

《Android SDK Document 框架导读的翻译和注解》系列的文章将对Android应用程序的架构做一个基本的介绍,本文源于Android SDK ducument的第一个部分,描绘了Android 应用程序系统的骨架,因此...

晨曦之光
2012/03/07
166
0
Android SDK Document 框架导读的翻译和注解[3]

《Android SDK Document 框架导读的翻译和注解》系列的文章将对Android应用程序的架构做一个基本的介绍,本文源于Android SDK ducument的第一个部分,描绘了Android 应用程序系统的骨架,因此...

晨曦之光
2012/03/09
51
0
请问大家android开源播放器,都是用的哪个哦?

最近,在做android视频播放器,系统自带的VideoView 感觉不好用,想找个开源的视频播放器,请问下,大家都用哪个哦? 1,开源全能播放器Vitamio,这个有人使用吗?好像对个人免费,对公司收费...

天王盖地虎626
2017/06/16
461
4

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
22
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
17
0
my.ini

1

architect刘源源
今天
15
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
15
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部