NIMSDK-AOS  9.19.0
AVChatManagerLite.java
浏览该文件的文档.
1 /*
2  * Copyright (c) 2014-2018 NetEase, Inc.
3  * All right reserved.
4  */
5 
6 package com.netease.nimlib.sdk.avchat;
7 
8 
9 import android.content.Context;
10 
11 import com.netease.nimlib.avchat.AVChatManagerImpl;
39 import com.netease.nrtc.video.render.IVideoRender;
40 
41 import java.util.List;
42 
43 
44 /**
45  * <p>音视频通话统一接口,所有接口需主线程调用。</p>
46  *
47  * <p> 网络通话需要 {@code Android JELLY_BEAN} 及以上的系统版本。通话前请确保已经拥有了所需的各种权限,获取确实权限参考 {@link AVChatManager#checkPermission(Context)}.
48  * 目前仅支持同时进行一通会话,如果存在多个网络通话,需要选择挂断优先级低的会话。 如果存在系统电话,或者有系统电话接入,建议挂断网络通话。</p>
49  *
50  * <p>关于网络通话的呼出和呼入超时的设置,需要生层自己实现响应的定时器,SDK内部的超时已经被废弃,未来会移除。</p>
51  *
52  * <p>网络通话目前分为两大部分,双人通话和多人通话。</p>
53  *
54  * <p><b>所有类型音视频通话需要监听会话状态: {@link AVChatManagerLite#observeAVChatState(AVChatStateObserverLite, boolean)}</b></p>
55  *
56  * <p><b>双人通话,包含了信令相关操作和音视频操作两部分。信令包括了会话的发起,接听,拒绝,挂断等,重要接口有:</b>
57  * <ul>
58  * <li>{@link AVChatManagerLite#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)} 发起会话,通知到对方用户。</li>
59  * <li>{@link AVChatManagerLite#accept2(long, AVChatCallback)} 接听会话。</li>
60  * <li>{@link AVChatManagerLite#hangUp2(long, AVChatCallback)} 挂断会话。 </li>
61  * <li>{@link AVChatManagerLite#sendControlCommand(long, byte, AVChatCallback)} 发送控制指令,用户可以定义私有的控制指令。建议通过此接口实现音视频切换。</li>
62  * </ul></p>
63  *
64  * <p><b>双人会话需要额外注册相关监听器:</b>
65  * <ul>
66  * <li>{@link AVChatManagerLite#observeIncomingCall(Observer, boolean)} 监听来电。</li>
67  * <li>{@link AVChatManagerLite#observeCalleeAckNotification(Observer, boolean)} 呼叫发起后,监听对方的接听结果。</li>
68  * <li>{@link AVChatManagerLite#observeControlNotification(Observer, boolean)} 所有控制指令的监听接口。 </li>
69  * <li>{@link AVChatManagerLite#observeHangUpNotification(Observer, boolean)} 监听对方的挂断通知。</li>
70  * <li>{@link AVChatManagerLite#observeOnlineAckNotification(Observer, boolean)} 监听多端登陆时其他端处理。</li>
71  * </ul></p>
72  *
73  * <p><b>多人通话,互动直播属于此模式。 此模式不包含所有的信令操作,需要客户上层自定义实现, 此模式仅仅包含了房间的加入和离开,以及音视频操作。重要接口有:</b>
74  * <ul>
75  * <li>{@link AVChatManagerLite#createRoom(String, String, AVChatCallback)} 仅仅创建一个多人会话的房间,任何时候都可以调用。</li>
76  * <li>{@link AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)} 加入一个已经创建好的多人房间。</li>
77  * <li>{@link AVChatManagerLite#leaveRoom2(String, AVChatCallback)} 离开一个已经加入的多人房间。 </li>
78  * </ul></p>
79  *
80  * <p><b>互动直播,多人会议视频通话流程示例:</b>
81  * <ol>
82  * <li>主播或者管理员创建房间 {@link AVChatManagerLite#createRoom(String, String, AVChatCallback)}。 创建房间仅仅是在服务器预留一个房间名,房间未使用时有效期为30天,使用后的房间在所有用户退出后回收。</li>
83  * <li>注册音视频模块监听 {@link AVChatManagerLite#observeAVChatState(AVChatStateObserverLite, boolean)}。</li>
84  * <li>开启音视频引擎, {@link AVChatManagerLite#enableRtc()}。 </li>
85  * <li>设置通话场景, 如没有特殊需求不用设置 {@link AVChatManagerLite#setChannelProfile(int)} 。</li>
86  * <li>设置互动直播模式,设置互动直播推流地址 [仅限互动直播] {@link AVChatParameters#KEY_SESSION_LIVE_MODE}, {@link AVChatParameters#KEY_SESSION_LIVE_URL}。</li>
87  * <li>打开视频模块 {@link AVChatManagerLite#enableVideo()}。</li>
88  * <li>设置视频采集模块 {@link AVChatManagerLite#setupVideoCapturer(AVChatVideoCapturer)}。</li>
89  * <li>设置本地预览画布 {@link AVChatManagerLite#setupLocalVideoRender(IVideoRender, boolean, int)} 。</li>
90  * <li>设置视频通话可选参数[可以不设置] {@link AVChatManagerLite#setParameter(AVChatParameters.Key, Object)}, {@link AVChatManager#setParameters(AVChatParameters)}。</li>
91  * <li>打开本地视频预览 {@link AVChatManagerLite#startVideoPreview()}。</li>
92  * <li>加入房间 {@link AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)}。</li>
93  * <li>开始多人会议或者互动直播,以及各种音视频操作。</li>
94  * <li>关闭本地预览 {@link AVChatManagerLite#stopVideoPreview()} 。</li>
95  * <li>关闭视频模块 {@link AVChatManagerLite#disableVideo()} ()} 。</li>
96  * <li>离开会话 {@link AVChatManagerLite#leaveRoom2(String, AVChatCallback)}。</li>
97  * <li>关闭音视频引擎, {@link AVChatManagerLite#disableRtc()}。</li>
98  * </ol></p>
99  *
100  * <p><b>双人视频通话流程示例:</b>
101  * <ol>
102  * <li>注册本地各种监听器 {@link AVChatManagerLite#observeAVChatState(AVChatStateObserverLite, boolean)} 等等。</li>
103  * <li>开启音视频引擎, {@link AVChatManagerLite#enableRtc()}。</li>
104  * <li>设置通话场景, 如没有特殊需求不用设置 {@link AVChatManagerLite#setChannelProfile(int)} 。</li>
105  * <li>打开视频模块 {@link AVChatManagerLite#enableVideo()}。</li>
106  * <li>设置视频采集模块 {@link AVChatManagerLite#setupVideoCapturer(AVChatVideoCapturer)}。</li>
107  * <li>设置本地预览画布 {@link AVChatManagerLite#setupLocalVideoRender(IVideoRender, boolean, int)}。</li>
108  * <li>设置视频通话可选参数[可以不设置] {@link AVChatManagerLite#setParameter(AVChatParameters.Key, Object)}, {@link AVChatManager#setParameters(AVChatParameters)}。</li>
109  * <li>打开本地视频预览 {@link AVChatManagerLite#startVideoPreview()}。</li>
110  * <li>呼叫或者接听通话 {@link AVChatManagerLite#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)}, {@link AVChatManager#accept2(long, AVChatCallback)}。</li>
111  * <li>等待对方进入开始通话, 各种音视频控制。</li>
112  * <li>关闭本地预览 {@link AVChatManagerLite#stopVideoPreview()}。</li>
113  * <li>关闭视频模块 {@link AVChatManagerLite#disableVideo()} ()} 。</li>
114  * <li>离开挂断会话 {@link AVChatManagerLite#hangUp2(long, AVChatCallback)}。</li>
115  * <li>关闭音视频引擎, {@link AVChatManagerLite#disableRtc()}。</li>
116  * </ol></p>
117  */
118 public abstract class AVChatManagerLite {
119 
120  /**
121  * <p>获取基础音视频通话接口</p>
122  *
123  * <p>基础版本音视频通话。 如果需要使用伴音以及本地录制等功能, 需要使用 {@link AVChatManager} 接口。</p>
124  *
125  * @return 返回 {@link AVChatManagerLite}
126  */
127  public static AVChatManagerLite getInstance() {
128  return AVChatManagerImpl.InstanceHolder.instance;
129  }
130 
131 
132  /**
133  * <p>激活音视频通话底层引擎</p>
134  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
135  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
136  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
137  *
138  * @return {@code true} 方法s调用成功,{@code false} 方法调用失败
139  * @see AVChatManagerLite#disableRtc()
140  */
141  public abstract boolean enableRtc();
142 
143  /**
144  * <p>激活音视频通话底层引擎</p>
145  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
146  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
147  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
148  *
149  * @param osType {@link AVChatOSCategory}
150  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
151  * @see AVChatManagerLite#disableRtc()
152  * @deprecated 推荐使用 {@link AVChatManagerLite#enableRtc(AVChatEngineConfig)}
153  */
154  @Deprecated
155  public abstract boolean enableRtc(int osType);
156 
157  /**
158  * <p>激活音视频通话底层引擎</p>
159  *
160  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
161  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
162  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
163  *
164  * @param serverAddresses 私有化服务器地址
165  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
166  * @see AVChatManagerLite#disableRtc()
167  * @deprecated 推荐使用 {@link AVChatManagerLite#enableRtc(AVChatEngineConfig)}
168  */
169  @Deprecated
170  public abstract boolean enableRtc(AVChatServerAddresses serverAddresses);
171 
172  /**
173  * <p>激活音视频通话底层引擎</p>
174  *
175  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
176  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
177  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
178  *
179  * @param osType {@link AVChatOSCategory}
180  * @param lowEnergy 是否开启低功耗模式
181  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
182  * @see AVChatManagerLite#disableRtc()
183  * @deprecated 推荐使用 {@link AVChatManagerLite#enableRtc(AVChatEngineConfig)}
184  */
185  @Deprecated
186  public abstract boolean enableRtc(int osType, boolean lowEnergy);
187 
188 
189  /**
190  * <p>激活音视频通话底层引擎</p>
191  *
192  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
193  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
194  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
195  *
196  * @param osType {@link AVChatOSCategory}
197  * @param lowEnergy 是否开启低功耗模式
198  * @param address 私有化服务器地址
199  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
200  * @see AVChatManagerLite#disableRtc()
201  * @deprecated 推荐使用 {@link AVChatManagerLite#enableRtc(AVChatEngineConfig)}
202  */
203  @Deprecated
204  public abstract boolean enableRtc(int osType, boolean lowEnergy, AVChatServerAddresses address);
205 
206 
207  /**
208  * <p>激活音视频通话底层引擎</p>
209  *
210  * <p>在进行音视频通话前需要调用此接口来激活音视频通话引擎,
211  * 否则后续所有的接口调用会导致异常。如果方法调用成功, 后续需要调用 {@link AVChatManagerLite#disableRtc()}
212  * 来关闭音视频底层引擎, 否则会出现资源泄漏。</p>
213  *
214  * @param config 启动引擎相关的配置,例如:osType 、lowEnergy 、serverAddresses 、encryptType 、encryptKey <br/>
215  * 参考 :{@link AVChatEngineConfig.Builder}
216  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
217  * @see AVChatManagerLite#disableRtc()
218  */
219  public abstract boolean enableRtc(AVChatEngineConfig config);
220 
221 
222  /**
223  * <p>关闭音视频通话底层引擎</p>
224  *
225  * <p>在通话结束后需要调用此接口关闭音视频通话引擎来释放资源。
226  * 关闭音视频引擎后后续所有的其他调用都会失败或者异常。</p>
227  *
228  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
229  * @see AVChatManagerLite#enableRtc()
230  */
231  public abstract boolean disableRtc();
232 
233 
234  /**
235  * <p>激活视频模块</p>
236  *
237  * <p>如果你通话过程中有视频相关内容, 那必须在视频相关接口调用前先激活视频模块。
238  * 通话结束前需要调用 {@link AVChatManagerLite#disableVideo()} 来关闭视频模块。
239  * 在通话过程中, 通过此接口可以实现引擎的音视频通话模式切换,
240  * 信令层可以通过使用 {@link AVChatManagerLite#sendControlCommand(long, byte, AVChatCallback)} 来通知
241  * 对方目前的会话模式切换。 默认情况下视频模块是处于非激活状态。</p>
242  *
243  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
244  * @see AVChatManagerLite#disableVideo()
245  */
246  public abstract boolean enableVideo();
247 
248 
249  /**
250  * <p>关闭视频模块</p>
251  *
252  * <p>关闭视频相关模块。 在通过过程中调用会让引擎切换到语音模式, 如果信令层需要通知对方,则通过
253  * {@link AVChatManagerLite#sendControlCommand(long, byte, AVChatCallback)} 实现。</p>
254  *
255  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
256  * @see AVChatManagerLite#enableVideo()
257  */
258  public abstract boolean disableVideo();
259 
260 
261  /**
262  * <p>信令层发起双人通话</p>
263  *
264  * <p>在信令层发起呼叫, 成功调用此接口后对方会收到相应的会话通知。 在呼叫过程中需要上层实现定时器, 当超过一定时间对方未接听时
265  * 需要 {@link AVChatManagerLite#hangUp2(long, AVChatCallback)} 挂断会话。</p>
266  *
267  * <p><b>在发起会话时有几个比较重要可选字段:</b>
268  * <ul>
269  * <li>{@link AVChatNotifyOption#extendMessage} 附加信息字段, 接听会话的用户会收到此字段。 </li>
270  * <li>{@link AVChatNotifyOption#forceKeepCalling} 持续呼叫,如果对方不在线也会继续呼叫, 否则会直接返回失败。</li>
271  * </ul>
272  * </p>
273  *
274  * <p><b>在调用信令层发起通话接口前需要先调用以下接口:</b>
275  * <ol>
276  * <li>开启音视频引擎 {@link AVChatManagerLite#enableRtc()}</li>
277  * <li>可选, 激活视频模块 {@link AVChatManagerLite#enableVideo()}</li>
278  * <li>可选, 设置本地预览画布,{@link AVChatManagerLite#setupLocalVideoRender(IVideoRender, boolean, int)}</li>
279  * <li>可选, 开启视频预览,{@link AVChatManagerLite#startVideoPreview()}</li>
280  * <li>可选, 通话相关参数设置 {@link AVChatManagerLite#setParameters(AVChatParameters)},</li>
281  * </ol>
282  * </p>
283  *
284  * @param account 对方用户账号
285  * @param callType 通话类型:语音、视频
286  * @param notifyOption 可选通知参数
287  * @param callback 回调函数,返回 {@link AVChatData}
288  * @see AVChatManagerLite#accept2(long, AVChatCallback)
289  * @see AVChatManagerLite#hangUp2(long, AVChatCallback)
290  */
291  public abstract void call2(String account,
292  AVChatType callType,
293  AVChatNotifyOption notifyOption,
294  AVChatCallback<AVChatData> callback);
295 
296  /**
297  * <p>信令层接听双人通话</p>
298  *
299  * <p>在程序启动时需要注册 {@link AVChatManagerLite#observeIncomingCall(Observer, boolean)}, 这样在有其他用户
300  * 呼叫时将会收到来电通知, 收到来电通知后一般会有相应的界面展示, 如果需要接听电话那个需要调用此接口, 如果需要拒绝通话请调用
301  * {@link AVChatManagerLite#hangUp2(long, AVChatCallback)}。</p>
302  *
303  * <p>在成功接听会话后, 引擎就会自动去连接预先分配好的媒体服务器。 连接媒体服务器的结果将会在
304  * {@link AVChatStateObserverLite#onJoinedChannel(int, String, String, int)} 中进行通知。</p>
305  *
306  *
307  * <p><b>在调用信令层接听会话接口前需要先调用以下接口:</b>
308  * <ol>
309  * <li>开启音视频引擎 {@link AVChatManagerLite#enableRtc()}</li>
310  * <li>可选, 激活视频模块 {@link AVChatManagerLite#enableVideo()}</li>
311  * <li>可选, 设置本地预览画布,{@link AVChatManagerLite#setupLocalVideoRender(IVideoRender, boolean, int)}</li>
312  * <li>可选, 开启视频预览,{@link AVChatManagerLite#startVideoPreview()}</li>
313  * <li>可选, 通话相关参数设置 {@link AVChatManagerLite#setParameters(AVChatParameters)}</li>
314  * </ol>
315  * </p>
316  *
317  * @param chatId 会话ID
318  * @param callback 回调函数,返回接听后,本地音视频设备启动是否成功。
319  * 回调onSuccess表示成功;回调onFailed表示失败,错误码-1表示初始化引擎失败,需要重试。
320  * 注意:由于音视频引擎析构需要时间,请尽可能保持上一次通话挂断到本次电话接听时间间隔在2秒以上,否则有可能在接听时出现初始化引擎失败(code = -1)
321  * @see AVChatManagerLite#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)
322  * @see AVChatManagerLite#hangUp2(long, AVChatCallback)
323  */
324  public abstract void accept2(long chatId, AVChatCallback<Void> callback);
325 
326 
327  /**
328  * <p>信令层挂断或者拒绝通话请求</p>
329  *
330  * <p>在程序启动时需要注册 {@link AVChatManagerLite#observeIncomingCall(Observer, boolean)}, 这样在有其他用户
331  * 呼叫时将会收到来电通知, 收到来电通知后一般会有相应的界面展示, 如果需要拒绝电话调用此接口, 如果需要接听通话请调用
332  * {@link AVChatManagerLite#accept2(long, AVChatCallback)}。</p>
333  *
334  * <p>如果在通话过程中调用此接口,则会直接挂断通话, 同时对方会收到你挂断通知信令。</p>
335  *
336  * <p><b>此接口仅仅是信令层的挂断,如果需要销毁引擎释放资源需要调用以下接口:</b>
337  * <ol>
338  * <li>可选, 关闭视频预览 {@link AVChatManagerLite#stopVideoPreview()} ()}</li>
339  * <li>可选, 关闭视频模块 {@link AVChatManagerLite#disableVideo()}}</li>
340  * <li>释放通话资源 {@link AVChatManagerLite#disableRtc()}</li>
341  * </ol>
342  * </p>
343  *
344  * @param chatId 会话ID。发起通话和被叫通知都有会话ID通知,挂断时需要制定会话ID,如果在呼叫过程中还没有返回会话ID, 则传入0能够挂断正在呼叫的会话。
345  * @param callback 回调函数
346  * @see AVChatManagerLite#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)
347  * @see AVChatManagerLite#accept2(long, AVChatCallback)
348  */
349  public abstract void hangUp2(long chatId, AVChatCallback<Void> callback);
350 
351 
352  /**
353  * <p>创建多人通话房间</p>
354  *
355  * <p>如果你需要使用多人会议和互动直播相关功能, 需要通过此接口创建一个多人房间,
356  * 然后通过 {@link AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)} 来加入房间。
357  * 房间创建成功后会一直保留, 尽量即时使用, 目前有效期为一个月, 超过有效期后再次加入房间会失败。
358  * 如果一个房间已经被创建, 那么再次创建时会返回失败, 提示房间已经存在。</p>
359  *
360  * <p>房间创建时机不受音视频通话流程限制, 你可以在任意时间预定自己的多人会议房间。创建成功后即可通知所有会议参与者加入此房间,
361  * 你将会在 {@link AVChatStateObserverLite#onUserJoined(String)} 中陆续收到不同的用户加入会议。</p>
362  *
363  * @param roomName 房间名
364  * @param extraMessage 自定义的扩展消息, 其它加入房间的用户都会收到
365  * @param callback 创建房间回调接口
366  * @see AVChatResCode#ERROR_CREATE_ROOM_ALREADY_EXIST
367  * @see AVChatManagerLite#createRoom(String, String, AVChatCallback)
368  * @see AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)
369  * @see AVChatManagerLite#leaveRoom2(String, AVChatCallback)
370  */
371  public abstract void createRoom(String roomName,
372  String extraMessage,
374 
375 
376  /**
377  * <p>创建多人通话房间并设置直播推流相关的参数</p>
378  *
379  * <p>如果你需要使用多人会议和互动直播相关功能, 需要通过此接口创建一个多人房间,
380  * 然后通过 {@link AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)} 来加入房间。
381  * 房间创建成功后会一直保留, 尽量即时使用, 目前有效期为一个月, 超过有效期后再次加入房间会失败。
382  * 如果一个房间已经被创建, 那么再次创建时会返回失败, 提示房间已经存在。</p>
383  *
384  * <p>房间创建时机不受音视频通话流程限制, 你可以在任意时间预定自己的多人会议房间。创建成功后即可通知所有会议参与者加入此房间,
385  * 你将会在 {@link AVChatStateObserverLite#onUserJoined(String)} 中陆续收到不同的用户加入会议。</p>
386  *
387  * @param roomName 房间名
388  * @param extraMessage 自定义的扩展消息, 其它加入房间的用户都会收到
389  * @param liveConfigList 直播推流相关的配置,可以同时配置多种Config,推多路不同的流,如果不需要推流,填 null 即可 。<br/>
390  * 注意: 设置这个参数跟自己是否推流无关 , 如果需要推流,请打开{@link AVChatParameters#KEY_SESSION_LIVE_MODE} 开关
391  * @param callback 创建房间回调接口
392  * @see AVChatLiveTaskConfig
393  * @see AVChatParameters#KEY_SESSION_LIVE_MODE
394  * @see AVChatResCode#ERROR_CREATE_ROOM_ALREADY_EXIST
395  * @see AVChatManagerLite#createRoom(String, String, List, AVChatCallback)
396  * @see AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)
397  * @see AVChatManagerLite#leaveRoom2(String, AVChatCallback)
398  */
399  public abstract void createRoom(String roomName,
400  String extraMessage,
401  List<AVChatLiveTaskConfig> liveConfigList,
403 
404 
405  /**
406  * <p>加入已经预先创建的多人会议房间</p>
407  *
408  * <p><b>加入一个多人会议房间前需要调用以下接口:</b>
409  * <ol>
410  * <li>开启音视频引擎 {@link AVChatManagerLite#enableRtc()}</li>
411  * <li>可选, 激活视频模块 {@link AVChatManagerLite#enableVideo()}</li>
412  * <li>可选, 设置本地预览画布,{@link AVChatManagerLite#setupLocalVideoRender(IVideoRender, boolean, int)}</li>
413  * <li>可选, 开启视频预览,{@link AVChatManagerLite#startVideoPreview()}</li>
414  * <li>可选, 通话相关参数设置 {@link AVChatManagerLite#setParameters(AVChatParameters)}</li>
415  * </ol>
416  * </p>
417  *
418  * <p>当你成功加入会议后, 你会收到 {@link AVChatStateObserverLite#onUserJoined(String)} 来通知目前会议室内已经存在的用户。
419  * 在离开房间时需要调用 {@link AVChatManagerLite#leaveRoom2(String, AVChatCallback)}。</p>
420  *
421  * <p><b>多人会议的加入其他用户是不会收到信令层的通知,只能通过媒体层的通知来获取用户加入 {@link AVChatStateObserverLite#onUserJoined(String)}。 </b></p>
422  *
423  * <p><b>如果你的产品加入多人会议是为了进行互动直播, 那么你还需要额外设置以下参数 {@link AVChatManagerLite#setParameter(AVChatParameters.Key, Object)}:</b>
424  * <ul>
425  * <li>打开互动直播模式, {@link AVChatParameters#KEY_SESSION_LIVE_MODE}</li>
426  * <li>如果你是主播, 还需要设置推流地址 {@link AVChatParameters#KEY_SESSION_LIVE_URL}</li>
427  * </ul>
428  * </p>
429  *
430  * @param roomName 房间名
431  * @param callType 房间通话类型
432  * @param callback 加入房间回调接口
433  * @see AVChatManagerLite#createRoom(String, String, AVChatCallback)
434  * @see AVChatManagerLite#leaveRoom2(String, AVChatCallback)
435  */
436  public abstract void joinRoom2(String roomName,
437  final AVChatType callType,
438  AVChatCallback<AVChatData> callback);
439 
440  /**
441  * <p>离开加入的多人会议房间</p>
442  *
443  * <p><b>此接口仅仅是离开多人会话房间,如果需要销毁引擎释放资源需要调用以下接口:</b>
444  * <ol>
445  * <li>可选, 关闭视频预览 {@link AVChatManagerLite#stopVideoPreview()} ()}</li>
446  * <li>可选, 关闭视频模块 {@link AVChatManagerLite#disableVideo()}}</li>
447  * <li>释放通话资源 {@link AVChatManagerLite#disableRtc()}</li>
448  * </ol>
449  * </p>
450  *
451  * <p><b>多人会议的离开其他用户是不会收到信令层的通知,只能通过媒体层的通知来获取用户离开 {@link AVChatStateObserverLite#onUserLeave(String, int)}。</b></p>
452  *
453  * @param roomName 房间名
454  * @param callback 离开房间的回调接口
455  * @see AVChatManagerLite#createRoom(String, String, AVChatCallback)
456  * @see AVChatManagerLite#joinRoom2(String, AVChatType, AVChatCallback)
457  */
458  public abstract void leaveRoom2(String roomName,
459  AVChatCallback<Void> callback);
460 
461 
462  /**
463  * <p>通用信令消息发送</p>
464  *
465  * <p>在通话过程中, 你可以发送信令消息通知到房间内的其他用户。
466  * 当用户注册了 {@link AVChatManagerLite#observeControlNotification(Observer, boolean)} 监听器后都会
467  * 收到你发送的信令消息。</p>
468  *
469  * <p>SDK内部定义了一些通用信令,参考 {@link AVChatControlCommand}, 通过这些信令能够实现 正忙发送, 音视频通话模式切换等常用功能。
470  * 如果你需要实现属于自己的信令, 可以在 {@link AVChatControlCommand#NOTIFY_CUSTOM_BASE} 基础上去定义自己的信令。</p>
471  *
472  * <p><b>信令的发送和接收仅仅是消息的透传, 它不会影响SDK内部任何逻辑。如果你需要对接收到的指令进行响应, 请调用相关其他引擎接口。</b></p>
473  *
474  * @param chatId 会话ID
475  * @param controlCommand 控制命令值
476  * @param callback 回调函数
477  * @see AVChatControlCommand
478  */
479  public abstract void sendControlCommand(long chatId,
480  byte controlCommand,
481  AVChatCallback<Void> callback);
482 
483 
484  /**
485  * <p>获取当前会话ID</p>
486  *
487  * <p>每通会话都会有一个唯一的ID, 同时SDK仅同时允许一通会话进行。 如果当前有会话正在进行,通过此接口能获取到其会话ID。
488  * 在 {@link AVChatManagerLite#call2(String, AVChatType, AVChatNotifyOption, AVChatCallback)}
489  * {@link AVChatManagerLite#accept2(long, AVChatCallback)} 接口成功回调时会告知用户当前会话ID。</p>
490  *
491  * @return 返回当前正在进行的会话ID
492  */
493  public abstract long getCurrentChatId();
494 
495 
496  /**
497  * 通过account 获取 uid
498  *
499  * @return account 对应的uid ,或者 null (不在频道中)
500  */
501  public abstract Long getUidByAccount(String account);
502 
503  /**
504  * <p>语音通话模式设置</p>
505  *
506  * <p>在通话前可以设置本次通话的语音模式, 目前支持两种种语音模式。
507  * <ul>
508  * <li>{@link AVChatChannelProfile#CHANNEL_PROFILE_DEFAULT} 默认语音通话模式</li>
509  * <li>{@link AVChatChannelProfile#CHANNEL_PROFILE_HIGH_QUALITY_MUSIC} 高清音乐模式</li>
510  * </ul>
511  * </p>
512  * <p>
513  * 注意:高清音乐模式仅限耳机场景下使用 , 其他场景可能导致音频质量不佳
514  *
515  * @param profile 通话场景.
516  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
517  * @see AVChatChannelProfile
518  */
519  public abstract boolean setChannelProfile(int profile);
520 
521 
522  /**
523  * <p>视频质量调整策略设置</p>
524  *
525  * <p>目前视频调整支持三种模式:
526  * <ul>
527  * <li>清晰优先。 在此模式下会优先保证视频的清晰度, 网络不稳定时会优先降低帧率来保证视频的清晰度</li>
528  * <li>流畅优先。 在此模式下会优先保证视频的流畅度, 网络不稳定是会优先降低视频分辨率来保证视频的流程度</li>
529  * <li>录屏模式。 在此模式下会保持分辨率不变, 初始码率较低,IP帧比例增大</li>
530  * </ul>
531  * </p>
532  *
533  * @param strategy 策略类型 {@link AVChatVideoQualityStrategy}
534  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
535  * @see AVChatVideoQualityStrategy
536  */
537  public abstract boolean setVideoQualityStrategy(int strategy);
538 
539 
540  /**
541  * <p>设置视频数据源</p>
542  *
543  * <p>在进行视频通话时需要设置一个可用的视频数据源,该方法需要在{@link AVChatManager#startVideoPreview()}前调用。
544  * 目前SDK支持多种视频数据源:
545  * <ul>
546  * <li>摄像头数据源。通过手机摄像头采集视频画面,可以使用{@link AVChatVideoCapturerFactory#createCameraPolicyCapturer(boolean)}创建一个摄像头数据源。</li>
547  * <li>外部数据源。 可以自定义视频数据源,仅需实现{@link AVChatExternalVideoCapturer}。</li>
548  * </ul>
549  * </p>
550  *
551  * @param videoCapturer 视频数据源
552  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
553  * @see AVChatCameraCapturer
554  * @see AVChatVideoCapturerFactory#createCameraPolicyCapturer(boolean)
555  * @see AVChatExternalVideoCapturer
556  */
557  public abstract boolean setupVideoCapturer(AVChatVideoCapturer videoCapturer);
558 
559 
560  /**
561  * <p>开启本地视频预览</p>
562  *
563  * <p>开启视频预览前需要调用 {@link AVChatManager#enableVideo()} 打开视频模块,同时设置视频数据源 {@link AVChatManagerLite#setupVideoCapturer(AVChatVideoCapturer)}。
564  * 如果需要绘制视频内容需要调用 {@link AVChatManager#setupLocalVideoRender(IVideoRender, boolean, int)} 设置本地预览画布。</p>
565  *
566  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
567  */
568  public abstract boolean startVideoPreview();
569 
570 
571  /**
572  * <p>关闭本地视频预览</p>
573  *
574  * <p>在视频通话时,可以随时调用视频画面预览。调用此方法后,视频本地预览和视频数据发送都会停止。</p>
575  *
576  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
577  */
578  public abstract boolean stopVideoPreview();
579 
580 
581  /**
582  * 设置参数。
583  * 参数类型参考 {@link AVChatParameters.Key#type()}。
584  * 参数可设置时机参考 {@link AVChatParameters.Key#runtime()},支持 {@code runtime} 代表通话过程中可操作,不支持则仅能通话前操作。
585  * 参数是否可设置参考 {@link AVChatParameters.Key#writable()}, 支持 {@code writable} 代表能够设置参数值,不支持则仅能获取参数值。
586  *
587  * @param params 设置参数
588  * @throws IllegalArgumentException 参数值非法或者参数不支持运行时设置
589  * @see AVChatParameters
590  * @see AVChatParameters.Key
591  * @see AVChatMediaCodecMode
592  * @see AVChatAudioEffectMode
593  */
594  public abstract void setParameters(AVChatParameters params) throws IllegalArgumentException;
595 
596  /**
597  * 设置参数。
598  * 参数类型参考 {@link AVChatParameters.Key#type()}。
599  * 参数可设置时机参考 {@link AVChatParameters.Key#runtime()},支持 {@code runtime} 代表通话过程中可操作,不支持则仅能通话前操作。
600  * 参数是否可设置参考 {@link AVChatParameters.Key#writable()}, 支持 {@code writable} 代表能够设置参数值,不支持则仅能获取参数值。
601  *
602  * @param key 参数Key
603  * @param value 参数值
604  * @param <T> 参数数据类型
605  * @throws IllegalArgumentException 参数值非法或者参数不支持运行时设置
606  * @see AVChatParameters
607  * @see AVChatParameters.Key
608  * @see AVChatMediaCodecMode
609  * @see AVChatAudioEffectMode
610  */
611  public abstract <T> void setParameter(AVChatParameters.Key<T> key, T value) throws IllegalArgumentException;
612 
613  /**
614  * 获取参数。
615  * 参数类型参考 {@link AVChatParameters.Key#type()}。
616  * 参数可设置时机参考 {@link AVChatParameters.Key#runtime()},支持 {@code runtime} 代表通话过程中可操作,不支持则仅能通话前操作。
617  * 参数是否可设置参考 {@link AVChatParameters.Key#writable()}, 支持 {@code writable} 代表能够设置参数值,不支持则仅能获取参数值。
618  *
619  * @param params 需要获取的参数, <code>null</code>则是取所有参数
620  * @return 获取参数
621  * @see AVChatParameters
622  * @see AVChatParameters.Key
623  * @see AVChatMediaCodecMode
624  * @see AVChatAudioEffectMode
625  */
626  public abstract AVChatParameters getParameters(AVChatParameters params);
627 
628  /**
629  * 获取参数。
630  * 参数类型参考 {@link AVChatParameters.Key#type()}。
631  * 参数可设置时机参考 {@link AVChatParameters.Key#runtime()},支持 {@code runtime} 代表通话过程中可操作,不支持则仅能通话前操作。
632  * 参数是否可设置参考 {@link AVChatParameters.Key#writable()}, 支持 {@code writable} 代表能够设置参数值,不支持则仅能获取参数值。
633  *
634  * @param key 参数Key
635  * @param <T> 参数类型
636  * @return 参数值
637  * @see AVChatParameters
638  * @see AVChatParameters.Key
639  * @see AVChatMediaCodecMode
640  * @see AVChatAudioEffectMode
641  */
642  public abstract <T> T getParameter(AVChatParameters.Key<T> key);
643 
644 
645  /**
646  * 本地语音是否静音.
647  *
648  * @return @return {@code true} 本地语音静音,{@code false} 本地语音未静音
649  * @see #muteLocalAudio(boolean)
650  */
651  public abstract boolean isLocalAudioMuted();
652 
653  /**
654  * 是否发送本地视频流数据.
655  *
656  * @return {@code true} 本地视频暂停,{@code false} 本地视频未暂停
657  */
658  public abstract boolean isLocalVideoMuted();
659 
660  /**
661  * 开/关本地音频.
662  *
663  * @param muted {@code true} 静音本地语音,{@code false} 取消本地语音静音
664  */
665  public abstract void muteLocalAudio(boolean muted);
666 
667 
668  /**
669  * 开/关本地视频流的发送.
670  *
671  * @param muted {@code true} 不发送本地视频流,{@code false} 发送本地视频流
672  * @deprecated 使用 {@link AVChatManager#publishVideo()} ()} 、{@link AVChatManager#unpublishVideo()}
673  */
674  @Deprecated
675  public abstract void muteLocalVideo(boolean muted);
676 
677  /**
678  * 是否使用扬声器
679  *
680  * @param enable {@code true} 打开扬声器,{@code false} 关闭扬声器
681  */
682  public abstract void setSpeaker(boolean enable);
683 
684 
685  /**
686  * 扬声器是否打开
687  *
688  * @return {@code true} 扬声器已打开,{@code false} 扬声器未打开
689  */
690  public abstract boolean speakerEnabled();
691 
692 
693  /**
694  * 设置麦克风是否静音
695  *
696  * @param mute 麦克风是否静音
697  */
698  public abstract void setMicrophoneMute(boolean mute);
699 
700 
701  /**
702  * 检查麦克风是否静音
703  *
704  * @return 麦克风是否静音
705  */
706  public abstract boolean isMicrophoneMute();
707 
708 
709  /**
710  * 设置是否允许播放远端用户数据.
711  *
712  * @param account 用户账号
713  * @param muted {@code true} 不解码播放远端语音流,{@code false} 解码播放远端语音流
714  */
715  public abstract void muteRemoteAudio(String account, boolean muted);
716 
717  /**
718  * 设置是否允许播放远端用户数据.
719  *
720  * @param muted {@code true} 不解码播放远端语音流,{@code false} 解码播放远端语音流
721  */
722  public abstract void muteAllRemoteAudio(boolean muted);
723 
724  /**
725  * 设置音频输出设备
726  * 可选设备列表来自此回调 {@link AVChatStateObserverLite#onAudioDeviceChanged}
727  *
728  * @param audioDevice {@link com.netease.nimlib.sdk.avchat.constant.AVChatAudioDevice}
729  */
730  public abstract void selectAudioDevice(int audioDevice);
731 
732  /**
733  * 设置是否允许播放远端用户数据.
734  *
735  * @param account 用户账号
736  * @param muted {@code true} 不解码绘制远端视频流,{@code false} 解码绘制远端视频流
737  * @deprecated 使用 {@link AVChatManager#unsubscribeVideo(String account)} 、{@link AVChatManager#subscribeVideo(String account, int videoType)}
738  */
739  @Deprecated
740  public abstract void muteRemoteVideo(String account, boolean muted);
741 
742 
743  /**
744  * 当前是否关闭用户语音数据播放.
745  *
746  * @param account 用户账号
747  * @return {@code true} 解码播放远端语音流,{@code false} 不解码播放远端语音流
748  */
749  public abstract boolean isRemoteAudioMuted(String account);
750 
751  /**
752  * 当前是否关闭用户语音数据播放.
753  *
754  * @return {@code true} 解码播放远端语音流,{@code false} 不解码播放远端语音流
755  */
756  public abstract boolean isAllRemoteAudioMuted();
757 
758  /**
759  * 当前是否关闭用户视频数据播放.
760  *
761  * @param account 用户账号
762  * @return {@code true} 解码绘制远端视频流,{@code false} 不解码绘制远端视频流
763  */
764  public abstract boolean isRemoteVideoMuted(String account);
765 
766  /**
767  * 设置本地用户视频画布。
768  * <br>如果需要预览,设置自己视频画面的画布需要在call或者joinRoom的onSuccess回调中调用.</br>
769  * <br>如果不需要预览,设置自己视频画面的画布需要在 <code>AVChatStateObserver#onCallEstablished</code> 后调用.</br>
770  *
771  * @param render 画布. {@link AVChatSurfaceViewRenderer}, {@link AVChatExternalVideoRender}, {@link AVChatTextureViewRenderer}
772  * @param mirror 绘制是否镜像, 设置画布为 {@link AVChatSurfaceViewRenderer} 时有效
773  * @param scalingType 绘制模式, 设置画布为 {@link AVChatSurfaceViewRenderer} 时有效
774  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
775  * @see com.netease.nimlib.sdk.avchat.constant.AVChatVideoScalingType
776  */
777  public abstract boolean setupLocalVideoRender(IVideoRender render, boolean mirror, int scalingType);
778 
779  /**
780  * 设置远端用户视频画布。
781  * <br>设置远端用户视频画面的画布需要在 <code>AVChatStateObserver#onUserJoined</code> 后调用.</br>
782  *
783  * @param account 用户账号
784  * @param render 画布, {@link AVChatSurfaceViewRenderer}, {@link AVChatExternalVideoRender}, {@link AVChatTextureViewRenderer}
785  * @param mirror 绘制是否镜像, 设置画布为 {@link AVChatSurfaceViewRenderer} 时有效
786  * @param scalingType 绘制模式, 设置画布为 {@link AVChatSurfaceViewRenderer} 时有效
787  * @return {@code true} 方法调用成功,{@code false} 方法调用失败
788  * @see com.netease.nimlib.sdk.avchat.constant.AVChatVideoScalingType
789  */
790  public abstract boolean setupRemoteVideoRender(String account, IVideoRender render, boolean mirror, int scalingType);
791 
792 
793  /**
794  * 注册/注销网络来电.
795  * 当收到对方来电请求时,会通知上层通话信息。
796  * 用户可以选择 {@link AVChatManager#accept2(long, AVChatCallback)} 来接听电话,
797  * 或者 {@link AVChatManager#hangUp2(long, AVChatCallback)} 来挂断电话。 通常在收到来电请求时,上层需要维持
798  * 一个超时器,当超过一定时间没有操作时直接调用 {@link AVChatManager#hangUp2(long, AVChatCallback)} 来挂断。
799  * <p>
800  * 当用户当前有电话在进行时,如果收到来电请求,需要选择是接听当前电话和是继续原来的通话。如果接听当前来电,则需要
801  * {@link AVChatManager#hangUp2(long, AVChatCallback)} 原来进行的电话,然后 {@link AVChatManager#accept2(long, AVChatCallback)}
802  * 当前来电。 如果选择继续原来的通话,挂断当前来电,最好能够先发送一个正忙的指令给对方 {@link AVChatManager#sendControlCommand(long, byte, AVChatCallback)},
803  * 然后在再挂断 {@link AVChatManager#hangUp2(long, AVChatCallback)} 当前通话。
804  *
805  * @param observer 观察者,参数为被叫通话的基本信息
806  * @param register {@code true} 注册监听,{@code false} 注销监听
807  */
808  public abstract void observeIncomingCall(Observer<AVChatData> observer, boolean register);
809 
810  /**
811  * 注册/注销网络通话状态通知
812  * 网络通话开始后,所有的通话状态通过 {@link AVChatStateObserverLite} 进行通知。
813  *
814  * @param observer 观察者,参数为通话状态回调
815  * @param register {@code true} 注册监听,{@code false} 注销监听
816  */
817  public abstract void observeAVChatState(AVChatStateObserverLite observer, boolean register);
818 
819  /**
820  * 注册/注销网络通话被叫方的响应(接听、拒绝、忙)
821  *
822  * @param observer 观察者, 参数为接收到的网络通话的通知消息
823  * @param register {@code true} 注册监听,{@code false} 注销监听
824  */
825  public abstract void observeCalleeAckNotification(Observer<AVChatCalleeAckEvent> observer, boolean register);
826 
827  /**
828  * 注册/注销同时在线的其他端对主叫方的响应
829  *
830  * @param observer 观察者,参数为同时在线的其他端响应主叫方的同步通知
831  * @param register {@code true} 注册监听,{@code false} 注销监听
832  */
833  public abstract void observeOnlineAckNotification(Observer<AVChatOnlineAckEvent> observer, boolean register);
834 
835  /**
836  * 注册/注销网络通话对方挂断的通知
837  *
838  * @param observer 观察者, 参数为接收到的网络通话的挂断消息
839  * @param register {@code true} 注册监听,{@code false} 注销监听
840  */
841  public abstract void observeHangUpNotification(Observer<AVChatCommonEvent> observer, boolean register);
842 
843 
844  /**
845  * 注册/注销网络通话控制消息(音视频模式切换通知)
846  * <p>
847  * 会话相关的控制指令通知,用户可以自定义私有的控制指令。
848  *
849  * @param observer 观察者, 参数为接收到的网络通话控制消息
850  * @param register {@code true} 注册监听,{@code false} 注销监听
851  */
852  public abstract void observeControlNotification(Observer<AVChatControlEvent> observer, boolean register);
853 
854  /**
855  * 当前通话打分
856  *
857  * @param rate 0~5分
858  * @param description 通话描述信息
859  */
860  public abstract void rate(int rate, String description);
861 
862 }
abstract void createRoom(String roomName, String extraMessage, AVChatCallback< AVChatChannelInfo > callback)
abstract void selectAudioDevice(int audioDevice)
设置音频输出设备 可选设备列表来自此回调 AVChatStateObserverLite#onAudioDeviceChanged ...
abstract boolean setupLocalVideoRender(IVideoRender render, boolean mirror, int scalingType)
设置本地用户视频画布。 如果需要预览,设置自己视频画面的画布需要在call或者joinRoom的onSuccess回调中调...
abstract boolean isLocalVideoMuted()
是否发送本地视频流数据.
abstract void setParameters(AVChatParameters params)
设置参数。 参数类型参考 AVChatParameters.Key#type()。 参数可设置时机参考 AVChatParameters.Key#runtime(),支持
abstract void muteAllRemoteAudio(boolean muted)
设置是否允许播放远端用户数据.
abstract void muteLocalAudio(boolean muted)
开/关本地音频.
abstract void muteRemoteVideo(String account, boolean muted)
设置是否允许播放远端用户数据.
abstract boolean setupRemoteVideoRender(String account, IVideoRender render, boolean mirror, int scalingType)
设置远端用户视频画布。 设置远端用户视频画面的画布需要在 AVChatStateObserver::onUserJoined 后调用...
abstract void observeHangUpNotification(Observer< AVChatCommonEvent > observer, boolean register)
注册/注销网络通话对方挂断的通知
abstract boolean setVideoQualityStrategy(int strategy)
abstract void observeControlNotification(Observer< AVChatControlEvent > observer, boolean register)
注册/注销网络通话控制消息(音视频模式切换通知)
abstract void rate(int rate, String description)
当前通话打分
abstract void setSpeaker(boolean enable)
是否使用扬声器
引擎初始化的一些自定义配置,使用Builder 去构造
abstract void sendControlCommand(long chatId, byte controlCommand, AVChatCallback< Void > callback)
abstract boolean setupVideoCapturer(AVChatVideoCapturer videoCapturer)
abstract void observeAVChatState(AVChatStateObserverLite observer, boolean register)
注册/注销网络通话状态通知 网络通话开始后,所有的通话状态通过 AVChatStateObserverLite 进行通知。 ...
abstract void muteRemoteAudio(String account, boolean muted)
设置是否允许播放远端用户数据.
abstract void observeCalleeAckNotification(Observer< AVChatCalleeAckEvent > observer, boolean register)
注册/注销网络通话被叫方的响应(接听、拒绝、忙)
abstract boolean isAllRemoteAudioMuted()
当前是否关闭用户语音数据播放.
abstract void observeOnlineAckNotification(Observer< AVChatOnlineAckEvent > observer, boolean register)
注册/注销同时在线的其他端对主叫方的响应
abstract void hangUp2(long chatId, AVChatCallback< Void > callback)
abstract void observeIncomingCall(Observer< AVChatData > observer, boolean register)
注册/注销网络来电.
abstract boolean isRemoteVideoMuted(String account)
当前是否关闭用户视频数据播放.
abstract boolean isLocalAudioMuted()
本地语音是否静音.
abstract void call2(String account, AVChatType callType, AVChatNotifyOption notifyOption, AVChatCallback< AVChatData > callback)
abstract boolean setChannelProfile(int profile)
abstract void muteLocalVideo(boolean muted)
开/关本地视频流的发送.
abstract void joinRoom2(String roomName, final AVChatType callType, AVChatCallback< AVChatData > callback)
abstract Long getUidByAccount(String account)
通过account 获取 uid
继承该类,实现自定义外部视频数据输入
abstract void leaveRoom2(String roomName, AVChatCallback< Void > callback)
abstract void accept2(long chatId, AVChatCallback< Void > callback)
网络通话控制命令(音视频开关及模式切换枚举)
abstract boolean isRemoteAudioMuted(String account)
当前是否关闭用户语音数据播放.
可选设置项, 可以获取参数是否支持可设置,以及参数是否能够在通话过程中进行操作
abstract< T > void setParameter(AVChatParameters.Key< T > key, T value)
设置参数。 参数类型参考 AVChatParameters.Key#type()。 参数可设置时机参考 AVChatParameters.Key#runtime(),支持
abstract< T > T getParameter(AVChatParameters.Key< T > key)
获取参数。 参数类型参考 AVChatParameters.Key#type()。 参数可设置时机参考 AVChatParameters.Key#runtime(),支持
abstract AVChatParameters getParameters(AVChatParameters params)
获取参数。 参数类型参考 AVChatParameters.Key#type()。 参数可设置时机参考 AVChatParameters.Key#runtime(),支持
abstract boolean isMicrophoneMute()
检查麦克风是否静音
编解码模式,主要用来区分软件编解码和硬件编解码
abstract void setMicrophoneMute(boolean mute)
设置麦克风是否静音
abstract boolean speakerEnabled()
扬声器是否打开