视频组件(mzsdk.player)

名称 参数 描述
init [Object] 初始化视频组件
render - 渲染播放器
dispose - 销毁播放器

init方法参数说明

名称 类型 描述
domId String 播放器绑定的domId,最好用div等块级元素。

视频组件的播放相关事件

名称 描述
onReady 播放器控件准备完毕
onPlay 开始播放
onPause 回放时使用,暂停播放事件
onEnd 回放时使用,结束播放事件
onWaiting 播放过程中由于网络或其他原因产生的等待,此时视频播放暂停,等网络恢复后会自动播放
onFirstPlay 第一次播放
onDurationChange 视频总时长发生改变
onFullScreenChange 全屏改变
onLoadedAllData 已加载完毕所有的媒体数据
onLoadedData 已加载完毕当前播放位置的媒体数据,准备播放
onLoadStart 开始请求数据
onLoadedMetaData 获取资源完成
onCanPlayThrough 视频源数据加载完成
onPlaying 视频播放中
onError 视频播放各种错误
onSeeking 视频跳转中
onSeeked 视频跳转结束
onRateChange 播放速率改变
onTimeUpdate 播放时长改变
onVolumeChange 音量改变
onStalled 网速异常
onEnterPictureInPicture 进入画中画
onLeavePictureInPicture 退出画中画
onControlBarChange 控制栏显示状态更改

视频组件的活动相关事件

名称 描述
onOver 主播离开事件
onLiveEnd 直播时使用,直播结束事件
onOnline 上线了一个用户
onOffline 下线了一个用户
onCMD 活动各种cmd事件,包括开始直播,禁言,被踢出,活动各种配置开关等,具体可参考demo

示例

    //创建链接
    mzsdk.connect();

    //初始化播放器
    mzsdk.player.init({
        domId: "mz-video-wrapper",
        // 播放事件
        onReady: function () {
            console.log("播放器控件准备完毕");
        },
        onPlay: function (e) {
            console.log("开始播放", e);
        },
        onPause: function (e) {
            console.log("暂停播放", e);
        },
        onEnd: function (e) {
            console.log("结束播放", e);
        },
        onWaiting: function (e) {
            console.log("播放过程中由于网络或其他原因产生的等待,此时视频播放暂停,等网络恢复后会自动播放", e);
        },
        onFirstPlay: function (e) {
            console.log("第一次播放", e);
        },
        onDurationChange: function (e) {
            console.log("视频总时长发生改变", e);
        },
        onControlBarChange: function (e) {
            console.log("控制栏显示状态更改:", e)
        },
        onFullScreenChange: function (e) {
            if (e.target.player.isFullscreen_ == true) {
                console.log("进入全屏");
            } else {
                console.log("退出全屏,如果需要这里设置自动播放");
                if (document.querySelector("video").paused) {
                    document.querySelector("video").play();
                }
            }
        },
        onLoadedAllData: function (e) {
            console.log("已加载完毕所有的媒体数据", e);
        },
        onLoadedData: function (e) {
            console.log("已加载完毕当前播放位置的媒体数据,准备播放", e);
        },
        onLoadStart: function (e) {
            console.log("开始请求数据", e);
        },
        onLoadedMetaData: function (e) {
            console.log("获取资源完成", e);
        },
        onCanPlayThrough: function (e) {
            console.log("视频源数据加载完成", e);
        },
        onPlaying: function (e) {
            console.log("视频播放中", e);
        },
        onError: function (e) {
            if (e.code == -499) {
                if (_this.state.ticketInfo.status == 0) {
                    console.log("视频加载错误原因为:未开播")
                } else if (_this.state.ticketInfo.status == 3) {
                    console.log("视频加载错误原因为:断流中")
                } else {
                    console.log("视频加载错误原因为:空资源")
                }
            } else {
                console.log("视频异常中断:", e.target.player.error_.message);
                _this.setState({
                    errorContent: '视频异常中断',
                    isShowErrorDisplay: true,
                })
            }
        },
        onSeeking: function (e) {
            console.log("视频跳转中", e);
        },
        onSeeked: function (e) {
            console.log("视频跳转结束", e);
        },
        onRateChange: function (e) {
            console.log("播放速率改变", e);
        },
        onTimeUpdate: function (e) {
            // console.log("播放时长改变", e);
        },
        onVolumeChange: function (e) {
            console.log("音量改变", e);
        },
        onStalled: function (e) {
            console.log("网速异常", e);
        },
        onEnterPictureInPicture: function (e) {
            console.log("进入画中画");
        },
        onLeavePictureInPicture: function (e) {
            console.log("离开画中画, 如果需要这里设置自动播放");
            if (document.querySelector("video").paused) {
                document.querySelector("video").play();
            }
        },

        // 活动事件
        onOver: function () {
            console.log("主播暂时离开");
            _this.setState({
                errorContent: '断流中',
                isShowErrorDisplay: true,
            })
        },
        onLiveEnd: function () {
            console.log("结束直播");
            setTimeout(() => {//1秒后刷新本页面
                location.reload();
            }, 1000);
        },
        onOnline: function (msg) {
            console.log("上线了一个用户:", msg.data);
        },
        onOffline: function (msg) {
            console.log("下线了一个用户:", msg.data);
        },
        onCMD: function (msg) {
            console.log("接收到其他消息:", msg);
            const res = msg;
            switch (res.data.type) {
                case "*channelStart":
                    console.log("*确认:频道有新的直播开始了,判断新开始的直播是否是本直播,可以做一些特殊处理";
                    // if (res.data.ticket_id == ticketId) {

                    // }
                    break;
                case "*publishStart":
                    console.log("*确认:开始直播");
                    localStorage.setItem("ticketId", ticketId)
                    setTimeout(() => {//15秒后刷新本页面
                        location.reload();
                    }, 15000);
                    break;
                case "*disablechat":
                    console.log("*确认:禁言", res.data.user_id)
                    if (res.data.user_id == _this.state.ticketInfo.chat_uid) {
                        Toast.info('您已被禁言', 1.5)
                        _this.setState({
                            isBannedMeTalk: true
                        })
                    }
                    break;
                case "*permitchat":
                    console.log("*确认:解禁", res.data.user_id)
                    if (res.data.user_id == _this.state.ticketInfo.chat_uid) {
                        Toast.info('您已解除禁言', 1.5)
                        _this.setState({
                            isBannedMeTalk: false
                        })
                    }
                    break;
                case "*webinarViewConfigUpdate": //活动配置更改
                    for (const aObject in res.data.webinar_content) {
                        if (res.data.webinar_content.hasOwnProperty(aObject)) {
                            const element = res.data.webinar_content[aObject];
                            switch (element.type) {
                                case "hide_chat_history": //历史记录隐藏的开关
                                    console.log("历史记录隐藏的开关:", element.is_open);
                                    break;
                                case "disable_chat": //全体禁言开关
                                    console.log("全体禁言开关:", element.is_open);
                                    let bannedAll = false;
                                    if (parseInt(element.is_open) == 1) {
                                        bannedAll = true;
                                    }
                                    _this.state.isBannedAll = bannedAll;
                                    break;
                                case "barrage": //弹幕开关
                                    console.log("弹幕开关:", element.is_open);
                                    break;
                                case "record_screen": //防录屏开关
                                    console.log("防录屏开关:", element.is_open);
                                    let isShowRecordScreen = false;
                                    if (parseInt(element.is_open) == 1) {
                                        isShowRecordScreen = true;
                                    }
                                    _this.state.isShowDisableRecordScreen = isShowRecordScreen;
                                    _this.fixDisableScreen();
                                    break;
                                case "vote": //投票开关
                                    console.log("投票开关:", element.is_open);
                                    mzsdk.mzee.emit('marketing-control-config-update', { 'type': 'vote', 'value': element.is_open })
                                    break;
                                case "sign": //签到开关
                                    console.log("签到开关:", element.is_open, '签到关闭是实时的,打开只能重新进入活动');
                                    mzsdk.mzee.emit('marketing-control-config-update', { 'type': 'sign', 'value': 0 })
                                    break;
                                case "documents": //文档开关
                                    console.log("文档开关:", element.is_open);
                                    break;
                                case "prize": //抽奖开关
                                    console.log("抽奖开关:", element.is_open);
                                    break;
                                case "full_screen": //暖场图开关
                                    console.log("暖场图开关:", element.is_open);
                                    break;
                                case "open_like": //点赞视图开关
                                    console.log("点赞视图开关:", element.is_open);
                                    break;
                                case "pay_gift": //礼物视图开关
                                    console.log("礼物视图开关:", element.is_open);
                                    mzsdk.mzee.emit('interaction-control-config-update', { 'type': 'gift', 'value': element.is_open })                                        break;
                                case "times_speed": //倍速视图开关
                                    console.log("倍速视图开关:", element.is_open);
                                    break;
                                default:
                                    console.log("未处理的活动配置开关:", res.data.type);
                                    break;
                            }
                        }
                    }
                break;
                case "*kickout": //收到一条踢出用户的消息
                    console.log("用户 ", res.data.user_id, " 被踢出");
                    if (res.data.user_id == _this.state.ticketInfo.chat_uid) {
                        _this.setState({
                            isShowGetKickoutAlert: true
                        })
                    }
                    break;
                default:
                    console.log("未处理的cmd命令: ", res.data.type);
                    break;
            }
        }
    });
	
    mzsdk.player.render();