文档章节

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

feng_blog
 feng_blog
发布于 2016/05/23 14:32
字数 1371
阅读 1033
收藏 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

粉丝 118
博文 131
码字总数 105492
作品 3
朝阳
iOS工程师
【AR】在Unity中开始使用Vuforia(1)

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

lichong951
06/11
0
0
《视频直播技术详解》系列之一:视频采集和处理

直播中的各个环节: 1.采集 采集是播放环节中的第一环,iOS 系统因为软硬件种类不多,硬件适配性较好,所以比较简单。Android 则不同,市面上硬件机型非常多,难以做到一个库适配所有硬件。P...

ljianbing
06/26
0
0
Android源码50例汇总,欢迎各位下载

下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载。 源码实例如下: 《Android应用开发揭秘》源代码推荐 http://down.51cto.com/data...

程序袁_绪龙
2015/01/23
0
0
Android应用内实现视频播放--腾讯浏览服务(TBS)

TBS视频播放 TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式。同时支持硬件解码,使得内存占用...

ChaoYoung
07/30
0
0
Android开发工具Android Studio、Android SDK和Genymotion完全配置

所谓“工欲善其事,必先利其器”。Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试...

游走于代码之间
08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信小程序开发系列六:微信框架API的调用

微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发...

JerryWang_SAP
34分钟前
2
0
5 个用 Python 编写 web 爬虫的方法

大家在读爬虫系列的帖子时常常问我怎样写出不阻塞的爬虫,这很难,但可行。通过实现一些小策略可以让你的网页爬虫活得更久。那么今天我就将和大家讨论这方面的话题。 我刚整理了一套2018最新...

糖宝lsh
35分钟前
6
0
docker安装redis、mongodb、mysql等

一、启动docker服务,设置镜像: systemctl start dockervi /etc/docker/daemon.json{ "registry-mirrors": ["https://registry.docker-cn.com"]} 二、下拉镜像: 在镜像中心h...

狼王黄师傅
今天
5
0
deepin系统使用deepin-wine安装exe程序

deepin自带原生deepin-wine使用命令如下: deepin-wine QQBrowser.exedeepin-wine QQMusicSetup.exe 默认安装的快捷方式位置: /root/.wine/drive_c/'Program Files'/Tencent/QQBrowser/......

临江仙卜算子
今天
4
0
快速get到学习Linux操作系统的点

快速get到学习Linux操作系统的点 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件...

linuxCool
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部