md360 android,MD360Player4Android 学习的简单使用
最近做 android 项目 需要 全景播放器和相关的 播放器参数 所以遇到的一些 小知识 记录一下
在开始用他之前也找了好多 播放器,pano360 Uotvr 。。。最中还是用了 这个
项目 Git :https://github.com/ashqal/MD360Player4Android
应用方法:https://jitpack.io/#ashqal/MD360Player4Android
以下是最官网的步骤,没有问题,
Using with GLSurfaceView
STEP1 Define GLSurfaceView in the layout xml.
STEP2 Init the MDVRLibrary in the Activity.
publicclassMDVRLibraryDemoActivityextendsActivity{privateMDVRLibrarymVRLibrary;@OverridepublicvoidonCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_md_render);//init VR LibraryinitVRLibrary(); }privatevoidinitVRLibrary(){//new instancemVRLibrary=MDVRLibrary.with(this) .displayMode(MDVRLibrary.DISPLAY_MODE_NORMAL) .interactiveMode(MDVRLibrary.INTERACTIVE_MODE_MOTION) .asVideo(newMDVRLibrary.IOnSurfaceReadyCallback() {@OverridepublicvoidonSurfaceReady(Surfacesurface) {//IjkMediaPlayer or MediaPlayergetPlayer().setSurface(surface); } }) .build(R.id.surface_view); }}
STEP3 Addition call in onResume onPause onDestroy onConfigurationChanged.
publicclassMDVRLibraryDemoActivityextendsMediaPlayerActivity{@OverrideprotectedvoidonResume() {super.onResume(); mVRLibrary.onResume(this); }@OverrideprotectedvoidonPause() {super.onPause(); mVRLibrary.onPause(this); }@OverrideprotectedvoidonDestroy() {super.onDestroy(); mVRLibrary.onDestroy(); }@OverridepublicvoidonConfigurationChanged(ConfigurationnewConfig) {super.onConfigurationChanged(newConfig); mVRLibrary.onOrientationChanged(this); }}
一下是我个人的代码
1 Step Layout
2 Step
package com.app.yispace.app.myapplication;
import android.content.Context;
import android.content.res.Configuration;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnMediaTimeDiscontinuityListener;
import android.media.MediaTimestamp;
import android.opengl.EGLDisplay;
import android.opengl.GLSurfaceView;
import android.os.Handler;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Surface;
import com.asha.vrlib.MD360Director;
import com.asha.vrlib.MD360DirectorFactory;
import com.asha.vrlib.MDVRLibrary;
import com.asha.vrlib.model.BarrelDistortionConfig;
import com.asha.vrlib.model.MDFlingConfig;
import com.asha.vrlib.model.MDPosition;
import com.asha.vrlib.model.MDQuaternion;
import com.asha.vrlib.objects.MDAbsObject3D;
import com.asha.vrlib.strategy.projection.AbsProjectionStrategy;
import com.asha.vrlib.strategy.projection.IMDProjectionFactory;
//import com.player.panoplayer.OptionType;
//import com.player.panoplayer.OptionValue;
//import com.player.panoplayer.PanoPlayer;
//import com.player.panoplayer.PanoPlayerUrl;
//import com.player.renderer.PanoPlayerSurfaceView;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.microedition.khronos.egl.EGL10;
public class MainActivityextends AppCompatActivity {
private MDVRLibrarymVRLibrary;
Handlerhandler =new Handler();
private GLSurfaceViewsurfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surface_view);
initVRLibrary();
}
private void initVRLibrary() {
// 这个是 圆筒形开关开,我们球面投影不需要设置
BarrelDistortionConfig barrelDistortionConfig =new BarrelDistortionConfig();
barrelDistortionConfig.setDefaultEnabled(false);
// 这里的 setParamA B C 应该是透镜的三次 边缘即便参数
// // barrelDistortionConfig.setParamA();
mVRLibrary = MDVRLibrary.with(this)
.displayMode(MDVRLibrary.DISPLAY_MODE_NORMAL)//这里是 单双屏幕设置
.interactiveMode(MDVRLibrary.INTERACTIVE_MODE_MOTION_WITH_TOUCH)//设置你的活动方式
// 触碰和陀螺仪 但是用 陀螺仪时 必须用 下面 mVRLibrary.onOrientationChanged(this);
.motionDelay(100)//陀螺仪的延迟
.projectionMode(MDVRLibrary.PROJECTION_MODE_SPHERE)//这里是 设置投影模式,都是 DISPLAY_MODE_***
.directorFilter(new MDVRLibrary.IDirectorFilter() {// 这个是用作设置渲染时候 位置的控制及限定
@Override
public float onFilterPitch(float v) {//维度的限定
if (v >=85)
return 85;
else if (v <= -85)
return -85;
else
return v;
}
@Override
public float onFilterYaw(float v) {// 精度的限定
return v;
}
@Override
public float onFilterRoll(float v) {//这里是 Z轴 的限定
if (v <=45 && v >= -45)
return 0;
else if (v >45 && v <=135)
return 90;
else if (v >= -153 && v < -45)
return -90;
else {
return 180;
}
}
})
.pinchEnabled(false)//放缩的支持
.flingEnabled(true)//甩动的支持,但是感觉没有什么效果,他话有个,他话有个 flingCongfig 进行进一步配置
.barrelDistortionConfig(barrelDistortionConfig)//上面说了
.asVideo(new MDVRLibrary.IOnSurfaceReadyCallback() {// as** 是处理的文件展示类型
@Override
public void onSurfaceReady(Surface surface) {
getPlayer().setSurface(surface);
}
})
.build(surfaceView);//这个是设置 surface Android 的工程师应该都知道他
mVRLibrary.onOrientationChanged(this);
// 同时这还有一些小的设置可以动过 mVRLibrary 来设置 又提示
}
// 这里是加载 视频源的
MediaPlayer getPlayer() {
MediaPlayer mediaPlayer =new MediaPlayer();
try {
mediaPlayer.setDataSource("http://192.168.1.171:8071/UploadFiles/960p/1080.mp4");
mediaPlayer.prepare();
mediaPlayer.start();
handler.postDelayed(runnable,40);
}catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer;
}
Runnablerunnable =new Runnable() {
@Override
public void run() {
Log.d("ssss","getPitch" +mVRLibrary.getDirectorBrief().getPitch() +" getYaw" +mVRLibrary
.getDirectorBrief().getYaw() +" getRoll" +mVRLibrary.getDirectorBrief().getRoll());
handler.postDelayed(this,1000);
}
};
@Override
protected void onResume() {
super.onResume();
mVRLibrary.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
mVRLibrary.onPause(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mVRLibrary.onDestroy();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mVRLibrary.onOrientationChanged(this);
}
}
这里也都给大家说了他的配置和过去方法,看一下LOG j就明白了都是什么了 哈哈哈
OK 感觉这个作者很多好久 NB 考虑的很全面,可能还是有一些 不足,但是有一个能写出来那?哈哈哈
md360 android,MD360Player4Android 学习的简单使用相关推荐
- Android Studio学习记录之简单的页面切换及宫格菜单
Android Studio学习记录之简单的页面切换及宫格菜单 之前上课听老师讲的一些东西自己其实并没有消化,今天把不懂的都去网上搜了一下,有了一种恍然大悟的感觉,包括很多方方面面的东西.有些东西听说 ...
- Android学习——实现简单的电话拨号
Android学习--实现简单的电话拨号 新建工程 1.编辑界面 2.编辑MainActivity 3.编辑权限 新建工程 1.编辑界面 设置为线性布局.输入框提示(输入类型为数字).添加图片按钮 & ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition
Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...
- android service 学习(上)
转载自:http://www.cnblogs.com/allin/archive/2010/05/15/1736458.html Service是android 系统中的一种组件,它跟Activity ...
- android service 学习(下)
android service 学习(下) 通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service.在android ...
- Android:学习AIDL,这一篇文章就够了(下)
前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...
- Android Binder 学习笔记
前言: Binder是Android给我们提供的一种跨进程通信方式.理解Binder能帮助我们更好的理解Android的系统设计,比如说四大组件,AMS,WMS等系统服务的底层通信机制就都是基于Bin ...
- Android画图学习总结(四)——Animation(中)
在Android画图学习总结(四)--Animation(上)中详细介绍了Tween Animation的定义.使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方 ...
最新文章
- 电商网站前台与后台系统架构
- ps怎么更改背景图层大小_PS软件零基础抠图教程,教你PS滤镜抠图技巧和方法
- uvalive5796(图论、桥、并查集)
- 数学教师计算机能力提升,数学教师信息技术应用能力提升培训总结.doc
- boost::system::system_error相关的测试程序
- 提高编程能力的7条建议
- 查找字符位置_如何使用find函数和search函数精确查找字符
- C# 数组、ArrayList、List、Dictionary的用法与区别
- 2013应届毕业生“人人网”校招应聘总结
- Unity3D中脚本的执行顺序和编译顺序
- Springboot2.X项目中添加druid连接池监控
- 基于Uniapp实现的Android的校园二手商品交易平台App源码
- IT出路:跳出TCO,着眼TVO(总体拥有价值)
- vuedraggable拖拽插件使用
- 深入解析车牌识别相机在互联网+加油站中的应用方案
- 使用Android studio开发一个数独游戏APP 系列第一讲
- 读书笔记: 如何把一件事做到最好
- python是一种跨平台开源解释型的_Python是一种跨平台、开源、免费的动态编程语言。...
- office 2013下载
- ProteinCell综述|解析宿主基因组和微生物的复杂互作(王军组作品,万字全文翻译)...
热门文章
- 恶意软件利用Windows故障诊断平台传播
- python爬去segementfault上的博客文章
- 使用pymongo需要手动关闭MongoDB Connection吗?
- 黑马程序员_io流详解
- MATLAB 绕轴旋转图像函数 rotate 详解
- debian 安装_如何在 Debian/Ubuntu 系统中检查程序包是否安装?
- jdbc代码_凯哥带你从零学大数据系列之数据库篇---第三章:JDBC基础
- c语言入门敲打,C语言基础三(敲打键盘、寻找资料,循环语句)
- python实现排列组合公式算法_Python实现卡尔曼滤波算法之贝叶斯滤波
- HTML示例07---图像与超链接