android 双向通话实时,实时通话

实时通话

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

注:音视频通话功能最低支持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。

要在Android系统上实现通话双向录音,需要对系统进行root,然后使用合适的应用程序来记录通话。下面是一种常见的方法: 首先需要root手机。Root是一种获取管理员权限的过程,它允许您对系统进行更深入的操作。root手机的步骤因不同手机品牌和型号而异,您可以在互联网上找到相关教程。 当手机完成root后,可以在Google Play商店或其他安卓应用市场中搜索并下载适合的通话录音应用程序。有很多免费和付费的应用可供选择,例如“自动录音机”、“通话录音”等。 安装和打开所选择的应用后,您需要为应用授予电话和麦克风权限。这通常在应用初次运行时或在设置中完成。 一些录音应用在录音开始前会要求您开启“扬声器”模式。这是因为通话录音需要通过扬声器和麦克风进行录制。打开扬声器模式后,您的对话将通过扬声器播放并被麦克风录制。 接下来,您可以根据应用的说明或设置自定义录音格式、保存位置和其他选项。有些应用也提供了自动录音、通话筛选和其他高级功能。 完成设置后,您可以打开通话录音应用,并在通话开始时点击“录音”按钮或根据应用的设置自动开始录音。 需要注意的是,通话录音的合法性因地区而异。在某些地方,未经通话方的明确同意,录制通话可能是非法的。在使用通话录音应用前,请确保了解当地的法律规定,并且始终确保在合法和道德的方式下使用该功能。 对于非root手机,实现通话双向录音较为困难,因为这需要访问系统级别的权限。一些应用声称可以在非root手机上实现通话录音,但它们的功能和兼容性不如root手机。因此,如果您需要稳定和可靠的通话录音功能,建议进行root处理。 总之,要在Android系统上实现通话双向录音,需要root手机,下载并安装适当的通话录音应用程序,授予所需权限,并按照应用的设置进行录音。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值