live-player-xiaoetest
v1.0.67
Published
Xiaoe H5 Live Player
Readme
LivePlayer
H5直播播放器
Setup
cnpm i @xiaoe/live-player --saveAPI
配置项
|属性名|说明|类型|默认值
|-|-|-|-
|wrapper|用于装载播放器的dom元素|String|必填项
|url|用于播放的视频地址,支持m3u8和mp4格式|String|必填项
|poster|视频播放前的封面图|String|null
|isShowSpeed|全屏时是否展示倍速按钮(type=pull时该选项固定值为false)|Boolean|true
|isCanDrag|是否允许拖拽进度条(限制往当前播放时间点之后拖动,不限制往前拖动)|Boolean|true
|dragMaxTime|允许拖拽的最大播放进度(需配合isCanDrag)|Number|0
|isAutoPlay|是否尝试自动播放|Boolean|true
|isAutoRotate|是否允许安卓设备全屏时自动旋转|Boolean|true
|type|播放器模式。可选值为:pull-拉流模式|String|null
|playerStyle|播放器风格。可选值为:1-竖屏直播播放器 2-横屏直播播放器|Number|2
|fullScreenMode|全屏方式1-假全屏(即宽高100%) 2-系统级全屏|Number|1
|isUseHls|安卓设备是否使用Hls|Boolean|false
|isFastLive|是否快直播|Boolean|false
|fastListenerUrl|快直播监听断流(快直播不提供断流回调,需额外传普通直播的m3u8)|String|null
回调函数
|函数名|说明|返回值
|-|-|-
|onTimeupdate|视频播放位置改变时触发|currentTime(视频当前播放进度,单位:秒)、 duration(视频总时长,单位:秒)
|onPlay|视频开始播放时触发|-
|onPause|视频暂停时触发|-
|onEnded|视频播放结束时触发|-
|onError|视频加载错误时触发|errorCode 详细说明
|onHlsError|Hls错误回调(Hls.Events.ERROR)|errorType
|onFastStatus|快直播状态回调|播放信息(Object)
|onChangeSpeed|视频播放倍速改变时触发|视频当前播放倍速
|onOpenSpeed|打开/关闭倍速设置弹窗时触发|此时是否打开倍速设置弹窗(Boolean)
|onOpenClear|打开/关闭清晰度设置弹窗时触发|此时是否打开清晰度设置弹窗(Boolean)
|onBeforeClear|点击切换清晰度时立刻触发|此时清晰度对应的index和name(Object)
|onClearChange|清晰度切换成功触发|此时清晰度对应的index和name(Object)
|onFullScreen|视频全屏/退出全屏时触发|此时是否处于全屏状态(Boolean)
|onScreenDirection|屏幕方向改变时触发|屏幕方向(1-竖屏, 2-横屏)
|onRatioOrientation|第一次点击播放时触发|视频分辨率方向(1-竖向, 2-横向)
|onNowPull|拉流/断流时触发|此时是否处于拉流状态(Boolean)
|onMoveSlider|视频进度条拖动时触发|视频当前播放进度(单位:秒)
|onStopSlider|视频进度条拖动停止后触发|视频当前播放进度(单位:秒)
|onRestrictDrag|视频进度拖拽被禁止时触发|拖拽类型(1-滑动, 2-点击)、当前允许最大拖拽到的秒数
|onBtnsClick|视频非全屏时点击了底部按钮触发|点击按钮类型(speed-倍速, clear-清晰度, share-分享, arrow-收起箭头)
|onGetVideoSrc|video 标签 src 属性有值后的回调|-
实例方法
|方法名|传参|说明|返回值
|-|-|-|-
|getVideoEle|-|返回该组件的video元素|Video DOM
|setFullScreen|-|播放器外部调用全屏/退出全屏|-
|destroy|-|销毁组件|-
|setAirPlay|callback|设置投屏按钮|-
|changeClearHandle|清晰度选项的index(Number)|外部业务调用播放器内清晰度切换|-
|changeSpeedHandle|要设置的倍速|外部业务调用播放器内倍速切换|-
Example
注意:务必要在引用该组件页面的 destroyed 或 beforeDestroy 钩子中,调用该组件的 destroy 方法
import { CustomVideo } from '@xiaoe/live-player';
// 根据配置项中,你设置的播放器风格(playerStyle),引入不同的样式
import '@xiaoe/live-player/dist/css/index_normal.css'; // 普通播放器
// import '@xiaoe/live-player/dist/css/index.css'; // 竖屏直播播放器<template>
<div class="container">
<div id="videoWrapper"></div>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
myVideo: '',
}
},
mounted() {
this.initVideo();
},
destroyed() {
this.myVideo.destroy();
},
methods: {
initVideo() {
this.myVideo = new LivePlayer({
wrapper: '#videoWrapper',
poster: 'http://xxxxx.png',
url: 'http://xxxx.mp4',
isCanDrag: true,
isShowSpeed: true,
playerStyle: 2,
type: null,
onTimeupdate: (currentTime, duration) => {
console.log('=====>timeupdate', currentTime, duration);
},
onPlay: () => {
console.log('=====>play');
},
onPause: () => {
console.log('=====>pause');
},
onEnded: () => {
console.log('=====>ended');
},
onFastStatus: res => {
console.log('=====> 快直播回调', res);
/* res可能的值:
* { code: 0 }
* { code: -1, msg: 'pullStream error'} // 拉流失败
* { code: -2, msg: 'xxxx' } // 当前环境不兼容
*/
},
onError: errorCode => {
console.log(`=====>errorCode = ${errorCode}`);
},
onHlsError: errorType => {
console.log(`=====>Hls errorType = ${errorType}`);
},
onChangeSpeed: speed => {
console.log(`=====>Set speed: ${speed}`);
},
onOpenSpeed: type => {
console.log(`=====>${type ? '打开' : '关闭'}倍速弹窗`);
},
onOpenClear: type => {
console.log(`=====>${type ? '打开' : '关闭'}清晰度设置弹窗`);
},
onFullScreen: isFull => {
console.log(`=====>${isFull ? '打开' : '关闭'}全屏`);
},
onScreenDirection: type => {
console.log(`=====>当前为${type === 1 ? '竖' : '横'}屏`);
},
onRatioOrientation: type => {
console.log(`=====>当前视频分辨率为${type === 1 ? '竖' : '横'}向`);
},
onNowPull: isPull => {
console.log(`=====>此时处于${isPull ? '拉流': '断流'}状态`);
},
onMoveSlider: time => {
console.log(`=====>拖动进度条,视频当前进度:${time}`);
},
onStopSlider: time => {
console.log(`=====>进度条拖动完毕,视频当前进度:${time}`);
},
onRestrictDrag: (type, currentMaxTime) => { // isCanDrag 为 false 时,此回调才会生效
console.log(`=====>${type === 1 ? '滑动' : '点击'}进度条被限制!当前允许最大拖拽到第${currentMaxTime}秒`);
}
});
console.log(this.myVideo.getVideoEle()); // 获取 video 元素
// 设置投屏按钮
this.myVideo.setAirPlay(() => {
console.log("=====> 投屏开启成功!");
});
},
}
}
</script>