1.0.67 • Published 2 years ago

live-player-xiaoetest v1.0.67

Weekly downloads
-
License
-
Repository
-
Last release
2 years ago

LivePlayer

H5直播播放器

Setup

cnpm i @xiaoe/live-player --save

API

配置项

属性名说明类型默认值
wrapper用于装载播放器的dom元素String必填项
url用于播放的视频地址,支持m3u8和mp4格式String必填项
poster视频播放前的封面图Stringnull
isShowSpeed全屏时是否展示倍速按钮(type=pull时该选项固定值为false)Booleantrue
isCanDrag是否允许拖拽进度条(限制往当前播放时间点之后拖动,不限制往前拖动)Booleantrue
dragMaxTime允许拖拽的最大播放进度(需配合isCanDrag)Number0
isAutoPlay是否尝试自动播放Booleantrue
isAutoRotate是否允许安卓设备全屏时自动旋转Booleantrue
type播放器模式。可选值为:pull-拉流模式Stringnull
playerStyle播放器风格。可选值为:1-竖屏直播播放器 2-横屏直播播放器Number2
fullScreenMode全屏方式1-假全屏(即宽高100%) 2-系统级全屏Number1
isUseHls安卓设备是否使用HlsBooleanfalse
isFastLive是否快直播Booleanfalse
fastListenerUrl快直播监听断流(快直播不提供断流回调,需额外传普通直播的m3u8)Stringnull

回调函数

函数名说明返回值
onTimeupdate视频播放位置改变时触发currentTime(视频当前播放进度,单位:秒)、 duration(视频总时长,单位:秒)
onPlay视频开始播放时触发-
onPause视频暂停时触发-
onEnded视频播放结束时触发-
onError视频加载错误时触发errorCode 详细说明
onHlsErrorHls错误回调(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-收起箭头)
onGetVideoSrcvideo 标签 src 属性有值后的回调-

实例方法

方法名传参说明返回值
getVideoEle-返回该组件的video元素Video DOM
setFullScreen-播放器外部调用全屏/退出全屏-
destroy-销毁组件-
setAirPlaycallback设置投屏按钮-
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>