import { VideoPlayer, Node, director, Component, isValid } from "cc"; import HttpUnit from "../Common/HttpUnit"; import { SDKManager } from "./SDKManager"; import { SceneBgVideoLayer } from "../../Sub/UI/SceneBgVideoLayer"; import { BgVideo } from "./BgVideo"; import Utils from "../Common/Utils"; import { InnerMsgCode } from "../Config/InnerMsgCode"; import { VideoRoleType } from "../Common/GlobalValue"; export class WebSDK{ //初始化 init(cb: Function = null) { console.log("init webSDK"); cb && cb(); } //检查权限 checkAutoSetting(autoKey:string, cb:Function = null) { cb && cb(true); } //获取用户信息 getUserInfo(cb:Function = null) { let name = HttpUnit.GetNickName(); cb && cb({ nickName:name, avatarUrl:"https://hxzgame.vip.hnhxzkj.com/lzx/XiangQin/webHead.png" }); } //region 登录 login(cb: Function = null) { cb && cb({ platform:2, code: null }); } //显示视频广告 show_video(callback:Function, tag:number) { callback && callback({ code: 0, tag: tag }); SDKManager.video_ad_back(); } //显示插屏 show_splash() { } //显示Banner show_banner(...args) { } //隐藏Banner hide_banner(...args) { } //主动拉起分享 show_share(rewardCB?:Function) { rewardCB && rewardCB(); } //获取设备分辨率 getWindowSize() { return {width:screen.width, height: screen.height}; } //显示游戏圈 show_gameClub(leftRatio, topRatio, widthRatio, heightRatio) { } //隐藏游戏圈 hide_gameClub() { } //检查是否支持base64音频播放 checkSupportBase64Audio() { return true; } //播放base64音频 private _audioInst:HTMLAudioElement = null; playBase64Audio(base64:string, loop:boolean) { let substring = base64; let qianzhui = "data:audio/x-wav;base64," if(base64.startsWith(qianzhui)) { substring = base64.substring(qianzhui.length, base64.length) } // 解码 Base64 字符串为二进制数据 const binaryData = atob(substring); // 创建一个包含二进制数据的 Uint8Array const byteArray = new Uint8Array(binaryData.length); for (let i = 0; i < binaryData.length; i++) { byteArray[i] = binaryData.charCodeAt(i); } // 创建 Blob 对象,指定 MIME 类型为音频格式(例如 mp3) const audioBlob = new Blob([byteArray], { type: 'audio/mp3' }); // 创建音频 URL const audioUrl = URL.createObjectURL(audioBlob); console.log("web 播放base64音频", audioUrl) // 创建音频元素并播放 if (this._audioInst == null) { this._audioInst = new Audio(audioUrl); } else { this._audioInst.src = audioUrl; } this._audioInst.play(); } //客服功能是否支持 kefuSupport() { console.log("web 不支持联系客服") return false; } //进入联系客服 openKefu() { console.log("web 进入联系客服") } //region 播放主背景视频 private zhuVideo1: BgVideo | null = null; private zhuExtra1: any = null; playBgAudio(remoteUrl:string, vtype:VideoRoleType, loop:boolean = false, extra:any = {}) { let bgvideo = SceneBgVideoLayer.handle if (!bgvideo) { return } this.initBgAudio() if (this.zhuVideo1 && this.zhuVideo1.isPlaying) { this.playBgAudioNext(remoteUrl, vtype, loop, extra); return } if (!this.zhuVideo1) { this.zhuVideo1 = bgvideo.getVideoClone(); } this.zhuExtra1 = extra; this.zhuVideo1.vtype = vtype; this.zhuVideo1.cbReady = this.audioReady.bind(this); this.zhuVideo1.cbEnd = this.audioEnded.bind(this); this.zhuVideo1.playVideo(remoteUrl, loop, false); } initBgAudio() { let bgvideo = SceneBgVideoLayer.handle if (!bgvideo) { return } console.log("web 初始化主背景视频") if (!this.zhuVideo1) { this.zhuVideo1 = bgvideo.getVideoClone(); this.zhuVideo1.remoteUrl = "http://hxzgame.vip.hnhxzkj.com/lzx/XiangQin/bginited.mp4" } if (!this.zhuVideo2) { this.zhuVideo2 = bgvideo.getVideoClone(); this.zhuVideo2.remoteUrl = "http://hxzgame.vip.hnhxzkj.com/lzx/XiangQin/bginited.mp4" } if (!this.emoVideo1) { this.emoVideo1 = bgvideo.getVideoClone(); this.emoVideo1.remoteUrl = "http://hxzgame.vip.hnhxzkj.com/lzx/XiangQin/bginited.mp4" } if (!this.emoVideo2) { this.emoVideo2 = bgvideo.getVideoClone(); this.emoVideo2.remoteUrl = "http://hxzgame.vip.hnhxzkj.com/lzx/XiangQin/bginited.mp4" } } audioReady() { this.removeBgAudioNext(); this.zhuVideo1.moveIn(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {compo: this.zhuVideo1, extra: this.zhuExtra1}); } audioEnded() { Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {compo: this.zhuVideo1, extra: this.zhuExtra1}); } removeBgAudio() { if (this.zhuVideo1 && this.zhuVideo1.isPlaying) { this.zhuVideo1.recycleVideo(); } } //主背景临时视频 private zhuVideo2: BgVideo | null = null; private zhuExtra2: any = null; playBgAudioNext(remoteUrl:string, vtype:VideoRoleType, loop:boolean = false, extra:any = {}) { let bgvideo = SceneBgVideoLayer.handle if (!bgvideo) { return } this.removeBgAudioNext(); if (!this.zhuVideo2) { this.zhuVideo2 = bgvideo.getVideoClone(); } this.zhuExtra2 = extra; this.zhuVideo2.vtype = vtype; this.zhuVideo2.cbReady = this.audioNextReady.bind(this); this.zhuVideo2.cbEnd = this.audioNextEnded.bind(this); this.zhuVideo2.playVideo(remoteUrl, loop, false); } audioNextReady() { this.removeBgAudio(); this.zhuVideo2.moveIn(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {compo: this.zhuVideo2, extra: this.zhuExtra2}); } audioNextEnded() { Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {compo: this.zhuVideo2, extra: this.zhuExtra2}); } removeBgAudioNext() { if (this.zhuVideo2 && this.zhuVideo2.isPlaying) { this.zhuVideo2.recycleVideo(); } } //region 播放emo视频 private emoVideo1: BgVideo | null = null; private emoExtra1: any = {} addEmoAudio(remoteUrl:string, vtype:VideoRoleType, loop:boolean = false, extra:any = {}) { let bgvideo = SceneBgVideoLayer.handle if (!bgvideo) { return } if (this.emoVideo1 && this.emoVideo1.isPlaying) { this.playEmoAudioNext(remoteUrl, vtype, loop, extra); return // this.emoVideo1.recycleVideo(); } if (!this.emoVideo1 || !isValid(this.emoVideo1.node)) { this.emoVideo1 = bgvideo.getVideoClone(); } this.emoExtra1 = extra; this.emoVideo1.vtype = vtype; this.emoVideo1.cbReady = this.emoReady.bind(this); this.emoVideo1.cbEnd = this.emoEnded.bind(this); this.emoVideo1.playVideo(remoteUrl, loop, false); } emoReady() { this.removeEmoNextAudio(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {compo: this.emoVideo1, extra: this.emoExtra1}); } emoEnded() { Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {compo: this.emoVideo1, extra: this.emoExtra1}); } removeEmoAudio() { if (this.emoVideo1 && this.emoVideo1.isPlaying) { this.emoVideo1.recycleVideo(); } } // 播放emo临时视频 private emoVideo2: BgVideo | null = null; private emoExtra2: any = {} playEmoAudioNext(remoteUrl:string, vtype:VideoRoleType, loop:boolean = false, extra:any = {}) { let bgvideo = SceneBgVideoLayer.handle if (!bgvideo) { return } this.removeEmoNextAudio(); if (!this.emoVideo2) { this.emoVideo2 = bgvideo.getVideoClone(); } this.emoExtra2 = extra; this.emoVideo2.vtype = vtype; this.emoVideo2.cbReady = this.emoNextReady.bind(this); this.emoVideo2.cbEnd = this.emoNextEnded.bind(this); this.emoVideo2.playVideo(remoteUrl, loop, false); } emoNextReady() { this.removeEmoAudio(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {compo: this.emoVideo2, extra: this.emoExtra2}); } emoNextEnded() { Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {compo: this.emoVideo2, extra: this.emoExtra2}); } removeEmoNextAudio() { if (this.emoVideo2 && this.emoVideo2.isPlaying) { this.emoVideo2.recycleVideo(); } } //region 友盟+ umaInit() { } //友盟统计是否开启 umaSwt() { return false; } //友盟事件统计 umaEvent(eventName: string, value: any = {}) { } }