差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
im:android:basics:audiovideo [2019/06/03 03:23] zhaoliang |
im:android:basics:audiovideo [2020/06/25 02:28] allenwang 移除 |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== 实时通话 ====== | + | ====== 1对1音视频通话 ====== |
---- | ---- | ||
- | 实时通话分为视频通话和音频通话,与普通电话不同,它是基于网络的。 | + | 1对1实时音视频通话分为视频通话和音频通话,与普通电话不同,它是基于网络的。 |
===== 实时通话的数据流量 ===== | ===== 实时通话的数据流量 ===== | ||
行 9: | 行 9: | ||
实时语音和实时视频的数据流量如下: | 实时语音和实时视频的数据流量如下: | ||
- | * 实时语音:双向 170k bytes/minute | + | 实时语音: |
- | * 实时视频:双向 2.5M~3M bytes/minute | + | * 双向 170k bytes/minute |
+ | 实时视频(单路): | ||
+ | * 240p: 0.75M ~ 3M | ||
+ | * 480p: 2.2M ~ 7.5M | ||
+ | * 720p: 6.5M ~ 18.5M | ||
+ | * 1080p: 15M ~ 37.5M | ||
===== 监听呼入通话 ===== | ===== 监听呼入通话 ===== | ||
行 56: | 行 61: | ||
break; | break; | ||
case DISCONNECTED: // 电话断了 | case DISCONNECTED: // 电话断了 | ||
+ | if(error == CallError.ERROR_UNAVAILABLE){ | ||
+ | // 对方不在线 | ||
+ | } | ||
break; | break; | ||
case NETWORK_UNSTABLE: //网络不稳定 | case NETWORK_UNSTABLE: //网络不稳定 | ||
行 64: | 行 71: | ||
} | } | ||
break; | break; | ||
- | case NETWORK_NORMAL: //网络恢复正常 | + | case NETWORK_NORMAL: //网络恢复正常 |
+ | break; | ||
+ | case NETWORK_DISCONNECTED: //通话中对方断网会执行 | ||
+ | |||
break; | break; | ||
default: | default: | ||
行 94: | 行 104: | ||
try {//多参数 | try {//多参数 | ||
EMClient.getInstance().callManager().makeVoiceCall(username,"ext 扩展内容"); | EMClient.getInstance().callManager().makeVoiceCall(username,"ext 扩展内容"); | ||
+ | } catch (EMServiceNotReadyException e) { | ||
+ | // TODO Auto-generated catch block | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | |||
+ | try {//多参数, recordOnServer:是否在服务器端录制该通话, mergeStream:服务器端录制时是否合并流 | ||
+ | EMClient.getInstance().callManager().makeVoiceCall(username,"ext 扩展内容", recordOnServer, mergeStream); | ||
} catch (EMServiceNotReadyException e) { | } catch (EMServiceNotReadyException e) { | ||
// TODO Auto-generated catch block | // TODO Auto-generated catch block | ||
行 123: | 行 140: | ||
// TODO Auto-generated catch block | // TODO Auto-generated catch block | ||
e.printStackTrace(); | e.printStackTrace(); | ||
+ | } | ||
+ | |||
+ | try {//多参数, recordOnServer:是否在服务器端录制该通话, mergeStream:服务器端录制时是否合并流 | ||
+ | EMClient.getInstance().callManager().makeVideoCall(username,"ext 扩展内容", recordOnServer, mergeStream); | ||
+ | } catch (EMServiceNotReadyException e) { | ||
+ | // TODO Auto-generated catch block | ||
+ | e.printStackTrace(); | ||
} | } | ||
行 203: | 行 227: | ||
</code> | </code> | ||
- | ===== 视频通话处理本地摄像头数据 ===== | + | ===== 用户自定义数据采集及数据处理 ===== |
- | 如果需要处理自己本地视频数据,比如美颜等操作,可以自己输入视频数据进行操作,原来的回调视频数据接口''EMCameraDataProcessor''已经废弃,不推荐使用; | + | 如果用户需要自己采集特定的数据或者对于数据需要先进行一些处理,可以使用SDK的外部输入数据的方法进行。 |
+ | |||
+ | 例如如果想要使用美颜或者变音等功能,需要用户使用系统的摄像头或者麦克风,然后启动监听系统设备,获取到数据后进行处理,处理后再调用我们输入数据的api发布出去。 | ||
使用方式: | 使用方式: | ||
行 222: | 行 248: | ||
</code> | </code> | ||
+ | |||
+ | 外部输入音频数据: | ||
+ | <code java> | ||
+ | public int inputExternalAudioData(byte[] data ,int length) | ||
+ | </code> | ||
===== 切换摄像头 ===== | ===== 切换摄像头 ===== | ||
行 246: | 行 277: | ||
<code java> | <code java> | ||
EMClient.getInstance().callManager().getCallOptions().setMaxVideoFrameRate(30); | EMClient.getInstance().callManager().getCallOptions().setMaxVideoFrameRate(30); | ||
- | </code> | ||
- | |||
- | ==== 视频截图 ==== | ||
- | |||
- | <code java> | ||
- | callHelper.takePicture(filepath); | ||
</code> | </code> | ||