1 |
- import store from"../../store/index";import RTC from"../../common/rtc/rtc";import Event from"../../common/chat/eventTypes";import rtcEvent from"../../common/rtc/EVENT";import utils from"../../common/utils/utils";const TAG_NAME="rtc-behaviors",stat={init:"init",waiting:"waiting",success:"success"};module.exports=Behavior({behaviors:[],properties:{teacherNameplateInfo:{type:Object,value:{type:"audio",avatar:"",nickName:"nick",video:!1,audio:!1}},viewerNameplateInfo:{type:Object,value:{type:"audio",avatar:"",nickName:"nick",video:!0,audio:!0}},direction:{type:String,value:"horizontal"}},data:{rtcOptions:{},roomID:"",userID:"test",template:"1v1",localVideo:!0,localAudio:!0,enableEarMonitor:!1,enableAutoFocus:!0,localMirror:"auto",enableAgc:!0,enableAns:!0,frontCamera:"front",audioVolumeType:"auto",resolution:"SD",debugMode:!1,audioQuality:"high",videoWidth:360,videoHeight:640,minBitrate:600,maxBitrate:900,scene:"rtc",encsmall:!1,cloudenv:"PRO",enableBlackStream:0,streamID:"",userDefineRecordID:"",privateMapKey:"",pureAudioMode:"",recvMode:"",enableRecvMessage:!1,tokenParams:{},rtcStatus:stat.init,rtcVisible:!1,rtcMode:!1},lifetimes:{created(){this.chatEvent=this.getChatEvent()},attached(){},ready(){"trtc"===this.data.rtcType&&(this.rtcRoom=this.selectComponent("#plv-rtc-room-component"),this.unsub=store.get({"main.chat":t=>{this.chat=t,t&&t&&this.bindEvent(this.chatEvent)}}))},detached(){"trtc"===this.data.rtcType&&(this.unsub(),this.rtc&&this.rtc.cancelJoinChannel&&this.rtc.cancelJoinChannel(),this.rtc&&this.rtc.destroy&&this.rtc.destroy(),this.setData({rtcVisible:!1}))}},methods:{async initRtcRoom(){const{cid:t}=this.data.videoOption,{options:e}=this.chat,i=this.chat.userId.toString(),a=t.toString();this.rtc=new RTC({roomId:a,userId:i,uid:!1,nick:e.userName,socket:this.chat.socket,pic:utils.prefixUrl(e.pic),type:"T"});const o=await this.rtc.getJoinChannelTokenParams();this.setData({tokenParams:o,rtcOptions:{roomID:a,template:this.data.template,debugMode:this.data.debugMode,localVideo:this.data.localVideo,localAudio:this.data.localAudio,enableEarMonitor:this.data.enableEarMonitor,enableAutoFocus:this.data.enableAutoFocus,localMirror:this.data.localMirror,enableAgc:this.data.enableAgc,enableAns:this.data.enableAns,frontCamera:this.data.frontCamera,audioVolumeType:this.data.audioVolumeType,audioQuality:this.data.audioQuality,videoWidth:this.data.videoWidth,videoHeight:this.data.videoHeight,minBitrate:this.data.minBitrate,maxBitrate:this.data.maxBitrate,encsmall:this.data.encsmall,scene:this.data.scene,cloudenv:this.data.cloudenv,enableBlackStream:this.data.enableBlackStream,streamID:this.data.streamID,userDefineRecordID:this.data.userDefineRecordID,privateMapKey:a,pureAudioMode:this.data.pureAudioMode,recvMode:this.data.recvMode,enableRecvMessage:this.data.enableRecvMessage}}),this.rtc.on("OPEN_MICROPHONE",(t=>{const e={type:t.type,avatar:this.chat.options.pic,nickName:this.chat.options.nick},{rtcOptions:i}=this.data;i.localVideo="audio"!==t.type,this.setData({rtcVisible:!0,viewerNameplateInfo:e,rtcOptions:i}),this.triggerEvent("refreshStatus",{show:!0,type:"apply",txt:"申请连线"})})),this.rtc.on("CLOSE_MICROPHONE",(()=>{this.setData({rtcVisible:!1}),this.hangUp(!1)})),this.rtc.on("CLIENT_BANNED",(()=>{this.setData({rtcStatus:stat.init}),this.hangUp()})),this.rtc.on("INIT_LOCAL_STREAM_READY",(t=>{this.polyvLive&&this.polyvLive.destroy&&this.polyvLive.destroy(),this.checkDeviceAuthorize().then((async e=>{t.init();const i=await this.rtc.getJoinChannelTokenParams();this.setData({tokenParams:i});const{rtcOptions:a}=this.data;this.rtcRoom.enterRoom(a),this.triggerEvent("refreshStatus",{show:!0,txt:"挂断连线",type:"stop"});const{viewerNameplateInfo:o}=this.data;o.video=a.localVideo,o.audio=a.localAudio,this.setData({viewerNameplateInfo:o})})).catch((t=>{}))})),this.rtc.on("PUBLIC_STREAM_SUCCESS",(()=>{})),this.rtc.on("USER_STREAM_ADDED",(()=>{})),this.rtc.on("USER_STREAM_SUBSCRIBED",(()=>{})),this.rtc.on("VOLUME_INDICATOR",(()=>{})),this.rtc.on("SWITCH_MASTER",(t=>{})),this.rtc.on("USER_PEER_LEAVE",(()=>{})),this.rtc.on("LEAVE_CHANNEL_SUCCESS",(()=>{})),this.rtc.on("STOP",(()=>{})),this.rtc.on("O_TEACHER_INFO",(t=>{let e=t.pic;-1===e.indexOf("https")&&(e=-1===e.indexOf("http")?`https:${t.pic}`:t.pic.replace("http","https"));const{teacherNameplateInfo:i}=this.data;i.avatar=e,i.nickName=t.nick,this.setData({teacherNameplateInfo:i})})),this.rtc.on(rtcEvent.LOCAL_MUTE_VIDEO,(()=>{this.rtcRoom.disableVideo()})),this.rtc.on(rtcEvent.LOCAL_UNMUTE_VIDEO,(()=>{this.rtcRoom.enableVideo()})),this.rtc.on(rtcEvent.LOCAL_MUTE_AUDIO,(()=>{this.rtcRoom.disableAudio()})),this.rtc.on(rtcEvent.LOCAL_UNMUTE_AUDIO,(()=>{this.rtcRoom.enableAudio()}))},stopVideo(){const{forceVideo:t}=this.data;t?this.liveVodVideoContext.pause():this.liveVideoContext.stop({success:t=>{},fail:t=>{},complete:()=>{}})},checkDeviceAuthorize:function(){return this.hasOpenDeviceAuthorizeModal=!1,new Promise(((t,e)=>{wx.getSetting&&wx.getSetting()||t(),wx.getSetting().then((i=>{this.authorizeMic=i.authSetting["scope.record"],this.authorizeCamera=i.authSetting["scope.camera"],i.authSetting["scope.camera"]&&i.authSetting["scope.record"]?t():(wx.authorize({scope:"scope.record"}).then((e=>{this.authorizeMic=!0,this.authorizeCamera&&t()})).catch((t=>{this.authorizeMic=!1})),wx.authorize({scope:"scope.camera"}).then((i=>{this.authorizeCamera=!0,this.authorizeMic?t():(this.openConfirm(),e(new Error("authorize fail")))})).catch((t=>{this.authorizeCamera=!1,this.openConfirm(),e(new Error("authorize fail"))})))}))}))},openConfirm:function(){if(!this.hasOpenDeviceAuthorizeModal)return this.hasOpenDeviceAuthorizeModal=!0,wx.showModal({content:"您没有打开麦克风和摄像头的权限,是否去设置打开?",confirmText:"确认",cancelText:"取消",success:t=>{this.hasOpenDeviceAuthorizeModal=!1,t.confirm&&wx.openSetting({success:t=>{}})}})},bindEvent(t){const e=this.chat;e&&Object.keys(t).forEach((i=>{e.on(i,t[i])}))},getChatEvent(){const t=this;return{[Event.MESSAGE](t){},[Event.CONNECT](e){t.initRtcRoom()},[Event.DISCONNECT](t){}}},onRtcRequestConnect(){this.rtc.joinChannel(),this.triggerEvent("refreshStatus",{show:!0,txt:"等待允许",type:"cancel"})},onRtcCancelConnect(){this.rtc.cancelJoinChannel(),this.setData({rtcStatus:stat.init}),this.triggerEvent("refreshStatus",{show:!0,type:"apply",txt:"申请连线"})},hangUp(t=!0){this.rtcRoom&&(this.rtcRoom.hangUp(),this.triggerEvent("refreshStatus",{show:t,type:"apply",txt:"申请连线"}))},onRtcHangUp(){this.rtc.cancelJoinChannel(),this.hangUp()},onPublishStreamSuccess(){setTimeout((()=>{this.stopVideo()}),5e3),this.rtcConnect=!0,this.setData({rtcStatus:stat.success,rtcMode:!0})},onDisconnectRoom(){this.setData({rtcMode:!1,rtcStatus:stat.init}),this.rtc&&this.rtc.destroy&&this.rtc.destroy(),this.rtcConnect&&(wx.showToast({title:"连麦已结束",icon:"none",duration:2e3}),this.rtcConnect=!1),this.init();const{forceVideo:t}=this.data;t&&this.liveVodVideoContext.play()}}});
|