运行环境
支持w3c标准且支持webGL 3D渲染引擎的浏览器,如微信、微博、qq等app等部分主流app
引用
<script src="./build/mxreality.js"></script>
1、初始化 环境(必须)
var container=document.getElementById('example')
var renderer = new THREE.WebGLRenderer();
container.appendChild(renderer.domElement);
cameraParam={"fov":90,"aspect":container.innerWidth / container.innerHeight,"near": 0.001,"far": 1000},般不填即可,默认{}
var cameraPosition={"x": 0,"y": 0,"z": 0},一般不填即可,默认{}
var options={“width”:500,”height”:300},一般不填即可,默认{}
var scene = new THREE.Scene();
2、绑定到播放器(必须)
var vr=new VR(scene,renderer,container,cameraParam,cameraPosition,options);
/****************播放器初始化设置START,必须在调用vr.init()方法前(可选) **************/
// 进度条是否置于toolBar工具栏的顶部,默认在底部
vr.toolBarConfig.progressBar.top=true/false;
// 显示/隐藏更多按钮,默认false
vr.toolBarConfig.showMoreBtn=true/false;
// 播放初始化参数设置playCfg,如果play方法的第三个参数options设置了,则设置项会覆盖前面playCfg的设置。这两种方法不同点在于vr.playCfg 设置的是全局的,而options设置的只针对当前play调用有效。
vr.playCfg = {
poster: '',
autoFullScreen: false,
marks: [],
muted: false,
zIndex: 1,
playList: [],
autoplay: false,
shape: 'sphere',
marksType: ''
};
// 启用关闭陀螺仪(注意,需要在https下才会生效)
vr.useGyroscope = true/false;
加载进度
vr.loadProgressManager.onLoad = function () {
}
// 加载中
vr.loadProgressManager.onProgress = function () {
console.log("onProgress")
}
// 加载失败
vr.loadProgressManager.onError = function () {
console.log("onError")
}
/**************************播放器初始化设置END****************/
3、启动渲染器(必须)
vr.init(function(){
// 当前渲染器requestAnimationFrame同步回调,用于自定义渲染更新
})
4、开始播放,以下两个方法等价,随意使用一个即可(必须)
vr.playPanorama('视频或直播流地址',vrType);或
vr.play('视频或直播流地址',vrType);
播放类型vrType不填则为全景图模式,例如: vr.play('/examples/puydesancy.jpg');此功能可以用作视频poster,用户点击播放之后调用vr.play()方法播放对应的类型即可
播放类型如下:
vr.resType = {
"plugin": "plugin", // 插件模式
"video": "video", // 网络视频地址播放
"box": "box", // 全景图天空盒子
"fixedImage": "fixedImage", // 全景图-带修复模式
"videoSlice": "videoSlice", // 全景hls直播
"normal2d": "normal2d", // 普通视频模式播放,【进取B支持】
"normal2dSlice": "normal2dSlice", // 普通视频模式直播流 【进取B支持】
"normal2dImage": "normal2dImage", // 普通图片显示 【进取B支持】
"flvVideo": "flvVide", // flv全景直播模式
"flv2dVideo": "flv2dVideo", // 普通视频模式 flv直播流 【进取B支持】
"cinema": "cinema", // 影院模式 【进取B支持】
"flvCinema": "flvCinema", //影院模式flv直播 【进取B支持】
"hlsCinema": "hlsCinema",//影院模式hls直播 【进取B支持】
}
获取方法:例如直播hls,则resType为vr.resType.videoSlice或直接字符串 “videoSlice”
6、播放器控制(可选)
6.1、自动旋转
设置播放器镜头自动旋转
vr.controls.autoRotate=true
6.2、设置自动旋转速度为1.0
vr.controls.autoRotateSpeed=1.0
6.3、开启设置拖动惯性:默认关闭
vr.controls.enableDamping=true;
6.4、设置惯性动量,数值越大惯性越大(默认0.05)
vr.controls.dampingFactor=0.05;
6.5、设置拖动旋转速度,数值越大拖动灵敏度越大,默认0.25
vr.controls.rotateSpeed=0.25
6.6、回正初始视角
vr.controls.reset();
6.7、陀螺仪(注意)开启点击陀螺仪并同意授权后才会生效
关闭陀螺仪
vr.controls.gyroFreeze()
开启陀螺仪
vr.controls.gyroUnfreeze()
6.8播放事件回调:
vr.video对象为播放器视频对象,支持原始所有video方法和事件
下面是几个常用video事件回调使用例子
video.onloadstart = function () {
};
// 当音频/视频的加载已放弃时触发。
video.onabort = function () {
};
// 当浏览器可以开始播放音频/视频时触发。
video.oncanplay = function () {
};
// 当浏览器可在不因缓冲而停顿的情况下进行播放时触发
video.oncanplaythrough = function () {
};
// 当音频/视频的时长已更改时触发。
video.ondurationchange = function () {
};
// 当目前的播放列表已结束时触发。
video.onended = function () {
};
// 当在音频/视频加载期间发生错误时触发。
video.onerror = function () {
};
// 当浏览器已加载音频/视频的当前帧时触发。
video.onloadeddata = function () {
};
// 当浏览器已加载音频/视频的元数据时触发。
video.onloadedmetadata = function () {
};
// 当音频/视频已暂停时触发。
video.onpause = function () {
};
// 当音频/视频已开始或不再暂停时触发。 video.onplay = function () {
};
// 当音频/视频在因缓冲而暂停或停止后已就绪时触发。 video.onplaying = function () {
};
// 当浏览器正在下载音频/视频时触发。
video.onprogress = function () {
};
// 当音频/视频的播放速度已更改时触发。
video.onratechange = function () {
};
// 当用户已移动/跳跃到音频/视频中的新位置时触发。
video.onseeked = function () {
};
// 当用户开始移动/跳跃到音频/视频中的新位置时触发。
video.onseeking = function () {
};
// 当浏览器尝试获取媒体数据,但数据不可用时触发。
video.onstalled = function () {
};
// 当浏览器刻意不获取媒体数据时触发。
video.onsuspend = function () {
};
// 当目前的播放位置已更改时触发。
video.ontimeupdate = function () {
};
// 当音量已更改时触发。
video.onvolumechange = function () {
};
// 当视频由于需要缓冲下一帧而停止时触发。
video.onwaiting = function () {
};
6.9、开启/退出全屏
AVR.fullscreen(vr.container,true/false);
6.10、是否全屏
AVR.isFullscreen(container)
6.11、设置加载中loading动图
AVR.playerLoading.innerHTML="
";
显示加载中:
AVR.loading.show();
隐藏加载中:
AVR.loading.hide();
6.12、销毁播放器对象
vr.destroy();
7、toolBar(可选)
7.1、vr.toolBar 对象包含了所有的工具栏按钮对象,可使用console.log(vr.toolBar)打印查看对象,找到相应的dom对象可进行删除、更改、隐藏等等一系列dom操作 vr.toolBar按钮事件处理
例如:重新绑定VR按钮自定义按钮事件,使用getEvent方法获取原来的事件方法
// getEvent(name事件名称, null, group所属的对象组),事件名称和group可以在AVR.eventList中找到,第二个参数是回调方法,如果没有找到就会返回该方法,查询操作不需要设置该参数
AVR.getEvent('_toolbar_vrBtnClick',null,'init');
vr.toolBar.vrBtn.removeEventListener('click', _toolbar_vrBtnClick);
vr.toolBar.vrBtn.onclick = function () {
alert(‘自定义事件处理代码’)
};
7.2、HD分辨率处理
//AVR.HD.liList = { "流畅": 'http://www.baidu.com/1.hls', "标清": 'http://www.baidu.com/2.hls', "高清": 'iii', "无损": 'ddd' };//默认 { "流畅": 0.3, "标清": 0.6, "高清": 0.8, "无损": 1 }。 当值为数字的时候会去设置渲染器renderer.setEncoderOptions(val),如果value不是数字,则会自动将video的src调整为value,并reload视频,前提时不能设置VR.HD.selectFunc用户自定义回调方法 //AVR.HD.selectFunc = function (val) { alert(val); };// 默认为null AVR.HD.selectFunc回调方法,当用户点击hd选项后会携带选项的value执行selectFunc方法回调,开发人员自行处理逻辑.
7.3、播放器图标
播放器所有内置的图标都在AVR.playerIcon对象内,使用SVG代码存储,如果需要自定义,例如更换播放按钮图标可使用AVR.playerIcon.playSvg=”svg code”方式。
8、标记点(可选) [进取版B支持]
8.1、有两种初始化标记点的方式,第一种通过配置初始化
//vr.playCfg.marks = marks;
//vr.playCfg.marksType = 'editMarkIcon';
第二种在调用播放方法的时候设置到options参数内
var options = { 'marks': marks, 'marksType': 'editMarkIcon' };
vr.playPanorama('/examples/puydesancy.jpg', '', options);
marksType设置为'editMarkIcon'时用户可以拖动编辑标记点位置,适合用于后台管理设置管理标记点位置。当位置设置好之后可以通过AVR.AVR.getMarks()获取标记点的json数据用于保存。前端拿到json数据使用上面的步骤,marksType设置为空即可展示
8.2、后期手动添加
AVR.markEditor(id, title, icon_url, click_callback);
8.3、删除标记点
// 只删除指定id的标记点
AVR.marksRemove(id);
// 全部删除
AVR.marksRemove();
9、兼容问题
8.1、处理部分iphone版本无法播放问题
if (navigator.userAgent.match(/iphone os 14_0/i) || navigator.userAgent.match(/iphone os 14_1/i) || navigator.userAgent.match(/iphone os 14_3/i)) {
AVR.__fixHlsRender = true; // 启用问题版本兼容模式
}
Android 系统的不同的浏览器支持hls.js 会存在差异导致黑屏,可以检测一下是否支持,不支持的可以尝试使用如下配置
if (!Hls.isSupported() && vr.video.canPlayType('application/vnd.apple.mpegurl')) {
vr.liveSettings.forceUseXmpegUrl=true;
}
if (!Hls.isSupported() && vr.video.canPlayType('application/x-mpegURL')) {
vr.liveSettings.that.liveSettings.forceUseVndAppleMpegUrl=true;
}
10、其他一些问题
10.1 自动播放:可以全局设置,如vr.playCfg.muted=true;vr.playCfg.autoplay=true;或者调用play方法是options参数的包含{muted:true,autoplay:true}两个配置项。
10.2 陀螺仪必须使用https,如果需要自动开启就设置vr.controls.gyroUnfreeze()开启陀螺仪。