public abstract class AVChatManager extends AVChatManagerLite
音视频通话统一接口,所有接口需主线程调用。
网络通话需要 Android JELLY_BEAN 及以上的系统版本。通话前请确保已经拥有了所需的各种权限,获取确实权限参考 checkPermission(Context).
目前仅支持同时进行一通会话,如果存在多个网络通话,需要选择挂断优先级低的会话。 如果存在系统电话,或者有系统电话接入,建议挂断网络通话。
关于网络通话的呼出和呼入超时的设置,需要生层自己实现响应的定时器,SDK内部的超时已经被废弃,未来会移除。
网络通话目前分为两大部分,双人通话和多人通话。
所有类型音视频通话需要监听会话状态: AVChatManagerLite.observeAVChatState(AVChatStateObserverLite, boolean)
双人通话,包含了信令相关操作和音视频操作两部分。信令包括了会话的发起,接听,拒绝,挂断等,重要接口有:
AVChatManagerLite.call2(String, AVChatType, AVChatNotifyOption, AVChatCallback) 发起会话,通知到对方用户。AVChatManagerLite.accept2(long, AVChatCallback) 接听会话。AVChatManagerLite.hangUp2(long, AVChatCallback) 挂断会话。 AVChatManagerLite.sendControlCommand(long, byte, AVChatCallback) 发送控制指令,用户可以定义私有的控制指令。建议通过此接口实现音视频切换。双人会话需要额外注册相关监听器:
AVChatManagerLite.observeIncomingCall(Observer, boolean) 监听来电。AVChatManagerLite.observeCalleeAckNotification(Observer, boolean) 呼叫发起后,监听对方的接听结果。AVChatManagerLite.observeControlNotification(Observer, boolean) 所有控制指令的监听接口。 AVChatManagerLite.observeHangUpNotification(Observer, boolean) 监听对方的挂断通知。AVChatManagerLite.observeOnlineAckNotification(Observer, boolean) 监听多端登陆时其他端处理。多人通话,互动直播属于此模式。 此模式不包含所有的信令操作,需要客户上层自定义实现, 此模式仅仅包含了房间的加入和离开,以及音视频操作。重要接口有:
AVChatManagerLite.createRoom(String, String, AVChatCallback) 仅仅创建一个多人会话的房间,任何时候都可以调用。AVChatManagerLite.joinRoom2(String, AVChatType, AVChatCallback) 加入一个已经创建好的多人房间。AVChatManagerLite.leaveRoom2(String, AVChatCallback) 离开一个已经加入的多人房间。 互动直播,多人会议视频通话流程示例:
AVChatManagerLite.createRoom(String, String, AVChatCallback)。 创建房间仅仅是在服务器预留一个房间名,房间未使用时有效期为30天,使用后的房间在所有用户退出后回收。AVChatManagerLite.observeAVChatState(AVChatStateObserverLite, boolean)。AVChatManagerLite.enableRtc()。 AVChatManagerLite.setChannelProfile(int) 。AVChatParameters.KEY_SESSION_LIVE_MODE, AVChatParameters.KEY_SESSION_LIVE_URL。AVChatManagerLite.enableVideo()。AVChatManagerLite.setupVideoCapturer(AVChatVideoCapturer)。AVChatManagerLite.setupLocalVideoRender(IVideoRender, boolean, int) 。AVChatManagerLite.setParameter(AVChatParameters.Key, Object), AVChatManagerLite.setParameters(AVChatParameters)。AVChatManagerLite.startVideoPreview()。AVChatManagerLite.joinRoom2(String, AVChatType, AVChatCallback)。AVChatManagerLite.stopVideoPreview() 。AVChatManagerLite.disableVideo() ()} 。AVChatManagerLite.leaveRoom2(String, AVChatCallback)。AVChatManagerLite.disableRtc()。双人视频通话流程示例:
AVChatManagerLite.observeAVChatState(AVChatStateObserverLite, boolean) 等等。AVChatManagerLite.enableRtc()。AVChatManagerLite.setChannelProfile(int) 。AVChatManagerLite.enableVideo()。AVChatManagerLite.setupVideoCapturer(AVChatVideoCapturer)。AVChatManagerLite.setupLocalVideoRender(IVideoRender, boolean, int)。AVChatManagerLite.setParameter(AVChatParameters.Key, Object), AVChatManagerLite.setParameters(AVChatParameters)。AVChatManagerLite.startVideoPreview()。AVChatManagerLite.call2(String, AVChatType, AVChatNotifyOption, AVChatCallback), AVChatManagerLite.accept2(long, AVChatCallback)。AVChatManagerLite.stopVideoPreview()。AVChatManagerLite.disableVideo() ()} 。AVChatManagerLite.hangUp2(long, AVChatCallback)。AVChatManagerLite.disableRtc()。| 构造器和说明 |
|---|
AVChatManager() |
| 限定符和类型 | 方法和说明 |
|---|---|
static java.util.List<java.lang.String> |
checkPermission(Context context)
检查音视频模块缺失的权限.
|
abstract boolean |
enableAudienceRole(boolean enable)
是否打开观众角色, 设置观众角色后所有的语音和视频数据的采集和发送会关闭,允许接收和播放远端其他用户的数据.
|
abstract int |
getConnectStatus()
获取当前通话状态
|
static AVChatManager |
getInstance()
获取抽象类具体实现对象
|
abstract AVChatNetworkProxy |
getNetworkProxy()
获取已经设置的网络代理
|
abstract boolean |
isAudienceRole()
当前是否处于观众角色.
|
abstract boolean |
isAutoPublishVideo()
查询当前是否为自动发布模式
|
abstract boolean |
isAutoSubscribeAudio()
查询当前音频是否为自动订阅模式
|
abstract boolean |
isAutoSubscribeVideo()
查询当前视频是否为自动订阅模式
|
abstract void |
observeTimeoutNotification(Observer<java.lang.Long> observer,
boolean register)
已过时。
用户外部实现超时,SDK内部未来不再提供
|
abstract boolean |
pauseAudioMixing()
暂停伴音
|
abstract boolean |
playAudioEffect(int effectId,
int loopback,
boolean send,
float volume)
播放音效 , 播放之前一定要预加载音效文件
preloadAudioEffect(int, String) ,并在预加载结果回调AVChatStateObserver.onAudioEffectPreload(int effectId, int result)中判断是否加载成功播放完成后会有 AVChatStateObserver.onAudioEffectPlayEvent(int effectId, int event)回调 |
abstract void |
preloadAudioEffect(int effectId,
java.lang.String audioFilePath)
预加载或卸载 音效文件(播放音效前的必要操作)
|
abstract int |
publishVideo()
手动发布视频流
|
abstract int |
pushExternalAudioData(byte[] data,
int samples,
int sampleRate,
int channel,
int bytesPerSample,
boolean blocking)
外部输入音频数据, 每次最多允许传递 40ms 数据
|
abstract int |
pushExternalAudioMixingStream(byte[] audioData,
int samplesPerChannel,
int sampleRate,
int channel)
输入外部需要混音的数据, 数据输入间隔需要保证和数据长度严格一致
|
abstract void |
registerAVChatRecordObserver(IAVChatRecordObserver observer,
boolean register)
注册话单观察者
|
abstract boolean |
registerPlayAudioCallBack(IAVChatPlayAudioCallBack callback)
注册播放前 pcm 音频数据回调
|
abstract boolean |
registerRemoteAudioCallBack(java.lang.String account,
IAVChatRemoteAudioCallBack callback)
注册远端用户 pcm 音频数据回调
|
abstract boolean |
resumeAudioMixing()
恢复伴音
|
abstract boolean |
seekAudioMixing(long ms)
设置伴音进度
|
abstract void |
setAsMainArea(java.lang.String account,
AVChatRoomServerCallback callback)
互动直播设置主画面
|
abstract boolean |
setAudioMixingPlaybackVolume(float volume)
设置伴音本地播放音量
|
abstract boolean |
setAudioMixingSendVolume(float volume)
设置伴音发送音量
|
abstract int |
setAutoPublish(boolean autoPub,
boolean autoSub)
设置是否自动发布,是否自动订阅 ,默认是自动发布和订阅,必须在joinRoom之前设置
说明:音频暂不支持手动发布,一直是发布的 ,但支持手动/自动订阅
|
abstract boolean |
setExternalAudioMixingStream(boolean enabled,
boolean asSource,
boolean asSink)
是否开启外部语音混音输入
|
abstract boolean |
setExternalAudioSource(boolean enabled)
是否采用外部语音采集方式,启用后会关闭SDK内部语音采集
|
abstract int |
setLocalVideoSimulcastModel(int mode)
设置本地视频多流模式。
|
abstract void |
setNetworkProxy(AVChatNetworkProxy proxy)
设置网络代理,需要在发起通话前前设置
|
abstract boolean |
setPlayCapturedAudioVolume(float volume)
设置耳返音量
在成功打开耳返功能后,可以实时调整耳返音量。
|
abstract int |
setPublishFallbackOption(int option)
设置弱网条件下发布的音视频流回退选项 , 在加入房间前设置才有效
|
abstract boolean |
startAudioMixing(java.lang.String path,
boolean loopback,
boolean replace,
int cycle,
float volume)
指定本地音频文件或者远程URL来和麦克风采集的音频流进行混音和替换
|
abstract boolean |
startAudioRecording()
通话中开始录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
|
abstract boolean |
startAudioRecording(int type)
通话中开始录音,包含所有用户的语音数据,录音文件格式为wav或aac,文件保存在客户端本地。
|
abstract boolean |
startAVRecording(java.lang.String account)
开始录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
|
abstract boolean |
startPlayCapturedAudio()
开启耳返
在通话建立后可以打开耳返功能,打开后可以从耳机中实时听到自己的声音。
|
abstract boolean |
stopAudioMixing()
停止伴音
|
abstract boolean |
stopAudioRecording()
通话中停止录音,包含所有用户的语音数据,录音文件格式为wav,文件保存在客户端本地。
|
abstract boolean |
stopAVRecording(java.lang.String account)
停止录制某个用户的语音和视频数据到文件,格式为mp4,该用户的语音和视频数据会被记录在MP4文件中,文件保存在客户端本地。
|
abstract boolean |
stopPlayAudioEffect(int effectId)
停止播放音效
|
abstract boolean |
stopPlayCapturedAudio()
关闭耳返
在成功开启耳返功能后, 可以随时关闭耳返效果。
|
abstract int |
subscribeActiveAudio()
手动订阅所有的活跃音频流
|
abstract int |
subscribeVideo(java.lang.String account,
int videoType)
手动订阅视频流
|
abstract int |
switchCommunicateMode(int mode)
切换通话模式,只能在非观众模式下的通话过程中能切换
|
abstract boolean |
takeSnapshot(java.lang.String account)
截取用户的画面
文件保存路径:
/Sdcard/Android/data/{app_package_name}/files/snapshot . |
abstract int |
unpublishVideo()
手动取消发布视频流
|
abstract int |
unsubscribeActiveAudio()
手动取消订阅所有的活跃音频流
|
abstract int |
unsubscribeVideo(java.lang.String account)
手动取消订阅视频流
|
accept2, call2, createRoom, createRoom, disableRtc, disableVideo, enableRtc, enableRtc, enableRtc, enableRtc, enableRtc, enableRtc, enableVideo, getCurrentChatId, getParameter, getParameters, getUidByAccount, hangUp2, isAllRemoteAudioMuted, isLocalAudioMuted, isLocalVideoMuted, isMicrophoneMute, isRemoteAudioMuted, isRemoteVideoMuted, joinRoom2, leaveRoom2, muteAllRemoteAudio, muteLocalAudio, muteLocalVideo, muteRemoteAudio, muteRemoteVideo, observeAVChatState, observeCalleeAckNotification, observeControlNotification, observeHangUpNotification, observeIncomingCall, observeOnlineAckNotification, rate, selectAudioDevice, sendControlCommand, setChannelProfile, setMicrophoneMute, setParameter, setParameters, setSpeaker, setupLocalVideoRender, setupRemoteVideoRender, setupVideoCapturer, setVideoQualityStrategy, speakerEnabled, startVideoPreview, stopVideoPreviewpublic static AVChatManager getInstance()
public abstract void setNetworkProxy(AVChatNetworkProxy proxy)
proxy - 代理信息public abstract AVChatNetworkProxy getNetworkProxy()
public abstract boolean setExternalAudioSource(boolean enabled)
enabled - 是否开启true 方法调用成功,false 方法调用失败public abstract int pushExternalAudioData(byte[] data,
int samples,
int sampleRate,
int channel,
int bytesPerSample,
boolean blocking)
throws java.lang.NullPointerException,
java.lang.IllegalArgumentException
data - 音频数据samples - 样本数量sampleRate - 采样率,仅支持 8000,16000,32000,44100,48000channel - 频道数量bytesPerSample - 每个样本的字节数, 仅支持PCM 16blocking - 是否阻塞写入数据。
如果非阻塞写入数据, 内部缓冲不足时会立即返回失败-100,
如果阻塞写入数据, 当内部缓冲不足时,会等待一定时间后再返回(待写入数据时长), 内部缓冲不足返回失败-100。0 方法调用成功,其他失败java.lang.NullPointerExceptionjava.lang.IllegalArgumentExceptionsetExternalAudioSource(boolean)public abstract boolean startAVRecording(java.lang.String account)
注意:录制双方数据可以采用服务器录制。
account - 用户账号true 方法调用成功,false 方法调用失败public abstract boolean stopAVRecording(java.lang.String account)
注意:录制双方数据可以采用服务器录制。
account - 用户账号true 方法调用成功,false 方法调用失败public abstract boolean startAudioRecording()
true 方法调用成功,false 方法调用失败public abstract boolean startAudioRecording(int type)
type - AVChatAudioRecordTypetrue 方法调用成功,false 方法调用失败public abstract boolean stopAudioRecording()
true 方法调用成功,false 方法调用失败public abstract boolean enableAudienceRole(boolean enable)
角色设置仅在多人会话时生效.
注意:用户角色和Mute区别。观众角色会影响本地数据的采集、处理和发送等; 本地的 Mute 只会影响发送的数据.
enable - true 观众模式,false 普通用户模式true 方法调用成功,false 方法调用失败public abstract boolean isAudienceRole()
角色设置仅在多人会话时生效.
true 观众角色模式,false 正常用户模式public static java.util.List<java.lang.String> checkPermission(Context context)
在Android 6.0 平台需要获取权限后运行.
context - Android 上下文public abstract boolean takeSnapshot(java.lang.String account)
文件保存路径: /Sdcard/Android/data/{app_package_name}/files/snapshot .
account - 用户账号true 方法调用成功,false 方法调用失败public abstract boolean startAudioMixing(java.lang.String path,
boolean loopback,
boolean replace,
int cycle,
float volume)
path - 本地文件路径或者远程URLloopback - 是否循环播放replace - 是否替换麦克风采集的音频数据cycle - 循环的次数volume - 音量[0.0f - 1.0f]true 方法调用成功,false 方法调用失败public abstract boolean setAudioMixingPlaybackVolume(float volume)
volume - [0.0f - 1.0f]true 方法调用成功,false 方法调用失败public abstract boolean setAudioMixingSendVolume(float volume)
volume - [0.0f - 1.0f]true 方法调用成功,false 方法调用失败public abstract boolean seekAudioMixing(long ms)
ms - 目标位置,单位毫秒,可参考AudioMixing#getCurrentMs()true 方法调用成功,false 方法调用失败public abstract boolean stopAudioMixing()
true 方法调用成功,false 方法调用失败public abstract boolean resumeAudioMixing()
true 方法调用成功,false 方法调用失败public abstract boolean pauseAudioMixing()
true 方法调用成功,false 方法调用失败public abstract void preloadAudioEffect(int effectId,
java.lang.String audioFilePath)
effectId - 音效id ,用户自定义 , 重复加载同一个id ,会先停止播放并卸载。audioFilePath - 音效文件路径,如果传 null ,表示卸载相应的音效 。在播放过程中卸载会停止播放并触发播放结束的回调。AVChatStateObserver.onAudioEffectPreload(int, int)中回调。public abstract boolean playAudioEffect(int effectId,
int loopback,
boolean send,
float volume)
preloadAudioEffect(int, String) ,并在预加载结果回调AVChatStateObserver.onAudioEffectPreload(int effectId, int result)中判断是否加载成功
播放完成后会有AVChatStateObserver.onAudioEffectPlayEvent(int effectId, int event)回调
effectId - 音效id , 同预加载时的idloopback - 音效循环次数 , -1 表示无限循环send - 是否发送volume - 播放及发送音量 [0.0f - 1.0f]true : 播放成功,false: 方法调用失败public abstract boolean stopPlayAudioEffect(int effectId)
effectId - 音效idtrue 方法调用成功,其他失败@Deprecated public abstract void observeTimeoutNotification(Observer<java.lang.Long> observer, boolean register)
observer - 观察者,参数true表示呼出电话超时对方应答,false表示来电自己超时未接听register - true 注册监听,false 注销监听public abstract boolean startPlayCapturedAudio()
开启耳返
在通话建立后可以打开耳返功能,打开后可以从耳机中实时听到自己的声音。
true 方法调用成功,false 方法调用失败public abstract boolean stopPlayCapturedAudio()
关闭耳返
在成功开启耳返功能后, 可以随时关闭耳返效果。
true 方法调用成功,false 方法调用失败public abstract boolean setPlayCapturedAudioVolume(float volume)
设置耳返音量
在成功打开耳返功能后,可以实时调整耳返音量。
volume - 播放耳返音量 [0.0f - 1.0f]true 方法调用成功,false 方法调用失败public abstract void setAsMainArea(java.lang.String account,
AVChatRoomServerCallback callback)
account - 被设置的用户账号callback - 设置状态回调public abstract boolean setExternalAudioMixingStream(boolean enabled,
boolean asSource,
boolean asSink)
enabled - 是否开启asSource - 参与语音发送数据混音asSink - 参与语音播放数据混音0 方法调用成功,其他失败public abstract int pushExternalAudioMixingStream(byte[] audioData,
int samplesPerChannel,
int sampleRate,
int channel)
audioData - 语音数据samplesPerChannel - 语音数据每个声道包含采样数sampleRate - 语音数据采样率channel - 语音数据采样率0 方法调用成功,其他失败public abstract int setAutoPublish(boolean autoPub,
boolean autoSub)
autoPub - true表示自动发布;false表示手动发布autoSub - true表示自动订阅;false表示手动订阅public abstract boolean isAutoPublishVideo()
public abstract boolean isAutoSubscribeVideo()
public abstract boolean isAutoSubscribeAudio()
public abstract int setLocalVideoSimulcastModel(int mode)
mode - 流模式,参考 :NRtcConstants.Subscribe#PUBLISH_MODEL_SINGLE_STREAM: 单流NRtcConstants.Subscribe#PUBLISH_MODEL_DUAL_STREAM: 双流public abstract int publishVideo()
AVChatStateObserver.onPublishVideoResult(int) RtcCode.Subscribe#VIDEO_IS_MUTED_ERR :当前视频是mute 的 RtcCode.Subscribe#IS_AUDIENCE_ERR :当前是观众 RtcCode.Subscribe#IS_AUDIO_MODE_ERR:当前是音频模式 RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持public abstract int unpublishVideo()
AVChatStateObserver.onUnpublishVideoResult(int) RtcCode.Subscribe#VIDEO_IS_MUTED_ERR :当前视频是mute 的 RtcCode.Subscribe#IS_AUDIENCE_ERR :当前是观众 RtcCode.Subscribe#IS_AUDIO_MODE_ERR:当前是音频模式 RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持public abstract int subscribeVideo(java.lang.String account,
int videoType)
account - 要订阅的accountvideoType - 要订阅的流类型,参考:NRtcConstants.Subscribe#VIDEO_TYPE_HIGH_RES: 大流NRtcConstants.Subscribe#VIDEO_TYPE_LOW_RES: 小流AVChatStateObserver.onSubscribeVideoResult(String, int, int) RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持RtcCode.Subscribe#TYPE_CONFLICT_ERR:视频类型冲突,需要取消之前订阅的流public abstract int unsubscribeVideo(java.lang.String account)
account - 要取消订阅的accountAVChatStateObserver.onUnsubscribeVideoResult(String, int, int)}RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持public abstract int subscribeActiveAudio()
AVChatStateObserver.onSubscribeAudioResult(int)RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持public abstract int unsubscribeActiveAudio()
AVChatStateObserver.onUnsubscribeAudioResult(int)RtcCode.Subscribe#ACTION_DUPLICATE_ERR:当前有正在进行中的操作 RtcCode.Subscribe#MODE_CONFLICT_ERR:模式冲突,当前是自动模式RtcCode.Subscribe#FORBID_ACTION:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持public abstract int setPublishFallbackOption(int option)
option - : 回退选项 ,默认值为NRtcConstants.PublishFallbackOption#STREAM_FALLBACK_AUDIO_ONLY , 参考如下:
NRtcConstants.PublishFallbackOption#STREAM_FALLBACK_DISABLED NRtcConstants.PublishFallbackOption#STREAM_FALLBACK_AUDIO_ONLY public abstract boolean registerRemoteAudioCallBack(java.lang.String account,
IAVChatRemoteAudioCallBack callback)
account - 远端用户account ,用户离开SDK会自动取消注册callback - 监听器 ,填 null 表示取消之前的注册的public abstract boolean registerPlayAudioCallBack(IAVChatPlayAudioCallBack callback)
callback - 监听器 ,填 null 表示取消之前的注册的
说明:如果用户需要特定的采集率但又不想自己重采样,可以修改AVChatParameters.KEY_AUDIO_PLAYBACK_DEFAULT_SAMPLE_RATEpublic abstract void registerAVChatRecordObserver(IAVChatRecordObserver observer, boolean register)
observer - 话单观察者register - true代表注册,false代表反注册public abstract int getConnectStatus()
public abstract int switchCommunicateMode(int mode)
mode - 通话模式视频模式 ,音频视频可以同时发,手动发布模式的话,还需要手动发布一下视频,
音频模式 ,只能发音频,会停止视频发送