环信即时通讯云php,实时通话

实时通话

实时通话分为视频通话和音频通话,与普通电话不同,它是基于网络的。

注:音视频通话功能最低支持android版本4.0+(14+)

实时通话的数据流量

实时语音和实时视频的数据流量如下:

实时语音:双向 170k bytes/minute

实时视频:双向 2.5M~3M bytes/minute

在 APP 中注册实时通话监听

IntentFilter callFilter = new IntentFilter(EMChatManager.getInstance().getIncomingCallBroadcastAction());

registerReceiver(new CallReceiver(), callFilter);

private class CallReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// 拨打方username

String from = intent.getStringExtra("from");

// call type

String type = intent.getStringExtra("type");

}

}

通话状态监听

/**

* 设置通话状态监听

* @param listener

*/

EMChatManager.getInstance().addVoiceCallStateChangeListener(new EMCallStateChangeListener() {

@Override

public void onCallStateChanged(CallState callState, CallError error) {

switch (callState) {

case CONNECTING: // 正在连接对方

break;

case CONNECTED: // 双方已经建立连接

break;

case ACCEPTED: // 电话接通成功

break;

case DISCONNNECTED: // 电话断了

break;

case NETWORK_UNSTABLE: //网络不稳定

if(error == CallError.ERROR_NO_DATA){

//无通话数据

}else{

}

break;

case NETWORK_NORMAL: //网络恢复正常

break;

default:

break;

}

}

});

拨打语音通话

/**

* 拨打语音通话

* @param to

* @throws EMServiceNotReadyException

*/

try {

EMChatManager.getInstance().makeVoiceCall(username);

} catch (EMServiceNotReadyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

拨打视频通话

/**

* 拨打视频通话

* @param to

* @throws EMServiceNotReadyException

*/

try {

EMChatManager.getInstance().makeVideoCall(username);

} catch (EMServiceNotReadyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

接听通话

/**

* 接听通话

* @throws EMNoActiveCallException

* @throws EMNetworkUnconnectedException

*/

try {

EMChatManager.getInstance().answerCall();

} catch (EMNoActiveCallException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (EMNetworkUnconnectedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

拒绝接听

/**

* 拒绝接听

* @throws EMNoActiveCallException

*/

try {

EMChatManager.getInstance().rejectCall();

} catch (EMNoActiveCallException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

挂断通话

/**

* 挂断通话

*/

EMChatManager.getInstance().endCall();

暂停和恢复语音或视频数据传输

暂停语音数据传输:

EMChatManager.getInstance().pauseVoiceTransfer()

恢复语音数据传输:

EMChatManager.getInstance().resumeVoiceTransfer()

暂停视频(图像)数据传输:

EMChatManager.getInstance().pauseVideoTransfer()

恢复视频(图像)数据传输:

EMChatManager.getInstance().resumeVideoTransfer()

调用后对方会收到相应 VOICE_PAUSE、VOICE_RESUME、VIDEO_PAUSE、VIDEO_RESUME 的 callstate 的变动通知。

更多视频通话相关API

视频通话相对复杂,把视频相关的一些 API 封装到了 EMVideoCallHelper 里。

常用方法如下(具体可参考 Demo 的 VideoCallActivity 和 CameraHelper):

//获取callHelper

callHelper = EMVideoCallHelper.getnstance();

//设置显示对方图像的surfaceview

callHelper.setSurfaceView(oppositeSurface);

//设置通话时的屏幕方向(注意在mainfest也需设置相应activity的方向,需和此保持一致)

callHelper.setVideoOrientation(EMVideoOrientation.EMLandscape);

//设置要传给对方的图像分辨率

callHelper.setResolution(mwidth, mheight);

//处理预览数据

callHelper.processPreviewData(mheight, mwidth, data);

//设置显示对方对象的surfaceview的宽、高及format

callHelper.onWindowResize(width, height, format);

//设置视频比特率,默认150

callHelper.setVideoBitrate(bitrate);

//截图

callHelper.takePicture(filepath);

//录制视频,参数为录制的文件存储目录

callHelper.startVideoRecord(dirPath);

//停止录制,此方法返回录制完成的视频的完整路径

callHelper.stopVideoRecord();

//码率自适应

EMChatManager.getInstance().setAdaptiveVideoFlag(true);

更多方法请参考 API Doc。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值