H5页面创建直播相关需求,此处为vue3的相关代码。vue2的只需要修改对应的生命周期和去除ts相关代码即可
创建文件liveSdkInit.ts
初始化直播sdk,后续才能获取直播,聊天等信息
第一步:创建直播初始化代码
import { getLiveAuthToken } from'@/api/live-managemant'// tokn值interfaceAuthToken {accessToken: stringrefreshToken: stringaccessTokenExpiredTime: number}export default async function liveWebInit() {const userInfo = localStorage.getItem('userInfo') && JSON.parse(localStorage.getItem('userInfo') as any)const { RoomEngine } = window.RoomPaasSdk// 获取RoomEngine实例const roomEngineInstance = RoomEngine.getInstance()// 获取设备号deviceId,唯一标识当前设备// 在web端,不同的tab页代表不同设备const deviceId = roomEngineInstance.getDeviceId()const authData = authTokenCallback()await authData.then((res) => {const config = {appKey:appKey, // 创建应用时分配的appKeyappID:appID, // 创建应用时分配的appIddeviceId, // 设备号authTokenCallback: () =>authCallback(res) // 获取登录token的回调函数,需要返回Promise}// 传入配置console.log(config, 'config=====liveWebInit---初始化直播SDK')roomEngineInstance.init(config)// ${userInfo.uid}'_web' web端授权uid标识roomEngineInstance.auth({ uid:`${userInfo.uid}'_web'` })}).catch(() => {return})}// 获取tokenfunction authTokenCallback() {const { RoomEngine, EventNameEnum } = window.RoomPaasSdk// 获取RoomEngine实例const roomEngineInstance = RoomEngine.getInstance()const deviceId = roomEngineInstance.getDeviceId()return getLiveAuthToken({deviceId:deviceId}).then((res) => {constdata = res.dataif (data.code === 0) {// 需要保证数据结构符合AuthToken,其定义在下面const authToken: AuthToken = data.data// 这里需要根据客户服务端返回的数据结构来决定返回什么属性returnauthToken}})}// token回调function authCallback(data: any) {return newPromise((resolve) => {resolve(data)})}
第二步:在进入直播前进行sdk初始化
可以在beforeEach中做拦截处理,如果sdk已经初始化过,就不需要重新初始化:config中有直播初始化
// 直播SDK授权
const { RoomEngine, EventNameEnum } = window.RoomPaasSdk// 获取RoomEngine实例const roomEngineInstance = RoomEngine.getInstance()if (to.fullPath === '/live-management/live-control' && !roomEngineInstance.config) {await liveWebInit()}
第三步:在直播相关页面创建相关业务处理,创建直播房间后才可以进行弹幕,视频等操作,具体操作可以参考阿里web sdk具体说明
// 初始化直播const initLiveSdk = () => {// 按需解构赋值const { RoomEngine } = window.RoomPaasSdk// 获取RoomEngine实例const roomEngineInstance = RoomEngine.getInstance()console.log(roomEngineInstance, 'initLiveSdk===初始化直播')if (!initData.info.roomId) {return}// liveInitNum:防止重复挂载事件,重复挂载会造成弹幕重复问题if (initData.liveInitNum > 0) {return}// 创建直播房间通道const roomChannel = roomEngineInstance.getRoomChannel(initData.info.roomId || '')initData.roomChannel = roomChannelconst nick = '直播小助手'initData.liveInitNum++// 进入直播房间roomChannel.enterRoom(nick).then((res: any) => {console.log(res, 'enterRoom===直播间信息')// 弹幕组件setTimeout(() => {chatInfo()}, 100)// // 直播组件// liveInfo()}).catch(() => {initData.liveInitNum = 0})}// 弹幕组件const chatInfo = () => {const roomChannel = initData.roomChannel// 按需解构赋值const { EventNameEnum } = window.RoomPaasSdk// 获取Chat插件实例const chatServiceInstance = roomChannel.getPluginService('chat')// 绑定Chat事件,PaaSChatReciveComment函数,监听用户弹幕消息chatServiceInstance.on(EventNameEnum.PaaSChatReciveComment, PaaSChatReciveComment)// 绑定Chat事件,PaaSChatMuteUser函数,监听禁言某一个用户chatServiceInstance.on(EventNameEnum.PaaSChatMuteUser, PaaSChatMuteUser)// 绑定Chat事件,PaaSChatMuteAll函数,监听全体禁言chatServiceInstance.on(EventNameEnum.PaaSChatMuteAll, PaaSChatMuteAll)// PaaSRoomKickUser,监听将用户踢出直播间roomChannel.on(EventNameEnum.PaaSRoomKickUser, PaaSRoomKickUser)// 获取房间弹幕getLiveList()}
注意点:
1.刷新页面或者热更新会导致web sdk异常,需要再次初始化。所以需要在进入相关页面前做好初始化相关流程
2.在切换界面要销毁相关的功能,例如销毁直播间,视频组件和监听事件。
直播间不能重复创建,每次离开都需要销毁,防止出现异常情况
onBeforeUnmount(() => {if (!initData.info.liveId) {return}const roomChannel = initData.roomChannel// 按需解构赋值const { EventNameEnum } = window.RoomPaasSdk// 获取Chat插件实例const chatServiceInstance = roomChannel.getPluginService('chat')chatServiceInstance.remove(EventNameEnum.PaaSChatReciveComment)// 获取Live插件实例const liveServiceInstance = roomChannel.getPluginService('live')// 销毁播放器liveServiceInstance.stopPlay()// 离开直播间roomChannel && roomChannel.leaveRoom()})
3.在退出登录时需要登出web sdk。防止数据异常
const { RoomEngine, EventNameEnum } = window.RoomPaasSdk// 获取RoomEngine实例const roomEngineInstance = RoomEngine.getInstance()// 退出直播roomEngineInstance.logout()
参考文档:后台直播间sdk接入文档:https://help.aliyun.com/document_detail/314284.html
