H5页面创建直播相关需求,此处为vue3的相关代码。vue2的只需要修改对应的生命周期和去除ts相关代码即可

    创建文件liveSdkInit.ts
    初始化直播sdk,后续才能获取直播,聊天等信息

    第一步:创建直播初始化代码

    1. import { getLiveAuthToken } from'@/api/live-managemant'
    2. // tokn值
    3. interfaceAuthToken {
    4. accessToken: string
    5. refreshToken: string
    6. accessTokenExpiredTime: number
    7. }
    8. export default async function liveWebInit() {
    9. const userInfo = localStorage.getItem('userInfo') && JSON.parse(localStorage.getItem('userInfo') as any)
    10. const { RoomEngine } = window.RoomPaasSdk
    11. // 获取RoomEngine实例
    12. const roomEngineInstance = RoomEngine.getInstance()
    13. // 获取设备号deviceId,唯一标识当前设备
    14. // 在web端,不同的tab页代表不同设备
    15. const deviceId = roomEngineInstance.getDeviceId()
    16. const authData = authTokenCallback()
    17. await authData
    18. .then((res) => {
    19. const config = {
    20. appKey:appKey, // 创建应用时分配的appKey
    21. appID:appID, // 创建应用时分配的appId
    22. deviceId, // 设备号
    23. authTokenCallback: () =>authCallback(res) // 获取登录token的回调函数,需要返回Promise
    24. }
    25. // 传入配置
    26. console.log(config, 'config=====liveWebInit---初始化直播SDK')
    27. roomEngineInstance.init(config)
    28. // ${userInfo.uid}'_web' web端授权uid标识
    29. roomEngineInstance.auth({ uid:`${userInfo.uid}'_web'` })
    30. })
    31. .catch(() => {
    32. return
    33. })
    34. }
    35. // 获取token
    36. function authTokenCallback() {
    37. const { RoomEngine, EventNameEnum } = window.RoomPaasSdk
    38. // 获取RoomEngine实例
    39. const roomEngineInstance = RoomEngine.getInstance()
    40. const deviceId = roomEngineInstance.getDeviceId()
    41. return getLiveAuthToken({
    42. deviceId:deviceId
    43. }).then((res) => {
    44. constdata = res.data
    45. if (data.code === 0) {
    46. // 需要保证数据结构符合AuthToken,其定义在下面
    47. const authToken: AuthToken = data.data// 这里需要根据客户服务端返回的数据结构来决定返回什么属性
    48. returnauthToken
    49. }
    50. })
    51. }
    52. // token回调
    53. function authCallback(data: any) {
    54. return newPromise((resolve) => {
    55. resolve(data)
    56. })
    57. }

    第二步:在进入直播前进行sdk初始化
    可以在beforeEach中做拦截处理,如果sdk已经初始化过,就不需要重新初始化:config中有直播初始化
    // 直播SDK授权

    1. const { RoomEngine, EventNameEnum } = window.RoomPaasSdk
    2. // 获取RoomEngine实例
    3. const roomEngineInstance = RoomEngine.getInstance()
    4. if (to.fullPath === '/live-management/live-control' && !roomEngineInstance.config) {
    5. await liveWebInit()
    6. }

    第三步:在直播相关页面创建相关业务处理,创建直播房间后才可以进行弹幕,视频等操作,具体操作可以参考阿里web sdk具体说明

    1. // 初始化直播
    2. const initLiveSdk = () => {
    3. // 按需解构赋值
    4. const { RoomEngine } = window.RoomPaasSdk
    5. // 获取RoomEngine实例
    6. const roomEngineInstance = RoomEngine.getInstance()
    7. console.log(roomEngineInstance, 'initLiveSdk===初始化直播')
    8. if (!initData.info.roomId) {
    9. return
    10. }
    11. // liveInitNum:防止重复挂载事件,重复挂载会造成弹幕重复问题
    12. if (initData.liveInitNum > 0) {
    13. return
    14. }
    15. // 创建直播房间通道
    16. const roomChannel = roomEngineInstance.getRoomChannel(initData.info.roomId || '')
    17. initData.roomChannel = roomChannel
    18. const nick = '直播小助手'
    19. initData.liveInitNum++
    20. // 进入直播房间
    21. roomChannel.enterRoom(nick).then((res: any) => {
    22. console.log(res, 'enterRoom===直播间信息')
    23. // 弹幕组件
    24. setTimeout(() => {
    25. chatInfo()
    26. }, 100)
    27. // // 直播组件
    28. // liveInfo()
    29. })
    30. .catch(() => {
    31. initData.liveInitNum = 0
    32. })
    33. }
    34. // 弹幕组件
    35. const chatInfo = () => {
    36. const roomChannel = initData.roomChannel
    37. // 按需解构赋值
    38. const { EventNameEnum } = window.RoomPaasSdk
    39. // 获取Chat插件实例
    40. const chatServiceInstance = roomChannel.getPluginService('chat')
    41. // 绑定Chat事件,PaaSChatReciveComment函数,监听用户弹幕消息
    42. chatServiceInstance.on(EventNameEnum.PaaSChatReciveComment, PaaSChatReciveComment)
    43. // 绑定Chat事件,PaaSChatMuteUser函数,监听禁言某一个用户
    44. chatServiceInstance.on(EventNameEnum.PaaSChatMuteUser, PaaSChatMuteUser)
    45. // 绑定Chat事件,PaaSChatMuteAll函数,监听全体禁言
    46. chatServiceInstance.on(EventNameEnum.PaaSChatMuteAll, PaaSChatMuteAll)
    47. // PaaSRoomKickUser,监听将用户踢出直播间
    48. roomChannel.on(EventNameEnum.PaaSRoomKickUser, PaaSRoomKickUser)
    49. // 获取房间弹幕
    50. getLiveList()
    51. }

    注意点:
    1.刷新页面或者热更新会导致web sdk异常,需要再次初始化。所以需要在进入相关页面前做好初始化相关流程
    2.在切换界面要销毁相关的功能,例如销毁直播间,视频组件和监听事件。
    直播间不能重复创建,每次离开都需要销毁,防止出现异常情况

    1. onBeforeUnmount(() => {
    2. if (!initData.info.liveId) {
    3. return
    4. }
    5. const roomChannel = initData.roomChannel
    6. // 按需解构赋值
    7. const { EventNameEnum } = window.RoomPaasSdk
    8. // 获取Chat插件实例
    9. const chatServiceInstance = roomChannel.getPluginService('chat')
    10. chatServiceInstance.remove(EventNameEnum.PaaSChatReciveComment)
    11. // 获取Live插件实例
    12. const liveServiceInstance = roomChannel.getPluginService('live')
    13. // 销毁播放器
    14. liveServiceInstance.stopPlay()
    15. // 离开直播间
    16. roomChannel && roomChannel.leaveRoom()
    17. })

    3.在退出登录时需要登出web sdk。防止数据异常

    1. const { RoomEngine, EventNameEnum } = window.RoomPaasSdk
    2. // 获取RoomEngine实例
    3. const roomEngineInstance = RoomEngine.getInstance()
    4. // 退出直播
    5. roomEngineInstance.logout()

    参考文档:后台直播间sdk接入文档:https://help.aliyun.com/document_detail/314284.html