差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
im:pc:basics:audiovideo [2020/06/25 02:31]
allenwang 移除
— (当前版本)
行 1: 行 1:
-====== 1对1音视频通话 ====== 
  
------- 
- 
-1v1实时通话允许用户发起、接听、挂断单人的音视频会话,可以在会话过程中进行暂停、恢复,并对会话过程进行监听。 
- 
-1v1实时通话管理模块为EMCallManager,由EMClient模块加载时主动创建,可以使用EMClient模块的getCallManager方法获取,代码如下 
-<​code>​ 
-    var callManager = emclient.getCallManager();​ 
-</​code>​ 
-===== 注册消息回调监听 ===== 
-<​code>​ 
- ​function setCallManagerListener(callManager,​ listener) { 
-  // 收到会话请求 
-  listener.onRecvCallIncoming((callsession) => { 
-  // 在这里可以选择接通或者拒绝会话 
-  }); 
-  // 会话连接上 
-  listener.onRecvCallConnected((callsession) => { 
-  // 会话连接上之后,如果是应答方,需要Answer信息 
-    if(!callsession.getIsCaller()) 
-      callManager.sendAnswer(callsession.getCallId());​ 
-  }); 
-  // 会话已接通 
-  listener.onRecvCallAccepted((callsession) => {}); 
-  // 会话挂断,reason为挂断原因,0挂掉,1无响应,2拒绝,3忙碌,4失败,5不支持,6离线 
-  listener.onRecvCallEnded((callsession,​reason,​error) => {}); 
-  // 网络状态变化,​toStatus状态:0连接,1不稳定,2断开 
-  listener.onRecvCallNetworkStatusChanged((callsession,​toStatus) => {}); 
-  // 对方会话状态变化,type值:0音频暂停,1音频恢复,2视频暂停,3视频恢复 
-  listener.onRecvCallStateChanged((callsession,​type) => {}); 
-} 
-var managerlistener = new easemob.EMCallManagerListener();​ 
-setCallManagerListener(callManager,​ managerlistener);​ 
-// 添加回调监听 
-callManager.addListener(managerlistener);​ 
-//​移除回调监听 
-callManager.removeListener(managerlistener);​ 
-</​code>​ 
-===== 发起音视频会话 ===== 
-用户可以主动发起单人会话,方法如下 
-<​code>​ 
-/**  
- * 发起音视频会话asyncMakeCall 
- * @param remoteName Srign,对方用户ID,输入参数 
- * @param type Number,会话类型,0为音频,1为视频,输入参数 
- * @param ext String,会话扩展信息,应答方可见 
- * return {code:​{Number},​description:​{String},​data:​{EMCallSession}} 
- */ 
- let result = callManager.asyncMakeCall(remoteName,​type,​ext);​ 
-</​code>​ 
-===== 接听音视频会话 ===== 
-接听会话方法一般在收到onRecvCallIncoming后调用,方法如下 
-<​code>​ 
-/**  
- * 接听音视频会话asyncAnswerCall 
- * @param callId,​String,呼叫方ID,输入参数 
- */ 
-callManager.asyncAnswerCall(callId);​ 
-</​code>​ 
-callId可以通过callsession的getCallId()方法获取。 
-===== 发送Answer消息 ===== 
-发送Answer消息由接听方在会话连接上之后调用,即onRecvCallConnected中调用,只有接听方才需要调用此接口,方法如下 
-<​code>​ 
-/**  
- * 发送Answer消息 
- * @param callId,​String,呼叫方ID,输入参数 
- */ 
-callManager.sendAnswer(callId);​ 
-</​code>​ 
-===== 挂断音视频会话 ===== 
-用户可以在收到会话请求时,直接挂断会话,也可以在通话过程中挂断,调用挂断电话API时,需要传入挂断原因 
-<​code>​ 
-/**  
- * 接听音视频会话asyncEndCall 
- * @param callId,​String,呼叫方ID,输入参数 
- * @param reason,​Number 结束原因,0挂掉,1无响应,2拒绝,3忙碌,4失败,5不支持,6离线 
- */ 
-callManager.asyncEndCall(callId,​reason);​ 
-</​code>​ 
-===== 切换语音视频状态 ===== 
-<​code>​ 
-/** 
- * 修改会话类型,切换语音视频状态 
- * @param {String} callId 呼叫方Id 
- * @param {Number} controlType 修改后的类型,0语音暂停,1为语音继续,2视频暂停,3视频继续 
- */ 
-callManager.updateCal(callId,​controlType);​ 
-</​code>​ 
-===== 音视频配置 ===== 
-获取配置 
-<​code>​ 
-let emcallconfigs = callManager.getCallConfigs();​ 
-// 呼叫时,若对方不在线,是否发送离线通知 
-console.log("​IsSendPushIfOffline:"​ + emcallconfigs.getIsSendPushIfOffline());​ 
-// 视频宽度 
-console.log("​VideoResolutionWidth:"​ + emcallconfigs.getVideoResolutionWidth());​ 
-// 视频高度 
-console.log("​VideoResolutionHeight:"​ + emcallconfigs.getVideoResolutionHeight());​ 
-// 音视频心跳周期 
-console.log("​PingInterval:"​ + emcallconfigs.getPingInterval());​ 
-</​code>​ 
-设置配置 
-<​code>​ 
-// 呼叫时,若对方不在线,是否发送离线通知 
-emcallconfigs.setIsSendPushIfOffline(true);​ 
-// 视频宽度,高度 
-emcallconfigs.setVideoResolution(640,​480);​ 
-// 音视频心跳周期 
-emcallconfigs.setPingInterval(60);​ 
-callManager.setCallConfigs(emcallconfigs);​ 
-</​code>​ 
-===== 注册媒体流回调 ===== 
-会话接通后,需要使用音视频控件展示通话的音视频流,音视频流可通过注册回调得到,注册过程在注册消息回调监听时设置一次即可 
-<​code>​ 
-// 处理对方的音视频流,回调函数参数:remoteStream为对方音视频流,type为类型,0音频,1视频 
-callManager.getRemoteStream((remoteStream,​type) => {}); 
-// 处理本地的音视频流,回调函数参数:remoteStream为本地音视频流,type为类型,0音频,1视频 
-callManager.getLocalStream((localStream,​type) => {}); 
-</​code>​ 
-===== 发送离线通知 ===== 
-设置了若呼叫时,对方处于离线状态,执行的回调。当配置中设置了setIsSendPushIfOffline(true),该API可以应用。应用方法如下: 
-<​code>​ 
-// 传入回调函数,回调函数的三个参数分别为本地发送方ID,对方ID,呼叫类型(0语音,1视频) 
-callManager.setSendPushMessage((from,​to,​type) => { 
-  let textMsgBody = new easemob.EMTextMessageBody(type == 0?"​语音请求":"​视频请求"​);​ 
-  let textMsg = easemob.createSendMessage(from,​ to, textMsgBody);​ 
-  let callback = new easemob.EMCallback();​ 
-      ​ 
-  textMsg.setCallback(callback) 
-  emclient.getChatManager().sendMessage(textMsg);​ 
-}) 
-</​code>​ 
-===== 会话控制接口 ===== 
-音视频会话控制模块为EMCallSesssion,呼叫方通过asyncMakeCall返回,接听方通过监听回调的onRecvCallIncoming获取到。通过会话控制模块可以获取到以下会话信息 
-<​code>​ 
-// 获取CallId 
-console.log(callsession.getCallId());​ 
-// 获取本地名称 
-console.log(callsession.getLocalName());​ 
-// 获取会话类型,0音频,1视频 
-console.log(callsession.getType());​ 
-// 获取对方名称 
-console.log(callsession.getRemoteName());​ 
-// 获取是否呼叫方 
-console.log(callsession.getIsCaller());​ 
-// 获取会话状态,0断开,1振铃,2正在连接,3已连接,4已接听 
-console.log(callsession.getStatus());​ 
-// 获取会话详情EMCallSessionStatistics 
-console.log(callsession.getStatistics());​ 
-// 获取会话扩展信息 
-console.log(callsession.getExt());​ 
-// 修改会话状态,0音频暂停,1音频恢复,2视频暂停,3视频恢复 
-console.log(callsession.update(controltype));​ 
-</​code>​