当前通话信息
更新时间: 2024/08/23 10:24:52
本章节主要介绍在通话过程中,您可能要用到的各种通话信息。包括:远程画面就绪通知、自己和正在说话的用户的音量汇报等。
实现 AVChatStateObserver
监听通话过程中状态变化。被叫方同意来电请求后,SDK 自动进行音视频服务器连接,并返回相应信息供上层应用使用。
- 示例
javapublic class AVChatActivity implements AVChatStateObserver {
AVChatManager.getInstance().observeAVChatState(this, register);
}
当前用户加入房间通知
- API介绍
当前用户加入房间会返回服务器连接是否成功的回调 onJoinedChannel
,并通过返回的 result code 做相应的处理。
- API原型
java /**
* 服务器连接回调
*
* @param code 加入服务器结果 {@link AVChatResCode.JoinChannelCode}
* @param audioFile 如果存在服务器录制,指向语音文件.自v6.6.0开始已废弃。
* @param videoFile 如果存在服务器录制,指向视频文件.自v6.6.0开始已废弃。
* @param elapsed 从下面三个相关调用处开始计算,到成功加入房间的耗时,单位ms
* @see AVChatManager#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)
* @see AVChatManager#accept2(long, AVChatCallback)
* @see AVChatManager#joinRoom2(String, AVChatType, AVChatCallback)
*/
void onJoinedChannel(int code, String audioFile, String videoFile, int elapsed);
- 参数说明
参数 | 说明 |
---|---|
code | 返回加入频道是否成功。常见错误码参考 JoinChannelCode 。 |
audioFile | 在开启服务器录制的情况下返回语音录制文件的保存路径。自v6.6.0开始已废弃。 |
videoFile | 在开启服务器录制的情况下返回语音视频文件的保存路径。自v6.6.0开始已废弃。 |
elapsed | 从开始加入房间关调用处开始计算,到成功加入房间的耗时,单位ms |
- 示例
java@Override
public void onJoinedChannel(int code, String audioFile, String videoFile, int elapsed) { }
其他用户加入房间通知
- API介绍
其他用户音视频服务器连接成功后,会回调 onUserJoined
,可以获取当前通话的用户帐号。
- API原型
java /**
* 用户加入频道
*
* @param account 用户账号
* @see AVChatManager#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)
* @see AVChatManager#accept2(long, AVChatCallback)
* @see AVChatManager#joinRoom2(String, AVChatType, AVChatCallback)
*/
void onUserJoined(String account);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
- 示例
java@Override
public void onUserJoined(String account) {
// 如果是视频通话,需要设置远端用户视频画布
AVChatManager.getInstance().setupRemoteVideoRender(String account, IVideoRender render, boolean mirror, int scalingType);
}
当前用户离开房间通知
- API介绍
自己成功离开频道回调 onLeaveChannel
- API原型
java /**
* 退出频道.
*
* @see AVChatManager#hangUp2(long, AVChatCallback)
* @see AVChatManager#leaveRoom2(String, AVChatCallback)
*/
void onLeaveChannel();
- 示例
java@Override
public void onLeaveChannel() {}
其他用户离开房间通知
- API介绍
通话过程中,若有用户离开,则会回调 onUserLeave
。
- API原型
java /**
* 用户离开频道
*
* @param account 用户ID
* @param event {@link AVChatUserQuitType}
* @see AVChatManager#hangUp2(long, AVChatCallback)
* @see AVChatManager#leaveRoom2(String, AVChatCallback)
*/
void onUserLeave(String account, int event);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
event | 用户退出类型定义,常见类型参考 AVChatUserQuitType 。 |
- 示例
java// @param event -1,用户超时离开 0,正常退出
@Override
public void onUserLeave(String account, int event) {}
版本协议不兼容回调
- API介绍
若语音视频通话双方软件版本不兼容,则会回调 onProtocolIncompatible
。
- API原型
java /**
* 双方协议版本不兼容
*
* @param status 0 自己版本过低 1 对方版本过低
*/
void onProtocolIncompatible(int status);
- 参数说明
参数 | 说明 |
---|---|
status | 0 自己版本过低 1 对方版本过低。 |
- 示例
java// @param status 0 自己版本过低 1 对方版本过低
@Override
public void onProtocolIncompatible(int status) {}
服务器断开回调
- API介绍
通话过程中,从服务器断开连接, 当自己断网超时后,会回调 onDisconnectServer
。
- API原型
java /**
* 从服务器断开连接, 当自己断网后超时后,会收到此通知。
*/
void onDisconnectServer();
- 示例
java@Override
public void onDisconnectServer() {}
音视频连接成功建立回调
- API介绍
音视频连接建立,会回调 onCallEstablished
。音频切换到正在通话的界面,并开始计时等处理。视频则通过为用户设置对应画布并添加到相应的 layout 上显示图像。
- API原型
java /**
* 会话成功建立.
*/
void onCallEstablished();
- 示例
java@Override
public void onCallEstablished() {
if (state == AVChatTypeEnum.AUDIO.getValue()) {
aVChatUIManager.onCallStateChange(CallStateEnum.AUDIO);
} else {
aVChatUIManager.initSmallSurfaceView();
aVChatUIManager.onCallStateChange(CallStateEnum.VIDEO);
}
isCallEstablished = true;
}
音视频设备状态通知
- API介绍
音视频设备状态发生改变时,会回调 onDeviceEvent
。
- API原型
java /**
* 语音采集设备和视频采集设备事件通知
*
* @param code 事件ID
* @param desc 事件描述
* @see com.netease.nimlib.sdk.avchat.constant.AVChatDeviceEvent
*/
void onDeviceEvent(int code, String desc);
- 参数说明
参数 | 说明 |
---|---|
code | 事件ID,参考AVChatDeviceEvent。 |
desc | 事件描述。 |
- 示例
java@Override
public void onDeviceEvent(String account, int code, String desc) {}
截图结果回调
- API介绍
用户执行截图后会回调 onTakeSnapshotResult
。
- API原型
java /**
* 截取用户图像后的结果通知。
*
* @param account 被截图用户的账号
* @param success 截图是否成功
* @param file 截图成功后图像存储路径
* @see AVChatManager#takeSnapshot(String)
*/
void onTakeSnapshotResult(String account, boolean success, String file);
- 参数说明
参数 | 说明 |
---|---|
account | 被截图用户的账号。 |
success | 截图是否成功。 |
file | 截图成功后图像存储路径,图像保存路径是 /Sdcard/Android/data/{app_package_name}/files/snapshot。 |
- 示例
java@Override
public void onTakeSnapshotResult(String account, boolean success, String file) {}
本地网络类型发生改变回调
- API介绍
本地客户端网络类型发生改变时回调,会通知当前网络类型。
- API原型
java /**
* 客户端网络类型发生了变化
*
* @param netType 当前的网络类型
* @see com.netease.nimlib.sdk.avchat.constant.AVChatConnectionType
*/
void onConnectionTypeChanged(int netType);
- 参数说明
参数 | 说明 |
---|---|
netType | 当前的网络类型,参考AVChatConnectionType。 |
- 示例
java@Override
public void onConnectionTypeChanged(int netType) {}
用户第一帧画面通知
- API介绍
当用户第一帧视频画面绘制前通知。
- API原型
java /**
* 用户第一帧视频数据绘制前通知.
*
* @param account 用户账号
*/
void onFirstVideoFrameAvailable(String account);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
- 示例
java@Override
public void onFirstVideoFrameAvailable(String account) {}
用户第一帧画面绘制后通知
- API介绍
当用户第一帧视频画面绘制后通知。
- API原型
java /**
* 第一帧绘制通知
*
* @param account 用户账号
*/
void onFirstVideoFrameRendered(String account);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
- 示例
java@Override
public void onFirstVideoFrameRendered(String account) {}
用户视频画面分辨率改变通知
- API介绍
当用户视频画面的分辨率改变时通知。
- API原型
java /**
* 用户画面尺寸改变通知
*
* @param account 用户账号
* @param width 视频宽
* @param height 视频高
* @param rotate 视频角度
*/
void onVideoFrameResolutionChanged(String account, int width, int height, int rotate);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
width | 视频宽。 |
height | 视频高。 |
rotate | 视频角度。 |
- 示例
java@Override
public void onVideoFrameResolutionChanged(String user, int width, int height, int rotate) {}
用户视频帧率汇报
- API介绍
实时汇报用户的视频绘制帧率。
- API原型
java /**
* 用户视频画面fps更新, 需要设置参数 {@link AVChatParameters#KEY_VIDEO_FPS_REPORTED}.
*
* @param account 用户账号
* @param fps 当前绘制帧率
* @see AVChatParameters#KEY_VIDEO_FPS_REPORTED
* @see AVChatManager#setParameter(AVChatParameters.Key, Object)
*/
void onVideoFpsReported(String account, int fps);
- 参数说明
参数 | 说明 |
---|---|
account | 用户账号。 |
fps | 当前绘制帧率。 |
- 示例
java@Override
public void onVideoFpsReported(String account, int fps) {}
采集视频数据回调
- API介绍
当用户开始外部视频处理后,采集到的视频数据通过此回调通知。 用户可以对视频数据做相应的美颜等不同的处理。 需要通过setParameters
开启视频数据处理,根据情况选择开启新的或者老的数据回调,推荐使用新的数据回调方式。
parameters.setBoolean(AVChatParameters.KEY_VIDEO_FRAME_FILTER, on);//开启老的视频数据回调
parameters.setBoolean(AVChatParameters.KEY_VIDEO_FRAME_FILTER_NEW, on);//开启新的视频数据回调
- API原型1(弃用)
/**
* 视频数据外部处理接口, 此接口需要同步执行. 操作运行在视频数据发送线程上,处理速度过慢会导致帧率过低
*
* @param frame 待处理数据
* @param maybeDualInput 如果为 {@code true} 则代表需要外部输入两路数据,
* {@link AVChatVideoFrame#data} 处理后的原始数据,{@link AVChatVideoFrame#dataMirror} 处理后的镜像数据。
* 如果为 {@code false} 则代表仅需要外部输入一路数据,仅支持 {@link AVChatVideoFrame#data}。
* 在实际使用过程中,用户需要根据自己需求来决定是否真正需要输入镜像数据,一般在使用到水印等外部处理时才会需要真正输入两路数据,其他情况可以忽略此参数。
* @return 返回true成功
*/
boolean onVideoFrameFilter(AVChatVideoFrame frame, boolean maybeDualInput);
- 参数说明
参数 | 说明 |
---|---|
frame | 待处理数据,参考AVChatVideoFrame。 |
maybeDualInput | 是否需要外部输入两路数据,如果为 true 则代表需要外部输入两路数据。 |
- 示例
java@Override
public boolean onVideoFrameFilter(AVChatVideoFrame frame, boolean maybeDualInput)) {}
- API原型2(推荐)
java/**
* 视频数据外部处理接口, 此接口需要同步执行. 操作运行在视频数据发送线程上,处理速度过慢会导致帧率过低
* @param input 待处理数据
* @param outputFrames {@link com.netease.nrtc.sdk.video.VideoFrame[0]} 处理后的数据,{@link com.netease.nrtc.sdk.video.VideoFrame[1]} 处理后的镜像数据。
* 在实际使用过程中,用户需要根据自己需求来决定是否真正需要输入镜像数据,一般在使用到水印等外部处理时才会需要真正输入两路数据,其他情况可以忽略此参数。
* @param filterParameter 待处理数据的参数
* @return 返回true成功
*/
boolean onVideoFrameFilter(final com.netease.nrtc.sdk.video.VideoFrame input, com.netease.nrtc.sdk.video.VideoFrame[] outputFrames, VideoFilterParameter filterParameter);
- 参数说明
参数 | 说明 |
---|---|
input | 待处理数据,统一用VideoFrame封装,可能是I420/NV/Texture格式 |
outputFrames | outputFrames[0]处理后的数据,outputFrames[1]处理后的镜像数据 |
filterParameter | 待处理参数 ,参考 VideoFilterParameter |
- 示例
java@Override
boolean onVideoFrameFilter(final VideoFrame input, VideoFrame[] outputFrames, VideoFilterParameter filterParameter){
...
if(format == VideoFrameFormat.kVideoTexture) {
innerVideoEffect.init(getApplicationContext(), true, true);
}else{
innerVideoEffect.init(getApplicationContext(), true, false);
}
...
if (frame.getBuffer().getFormat() == VideoFrameFormat.kVideoTexture) {
return filterTextureFrame(frame,outputFrames,filterParameter);
} else {
return filterByteBufferFrame(frame, outputFrames, filterParameter);
}
...
}
采集语音数据回调
- API介绍
当用户开始外部语音处理后,采集到的语音数据通过此回调通知。 在此回调中用户可以对语音数据做相应的变声等不同的处理。需要通过setParameters
开启语音数据处理。
- API原型
java /**
* 语音数据处理接口, 不要改变数据的长度. 需要设置参数 {@link AVChatParameters#KEY_AUDIO_FRAME_FILTER}.
*
* @param frame 语音帧
* @return 返回false 失败
* @see AVChatParameters#KEY_AUDIO_FRAME_FILTER
* @see AVChatManager#setParameter(AVChatParameters.Key, Object)
*/
boolean onAudioFrameFilter(AVChatAudioFrame frame);
- 参数说明
参数 | 说明 |
---|---|
frame | 语音帧。 |
- 示例
java@Override
public boolean onAudioFrameFilter(AVChatAudioFrame frame) {}
语音播放设备变化通知
- API介绍
当用户切换扬声器或者耳机的插拔等操作时, 语音的播放设备都会发生变化通知。
- API原型
java /**
* 音频设备变化
*
* @param device 语音设备
* @param set 可选语音设备
* @param shouldSelect 如果为true,可以弹框选择蓝牙外放、耳机外放选项
* @see AVChatAudioDevice
*/
void onAudioDeviceChanged(int device, Set<Integer> set, boolean shouldSelect);
- 参数说明
参数 | 说明 |
---|---|
device | 语音播放设备,具体类型参考AVChatAudioDevice。 |
set | 可选语音设备列表,具体类型参考AVChatAudioDevice。 |
shouldSelect | 如果为true,可以弹框提醒用户选择蓝牙外放、耳机外放等选项,然后调用AVChatManagerLite#selectAudioDevice(int) 方法完成选择。 |
- 示例
java@Override
public void onAudioDeviceChanged(int device, Set<Integer> set, boolean shouldSelect) {}
语音正在说话用户声音强度通知
- API介绍
正在说话用户的语音强度回调,包括自己和其他用户的声音强度。如果一个用户没有说话,或者说话声音小没有被参加到混音,那么这个用户的信息不会在回调中出现。
- API原型
java /**
* 汇报正在说话的用户。 需要设置参数 {@link AVChatParameters#KEY_AUDIO_REPORT_SPEAKER}.
*
* @param speakers 用户账号和声音强度的键值对
* @param mixedEnergy 除去自己后,所有用户语音混音后的强度
* @see AVChatParameters#KEY_AUDIO_REPORT_SPEAKER
* @see AVChatManager#setParameter(AVChatParameters.Key, Object)
*/
void onReportSpeaker(Map<String, Integer> speakers, int mixedEnergy);
- 参数说明
参数 | 说明 |
---|---|
speakers | 用户账号和声音强度的键值对。 |
mixedEnergy | 除去自己后,所有用户语音混音后的强度。 |
- 示例
java@Override
void onReportSpeaker(Map<String, Integer> speakers, int mixedEnergy) {}
伴音事件通知
- API介绍
当伴音出错或者结束时,通过此回调进行通知
- API原型
java /**
* 伴音事件
*
* @see com.netease.nimlib.sdk.avchat.constant.AVChatAudioMixingEvent#MIXING_ERROR
* @see com.netease.nimlib.sdk.avchat.constant.AVChatAudioMixingEvent#MIXING_FINISHED
* @see com.netease.nimlib.sdk.avchat.constant.AVChatAudioMixingEvent#MIXING_STARTED
* @see AVChatManager#startAudioMixing(String, boolean, boolean, int, float)
* @see AVChatManager#stopAudioMixing()
*/
void onAudioMixingEvent(int event);
- 参数说明
参数 | 说明 |
---|---|
event | 伴音事件类型,参考AVChatAudioMixingEvent。 |
- 示例
java@Override
void onAudioMixingEvent(int event) {}
实时统计信息汇报
- API介绍
通过此回调通知实时统计信息。
- API原型
java /**
* 实时统计信息
*
* @param sessionStats 详细的统计信息
*/
void onSessionStats(AVChatSessionStats sessionStats);
- 参数说明
参数 | 说明 |
---|---|
sessionStats | 详细的统计信息,参考AVChatSessionStats |
- 示例
java@Override
void onSessionStats(AVChatSessionStats sessionStats) {}