@bddh/starling-realtime-client
Version:
2 lines (1 loc) • 9.94 kB
JavaScript
import{createClass as _createClass,classCallCheck as _classCallCheck,defineProperty as _defineProperty}from"./_virtual/_rollupPluginBabelHelpers.js";import BrtcInstance from"@bddh/starling-brtc";import{TimeoutController}from"@bddh/starling-timeout-controller";import CustomJSON from"@bddh/starling-json";import isEmpty from"lodash/isEmpty";import isFunction from"lodash/isFunction";import{statusEnum,errorTypeEnum}from"./interface.js";var BrtcClient=function(){function BrtcClient(props){var _this=this;_classCallCheck(this,BrtcClient),_defineProperty(this,"client",void 0),_defineProperty(this,"isRtcVideoOn",!1),_defineProperty(this,"rtcConnection",void 0),_defineProperty(this,"rtcConfig",void 0),_defineProperty(this,"bizConfig",void 0),_defineProperty(this,"rtcCallback",void 0),_defineProperty(this,"restarting",!1),_defineProperty(this,"timeoutEvent",void 0),_defineProperty(this,"timeoutStarted",!1),_defineProperty(this,"reopenTimer",void 0),_defineProperty(this,"restartCount",0),_defineProperty(this,"closeLog",!0),_defineProperty(this,"stopped",!1),_defineProperty(this,"haveVideoOn",!1),_defineProperty(this,"rtcStateCallback",null),_defineProperty(this,"startRtcTimeout",(function(){_this.timeoutStarted||(_this.timeoutEvent.start(),_this.timeoutStarted=!0)})),_defineProperty(this,"clearRtcTimeout",(function(){_this.timeoutStarted&&(_this.timeoutEvent.clear(),_this.timeoutStarted=!1)})),_defineProperty(this,"mergeRtcConfig",(function(partial){_this.rtcConfig&&partial&&Object.keys(partial).length&&Object.assign(_this.rtcConfig,partial)})),_defineProperty(this,"openRtc",(function(rtcConnection){if(_this.stopped=!1,_this.restarting)!_this.closeLog&&console.warn("rtc restarting");else if(rtcConnection&&(_this.rtcConnection=rtcConnection),_this.rtcConnection&&!isEmpty(_this.rtcConnection)){var _this$client,_this$rtcConnection=_this.rtcConnection,server=_this$rtcConnection.server,appId=_this$rtcConnection.appId,token=_this$rtcConnection.token,roomName=_this$rtcConnection.roomName,userId=_this$rtcConnection.userId,_ref=_this.rtcCallback||{},_onRemotedata=_ref.onRemotedata,_onLocalStream=_ref.onLocalStream,_onRemoteVideoComing=_ref.onRemoteVideoComing,_onLocalVideoPublished=_ref.onLocalVideoPublished,_onLocalVideoPublishing=_ref.onLocalVideoPublishing,_onRemoteVideoOn=_ref.onRemoteVideoOn,_onRemoteVideoOff=_ref.onRemoteVideoOff,_onRemoteVideoLoading=_ref.onRemoteVideoLoading,_onSuccess=_ref.onSuccess,_onError=_ref.onError,_onLocalVideoConnected=_ref.onLocalVideoConnected,_onRemoteVideoConnected=_ref.onRemoteVideoConnected,_onRemoteMediaState=_ref.onRemoteMediaState,onPlayingError=_ref.onPlayingError,onDigitalHumanCallback=_ref.onDigitalHumanCallback;null===(_this$client=_this.client)||void 0===_this$client||_this$client.destroy(),_this.client=void 0,_this.startRtcTimeout(),_this.rtcStateCallback=function(data){var body=data.body,action=data.action;onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_FULL_STATUS,content:{type:"rtcState",action:action,body:body}})},_this.client=new BrtcInstance({roomName:roomName,token:token,userId:userId,appId:appId,server:server,rtcConfig:_this.rtcConfig,callback:{onRemoteVideoConnected:function(id,connected){var _this$bizConfig;if(!connected&&!_this.haveVideoOn)var connectTimer=setTimeout((function(){_this.restartCount<3?(_this.restartCount=++_this.restartCount,_this.restartRtc&&_this.restartRtc(rtcConnection)):(_this.restartCount=0,_this.closeRtc()),clearTimeout(connectTimer)}),500);if(connected&&!1!==(null===(_this$bizConfig=_this.bizConfig)||void 0===_this$bizConfig?void 0:_this$bizConfig.remoteAutoPlay)){var videoElement=document.getElementById("remotevideo500");if(videoElement){videoElement.muted=!1;var promise=videoElement.play();void 0!==promise&&promise.catch((function(){videoElement.muted=!0,videoElement.play().catch((function(e){!_this.closeLog&&console.info("videoElement play error",e),onPlayingError&&onPlayingError(videoElement),onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_ERROR,content:{type:errorTypeEnum.LOCAL_VIDEO_ERROR}}),_this.rtcStateCallback&&_this.rtcStateCallback({action:"localVideoError",body:!0})})),onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_STATUS,content:{type:errorTypeEnum.LOCAL_VIDEO_MUTED}}),_this.rtcStateCallback&&_this.rtcStateCallback({action:"localVideoMuted",body:!0})}))}else!_this.closeLog&&console.error("videoElement is null!")}!_this.closeLog&&console.info("remoteVideoConnected",id,connected,_this.restartCount),_this.rtcStateCallback&&_this.rtcStateCallback({action:"remoteVideoConnected",body:{id:id,connected:connected,restartCount:_this.restartCount}}),isFunction(_onRemoteVideoConnected)&&_onRemoteVideoConnected(id,connected)},onRemoteVideoOn:function(id){_this.haveVideoOn=!0,!_this.closeLog&&console.info("remotevideoon by id: ",id),_this.clearRtcTimeout();var rtcContainer=document.querySelector("#starlingRtcContainer"),therevideo=rtcContainer&&rtcContainer.lastChild;therevideo&&(therevideo.style.display="none"),_this.rtcStateCallback&&_this.rtcStateCallback({action:"remotevideoon",body:id}),onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_OPEN}),isFunction(_onRemoteVideoOn)&&_onRemoteVideoOn(id)},onRemoteMediaState:function(id,medium,connected){!_this.closeLog&&console.info("remoteMediaState",id,medium,connected),_this.rtcStateCallback&&_this.rtcStateCallback({action:"remoteMediaState",body:{id:id,medium:medium,connected:connected}}),isFunction(_onRemoteMediaState)&&_onRemoteMediaState(id,medium,connected)},onLocalVideoConnected:function(connected){!_this.closeLog&&console.info("localVideoConnected",connected),_this.rtcStateCallback&&_this.rtcStateCallback({action:"localVideoConnected",body:{connected:connected}}),isFunction(_onLocalVideoConnected)&&_onLocalVideoConnected(connected)},onRemotedata:function(data){if(_this.rtcConfig&&_this.rtcConfig.usingdatachannel){var msg=CustomJSON.parse(data);!_this.closeLog&&console.info("RTC - receive:",msg),isFunction(_onRemotedata)&&_onRemotedata(msg)}},onLocalStream:function(stream,name){!_this.closeLog&&console.info("rtc - onlocalstream by name: "+name),_this.rtcStateCallback&&_this.rtcStateCallback({action:"onlocalstream",body:{stream:stream,name:name}}),isFunction(_onLocalStream)&&_onLocalStream(stream,name)},onLocalVideoPublished:function(){!_this.closeLog&&console.info("LocalVideoPublished 本地视频发布成功"),_this.rtcStateCallback&&_this.rtcStateCallback({action:"localvideopublished_ok",body:!0}),isFunction(_onLocalVideoPublished)&&_onLocalVideoPublished()},onLocalVideoPublishing:function(){!_this.closeLog&&console.info("LocalVideoPublishing 本地视频发布成功"),_this.rtcStateCallback&&_this.rtcStateCallback({action:"localvideopublishing",body:!0}),isFunction(_onLocalVideoPublishing)&&_onLocalVideoPublishing()},onRemoteVideoComing:function(id){!_this.closeLog&&console.info("remotevideocoming",id),_this.rtcStateCallback&&_this.rtcStateCallback({action:"remotevideocoming",body:id}),isFunction(_onRemoteVideoComing)&&_onRemoteVideoComing(id)},onRemoteVideoLoading:function(id){!_this.closeLog&&console.info("remotevideoloading by id: ",id),_this.rtcStateCallback&&_this.rtcStateCallback({action:"remotevideoloading",body:id}),isFunction(_onRemoteVideoLoading)&&_onRemoteVideoLoading(id)},onRemoteVideoOff:function(id){if(!_this.stopped){var videoEle=document.getElementById("remotevideo500");videoEle&&videoEle.pause(),!_this.closeLog&&console.info("remotevideooff: ",id),_this.isRtcVideoOn=!1,_this.rtcStateCallback&&_this.rtcStateCallback({action:"remotevideooff",body:id}),onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_CLOSE}),isFunction(_onRemoteVideoOff)&&_onRemoteVideoOff(id),_this.startRtcTimeout()}},onSuccess:function(){!_this.closeLog&&console.info("rtc - success"),_this.rtcStateCallback&&_this.rtcStateCallback({action:"success",body:!0}),isFunction(_onSuccess)&&_onSuccess()},onError:function(e){_this.stopped||(_this.isRtcVideoOn=!1,!_this.closeLog&&console.error("rtc - error:",e),_this.rtcStateCallback&&_this.rtcStateCallback({action:"error",body:e}),onDigitalHumanCallback&&onDigitalHumanCallback({status:statusEnum.DH_LIB_ERROR,content:{type:errorTypeEnum.RTC_ERROR}}),isFunction(_onError)&&_onError(e),(e.includes("Lost connection to the server")||e.includes("Is the server down"))&&_this.restartRtc&&_this.restartRtc(rtcConnection))}}})}})),_defineProperty(this,"closeRtc",(function(){var _this$client2;_this.stopped=!0,_this.clearRtcTimeout(),clearTimeout(_this.reopenTimer),null===(_this$client2=_this.client)||void 0===_this$client2||_this$client2.destroy(),_this.client=void 0,_this.restarting=!1})),_defineProperty(this,"restartRtc",(function(rtcConnection){_this.stopped||!_this.restarting&&_this.bizConfig&&_this.bizConfig.autoReConnect&&(_this.rtcStateCallback&&_this.rtcStateCallback({action:"restartRtc",body:rtcConnection}),_this.restarting=!0,_this.closeRtc(),_this.reopenTimer=setTimeout((function(){!_this.closeLog&&console.error("拉流失败,开始重启"),_this.restarting=!1,_this.openRtc(rtcConnection)}),2e3))}));var _rtcConnection=props.rtcConnection,rtcConfig=props.rtcConfig,_props$closeLog=props.closeLog,closeLog=void 0===_props$closeLog||_props$closeLog,rtcCallback=props.rtcCallback,bizConfig=props.bizConfig;this.rtcConnection=_rtcConnection,this.rtcConfig=rtcConfig,this.rtcCallback=rtcCallback,this.closeLog=closeLog,this.bizConfig=bizConfig,this.timeoutEvent=new TimeoutController(6e4,(function(){if(_this.timeoutStarted=!1,!_this.stopped)return _this.rtcConnection?void(_this.restartRtc&&_this.restartRtc(_this.rtcConnection)):!_this.closeLog&&console.warn("remotevideoon事件超时, rtcConnectionRef is null")}))}return _createClass(BrtcClient,[{key:"muteMicphone",value:function(mute){this.client&&this.client.muteMicphone&&this.client.muteMicphone(mute)}}]),BrtcClient}();export{BrtcClient as default};