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, stopVideoPreview
public 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.NullPointerException
java.lang.IllegalArgumentException
setExternalAudioSource(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
- AVChatAudioRecordType
true
方法调用成功,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_RATE
public abstract void registerAVChatRecordObserver(IAVChatRecordObserver observer, boolean register)
observer
- 话单观察者register
- true代表注册,false代表反注册public abstract int getConnectStatus()
public abstract int switchCommunicateMode(int mode)
mode
- 通话模式视频模式 ,音频视频可以同时发,手动发布模式的话,还需要手动发布一下视频
,
音频模式 ,只能发音频,会停止视频发送