NIMSDK-AOS  9.19.0
AVChatParameters.java
浏览该文件的文档.
1 /*
2  * Copyright (c) 2014-2018 NetEase, Inc.
3  * All right reserved.
4  */
5 
6 package com.netease.nimlib.sdk.avchat.model;
7 
8 import android.view.Surface;
9 
25 import com.netease.yunxin.base.annotation.IntDef;
26 import com.netease.yunxin.base.annotation.Runtime;
27 import com.netease.yunxin.base.annotation.StringDef;
28 import com.netease.yunxin.base.annotation.Writable;
29 import com.netease.nrtc.engine.rawapi.RtcKey;
30 import com.netease.nrtc.engine.rawapi.RtcParameters;
31 import com.netease.nrtc.sdk.common.VideoFilterParameter;
32 import com.netease.nrtc.sdk.video.VideoFrame;
33 
34 import java.io.Serializable;
35 import java.util.HashSet;
36 import java.util.List;
37 import java.util.Map;
38 import java.util.Set;
39 
56 
57 
58 /**
59  * <p>网络通话可选项</p>
60  * <p><b>每个参数包含以下几个重要方面:</b>
61  * <ul>
62  * <li>Possible values: 参数可设置值。</li>
63  * <li>Writable: 参数是否可设置,所有参数支持可读。</li>
64  * <li>Runtime: 参数是否支持运行时设置,调用相关发起通话,接听通话后即代表运行时。</li>
65  * <li>Compatibility: 兼容性提示。</li>
66  * <li>Labs: 实验功能</li>
67  * <li>Units: 参数值单位</li>
68  * <li>Range of valid values: 参数可设置值范围。</li>
69  * </ul></p>
70  */
71 public class AVChatParameters {
72 
73 
74  /**
75  * 可选设置项, 可以获取参数是否支持可设置,以及参数是否能够在通话过程中进行操作
76  */
77  public static class Key<T> implements Serializable {
78 
79  private final RtcKey<T> mKey;
80  private final boolean mWritable;
81  private final boolean mRuntime;
82 
83 // /**
84 // * @param name 参数名
85 // */
86 // public Key(final String name) {
87 // ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();
88 // Type type = thisType.getActualTypeArguments()[0];
89 // mKey = new RtcKey<>(name, (Class<T>) type);
90 // mWritable = RtcParameters.writeSupported(name);
91 // mRuntime = RtcParameters.runtimeSupported(name);
92 // }
93 
94  Key(final String name, Class<T> clazz) {
95  mKey = new RtcKey<>(name, clazz);
96  mWritable = RtcParameters.writeSupported(name);
97  mRuntime = RtcParameters.runtimeSupported(name);
98  }
99 
100 
101  private static class SpecializedKey<T> extends Key<T> {
102  SpecializedKey(String name, Class<T> clazz) {
103  super(name, clazz);
104  }
105  }
106 
107 
108  /**
109  * 创建特殊Key
110  *
111  * @param name 参数名
112  * @return Key
113  */
114  public static Key<?> createSpecializedKey(final String name) {
115  Class<?> clazz = RtcParameters.getKeyType(name);
116  if (clazz == null) {
117  throw new IllegalArgumentException(
118  "Key " + name + " unsupported!");
119  }
120  return new SpecializedKey<>(name, clazz);
121  }
122 
123  /**
124  * 参数名
125  *
126  * @return 返回实际的参数名
127  */
128  public String name() {
129  return mKey.getName();
130  }
131 
132  /**
133  * 是否支持通话过程中设置
134  *
135  * @return {@code true} 支持
136  */
137  public boolean runtime() {
138  return mRuntime;
139  }
140 
141  /**
142  * 参数是否支持可写,默认所有参数都支持可读
143  *
144  * @return {@code true} 可写
145  */
146  public boolean writable() {
147  return mWritable;
148  }
149 
150 
151  /**
152  * 参数支持的数据类型
153  *
154  * @return 数据类型
155  */
156  public final Class<T> type() {
157  return mKey.getType();
158  }
159 
160  /**
161  * {@inheritDoc}
162  */
163  @Override
164  public final int hashCode() {
165  return mKey.hashCode();
166  }
167 
168  /**
169  * {@inheritDoc}
170  */
171  @SuppressWarnings("unchecked")
172  @Override
173  public final boolean equals(Object o) {
174  return o instanceof Key && ((Key<T>) o).mKey.equals(mKey);
175  }
176 
177  /**
178  * {@inheritDoc}
179  */
180  @Override
181  public String toString() {
182  return String.format("Key(Name:%s, Type:%s, Writable:%s, Runtime:%s)", name(), type(), writable(), runtime());
183  }
184 
185  }
186 
187 
188  /**
189  * <p>默认情况下设备顺时针旋转角度, 某些特殊设备在默认情况下无法获取到设备方向,可指定默认的设备角度。</p>
190  *
191  * <p>当一个设备水平放置时,它当前的角度是未定义的。 如果一个设备的工作环境永远是水平放置的,那么需要为它制定一个默认的旋转角度。</p>
192  *
193  * <p><b>Possible values:</b>
194  * <ul>
195  * <li>{@link Surface#ROTATION_0 ROTATION_0}</li>
196  * <li>{@link Surface#ROTATION_90 ROTATION_90}</li>
197  * <li>{@link Surface#ROTATION_180 ROTATION_180}</li>
198  * <li>{@link Surface#ROTATION_270 ROTATION_270}</li>
199  * </ul></p>
200  *
201  * <p><b>Writable:</b> {@code true}</p>
202  * <p><b>Runtime:</b> {@code false}</p>
203  *
204  * @see Surface#ROTATION_0
205  * @see Surface#ROTATION_90
206  * @see Surface#ROTATION_180
207  * @see Surface#ROTATION_270
208  */
209  @Writable
210  @IntDef({Surface.ROTATION_0,
211  Surface.ROTATION_90,
212  Surface.ROTATION_180,
213  Surface.ROTATION_270})
214  public static final Key<Integer> KEY_DEVICE_DEFAULT_ROTATION = new Key<>(RtcParameters.KEY_DEVICE_DEFAULT_ROTATION, Integer.class);
215 
216 
217  /**
218  * <p>设备旋转角度修正偏移量。</p>
219  *
220  * <p>如果存在SDK内部获取的角度和设备实际角度总是存在同样的误差,那么可以这只一个修正偏移量。主要存在一个定制设备有此类问题,大部分手机平板不需要关注此参数。</p>
221  *
222  * <p><b>Possible values:</b>
223  * <ul>
224  * <li>{@link Surface#ROTATION_0 ROTATION_0}</li>
225  * <li>{@link Surface#ROTATION_90 ROTATION_90}</li>
226  * <li>{@link Surface#ROTATION_180 ROTATION_180}</li>
227  * <li>{@link Surface#ROTATION_270 ROTATION_270}</li>
228  * </ul></p>
229  *
230  * <p><b>Writable:</b> {@code true}</p>
231  * <p><b>Runtime:</b> {@code false}</p>
232  *
233  * @see Surface#ROTATION_0
234  * @see Surface#ROTATION_90
235  * @see Surface#ROTATION_180
236  * @see Surface#ROTATION_270
237  */
238  @Writable
239  @IntDef({Surface.ROTATION_0,
240  Surface.ROTATION_90,
241  Surface.ROTATION_180,
242  Surface.ROTATION_270})
243  public static final Key<Integer> KEY_DEVICE_ROTATION_FIXED_OFFSET = new Key<>(RtcParameters.KEY_DEVICE_ROTATION_FIXED_OFFSET, Integer.class);
244 
245 
246  /**
247  * <p>视频硬件编码模式。</p>
248  *
249  * <p>目前仅支持高通CPU系列的硬件编码,如果设备不支持硬件编码,设置硬件编码后会自动回滚到软件编码模式。</p>
250  *
251  * <p><b>Possible values:</b>
252  * <ul>
253  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_AUTO MEDIA_CODEC_AUTO}</li>
254  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_HARDWARE MEDIA_CODEC_HARDWARE}</li>
255  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_SOFTWARE MEDIA_CODEC_SOFTWARE}</li>
256  * </ul></p>
257  *
258  * <p><b>Writable:</b> {@code true}</p>
259  * <p><b>Runtime:</b> {@code true}</p>
260  * <p><b>Compatibility</b> - 存在设备兼容性问题,部分设备已加入黑名单。</p>
261  *
262  * @see AVChatMediaCodecMode#MEDIA_CODEC_AUTO
263  * @see AVChatMediaCodecMode#MEDIA_CODEC_HARDWARE
264  * @see AVChatMediaCodecMode#MEDIA_CODEC_SOFTWARE
265  */
266  @Runtime
267  @Writable
268  @StringDef({MEDIA_CODEC_AUTO,
269  MEDIA_CODEC_HARDWARE,
270  MEDIA_CODEC_SOFTWARE})
271  public static final Key<String> KEY_VIDEO_ENCODER_MODE = new Key<>(RtcParameters.KEY_VIDEO_ENCODER_MODE, String.class);
272 
273 
274  /**
275  * <p>视频硬件解码模式。</p>
276  *
277  * <p>目前仅支持高通CPU系列的硬件解码,如果设备不支持硬件解码,设置硬件解码后会自动回滚到软件解码模式。</p>
278  *
279  * <p><b>Possible values:</b>
280  * <ul>
281  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_AUTO MEDIA_CODEC_AUTO}</li>
282  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_HARDWARE MEDIA_CODEC_HARDWARE}</li>
283  * <li>{@link AVChatMediaCodecMode#MEDIA_CODEC_SOFTWARE MEDIA_CODEC_SOFTWARE}</li>
284  * </ul></p>
285  *
286  * <p><b>Writable:</b> {@code true}</p>
287  * <p><b>Runtime:</b> {@code true}</p>
288  * <p><b>Compatibility</b> - 存在设备兼容性问题,部分设备已加入黑名单。</p>
289  *
290  * @see AVChatMediaCodecMode#MEDIA_CODEC_AUTO
291  * @see AVChatMediaCodecMode#MEDIA_CODEC_HARDWARE
292  * @see AVChatMediaCodecMode#MEDIA_CODEC_SOFTWARE
293  */
294  @Runtime
295  @Writable
296  @StringDef({MEDIA_CODEC_AUTO,
297  MEDIA_CODEC_HARDWARE,
298  MEDIA_CODEC_SOFTWARE})
299  public static final Key<String> KEY_VIDEO_DECODER_MODE = new Key<>(RtcParameters.KEY_VIDEO_DECODER_MODE, String.class);
300 
301 
302  /**
303  * <p>获取系统是否支持硬件编码。</p>
304  *
305  * <p>目前仅支持高通CPU系列的硬件编码。</p>
306  *
307  * <p><b>Writable:</b> {@code false}</p>
308  * <p><b>Runtime:</b> {@code true}</p>
309  * <p><b>Compatibility</b> - 存在设备兼容性问题,部分设备已加入黑名单。</p>
310  */
311  @Runtime
312  public static final Key<Boolean> KEY_VIDEO_SUPPORTED_HW_ENCODER = new Key<>(RtcParameters.KEY_VIDEO_SUPPORTED_HW_ENCODER, Boolean.class);
313 
314 
315  /**
316  * <p>获取系统是否支持硬件解码。</p>
317  *
318  * <p>目前仅支持高通CPU系列的硬件解码。</p>
319  *
320  * <p><b>Writable:</b> {@code false}</p>
321  * <p><b>Runtime:</b> {@code true}</p>
322  * <p><b>Compatibility</b> - 存在设备兼容性问题,部分设备已加入黑名单。</p>
323  */
324  @Runtime
325  public static final Key<Boolean> KEY_VIDEO_SUPPORTED_HW_DECODER = new Key<>(RtcParameters.KEY_VIDEO_SUPPORTED_HW_DECODER, Boolean.class);
326 
327 
328  /**
329  * <p>语音前处理,降噪,用来消除语音通话的背景噪音。</p>
330  *
331  * <p>目前支持内置软件语音处理和设备硬件语音处理,SDK默认优先采用设备硬件语音处理。如果有很特殊的使用场景,也可以选择关闭语音处理。</p>
332  *
333  * <p>不是所有的设备都支持硬件语音处理,对不支持硬件语音处理的设备采用优先硬件语音处理会自动回滚到软件语音处理。</p>
334  *
335  * <p><b>Possible values:</b>
336  * <ul>
337  * <li>{@link AVChatAudioEffectMode#DISABLE DISABLE}</li>
338  * <li>{@link AVChatAudioEffectMode#PLATFORM_BUILTIN PLATFORM_BUILTIN}</li>
339  * <li>{@link AVChatAudioEffectMode#SDK_BUILTIN SDK_BUILTIN}</li>
340  * </ul></p>
341  *
342  * <p><b>Writable:</b> {@code true}</p>
343  * <p><b>Runtime:</b> {@code false}</p>
344  * <p><b>Compatibility</b> - 部分设备标记支持硬件语音处理,但是实际没有硬件语音处理。 部分设备的硬件语音处理效果很差,需要切换到软件语音处理。</p>
345  *
346  * @see AVChatAudioEffectMode#DISABLE
347  * @see AVChatAudioEffectMode#PLATFORM_BUILTIN
348  * @see AVChatAudioEffectMode#SDK_BUILTIN
349  */
350  @Writable
351  @StringDef({DISABLE,
352  PLATFORM_BUILTIN,
353  SDK_BUILTIN})
354  public static final Key<String> KEY_AUDIO_EFFECT_NOISE_SUPPRESSOR = new Key<>(RtcParameters.KEY_AUDIO_EFFECT_NOISE_SUPPRESSOR, String.class);
355 
356 
357  /**
358  * <p>语音处理, 自动增益</p>
359  *
360  * <p><b>Possible values:</b>
361  * <ul>
362  * <li>{@link AVChatAudioEffectMode#DISABLE DISABLE}</li>
363  * <li>{@link AVChatAudioEffectMode#PLATFORM_BUILTIN PLATFORM_BUILTIN}</li>
364  * <li>{@link AVChatAudioEffectMode#SDK_BUILTIN SDK_BUILTIN}</li>
365  * </ul></p>
366  *
367  * <p><b>Writable:</b> {@code true}</p>
368  * <p><b>Runtime:</b> {@code false}</p>
369  *
370  * @see AVChatAudioEffectMode#DISABLE
371  * @see AVChatAudioEffectMode#PLATFORM_BUILTIN
372  * @see AVChatAudioEffectMode#SDK_BUILTIN
373  */
374  @Writable
375  @StringDef({DISABLE,
376  PLATFORM_BUILTIN,
377  SDK_BUILTIN})
378  public static final Key<String> KEY_AUDIO_EFFECT_AUTOMATIC_GAIN_CONTROL = new Key<>(RtcParameters.KEY_AUDIO_EFFECT_AUTOMATIC_GAIN_CONTROL, String.class);
379 
380 
381  /**
382  * <p>语音前处理,回音抑制, 用来消除语音通话的回音。</p>
383  *
384  * <p>目前支持内置软件语音处理和设备硬件语音处理,SDK默认优先采用设备硬件语音处理。如果有很特殊的使用场景,也可以选择关闭语音处理。</p>
385  *
386  * <p>不是所有的设备都支持硬件语音处理,对不支持硬件语音处理的设备采用优先硬件语音处理会自动回滚到软件语音处理。</p>
387  *
388  * <p><b>Possible values:</b>
389  * <ul>
390  * <li>{@link AVChatAudioEffectMode#DISABLE DISABLE}</li>
391  * <li>{@link AVChatAudioEffectMode#PLATFORM_BUILTIN PLATFORM_BUILTIN}</li>
392  * <li>{@link AVChatAudioEffectMode#SDK_BUILTIN SDK_BUILTIN}</li>
393  * </ul></p>
394  *
395  * <p><b>Writable:</b> {@code true}</p>
396  * <p><b>Runtime:</b> {@code false}</p>
397  * <p><b>Compatibility</b> - 部分设备标记支持硬件语音处理,但是实际没有硬件语音处理。 部分设备的硬件语音处理效果很差,需要切换到软件语音处理。</p>
398  *
399  * @see AVChatAudioEffectMode#DISABLE
400  * @see AVChatAudioEffectMode#PLATFORM_BUILTIN
401  * @see AVChatAudioEffectMode#SDK_BUILTIN
402  */
403  @Writable
404  @StringDef({DISABLE,
405  PLATFORM_BUILTIN,
406  SDK_BUILTIN})
407  public static final Key<String> KEY_AUDIO_EFFECT_ACOUSTIC_ECHO_CANCELER = new Key<>(RtcParameters.KEY_AUDIO_EFFECT_ACOUSTIC_ECHO_CANCELER, String.class);
408 
409 
410  /**
411  * <p>是否允许语音通话时开启距离传感器。</p>
412  *
413  * <p>在语音通话时,如果开启距离传感器,当检测到手机听筒贴近人脸会自动黑掉屏幕。视频通话时会自动仅用距离传感器。</p>
414  *
415  * <p><b>Writable:</b> {@code true}</p>
416  * <p><b>Runtime:</b> {@code false}</p>
417  */
418  @Writable
419  public static final Key<Boolean> KEY_AUDIO_CALL_PROXIMITY = new Key<>(RtcParameters.KEY_AUDIO_CALL_PROXIMITY, Boolean.class);
420 
421 
422  /**
423  * <p>视频清晰度。</p>
424  *
425  * <p>在视频通话时,可以设置你期望的视频发送分辨率。
426  * 实际采集分辨率和你设置的会有一定的区别, 对于{@code 720P} 可能存在 {@code 960x720} 或者 {@code 1280x720}。
427  * 更极端的情况下,设备摄像头不支持采集某一档次的清晰度,会自动降低到下一档次。实际采用的清晰度级别可以通过此参数获取。</p>
428  *
429  * <p><b>Possible values:</b>
430  * <ul>
431  * <li>{@link AVChatVideoQuality#QUALITY_DEFAULT QUALITY_DEFAULT}</li>
432  * <li>{@link AVChatVideoQuality#QUALITY_LOW QUALITY_LOW}</li>
433  * <li>{@link AVChatVideoQuality#QUALITY_MEDIUM QUALITY_MEDIUM}</li>
434  * <li>{@link AVChatVideoQuality#QUALITY_HIGH QUALITY_HIGH}</li>
435  * <li>{@link AVChatVideoQuality#QUALITY_480P QUALITY_480P}</li>
436  * <li>{@link AVChatVideoQuality#QUALITY_540P QUALITY_540P}</li>
437  * <li>{@link AVChatVideoQuality#QUALITY_720P QUALITY_720P}</li>
438  * </ul></p>
439  *
440  * <p><b>Writable:</b> {@code true}</p>
441  * <p><b>Runtime:</b> {@code true}</p>
442  * <p><b>Compatibility</b> - 部分设置不能支持所有档次的清晰度</p>
443  */
444  @Writable
445  @Runtime
453  public static final Key<Integer> KEY_VIDEO_QUALITY = new Key<>(RtcParameters.KEY_VIDEO_QUALITY, Integer.class);
454 
455 
456  /**
457  * <p>设置视频预览清晰度。</p>
458  *
459  * <p>如果设置的分辨率小于KEY_VIDEO_QUALITY , 那么无效 ,设置 QUALITY_DEFAULT 与不设置一样 ,默认为 QUALITY_DEFAULT( 预览跟随KEY_VIDEO_QUALITY ) <br/>
460  * 实际预览分辨率和你设置的会有一定的区别, 对于{@code 720P} 可能存在 {@code 960x720} 或者 {@code 1280x720}。
461  * 更极端的情况下,设备摄像头不支持采集某一档次的清晰度,会自动降低到下一档次。</p>
462  *
463  * <p>注意: 如果设置了预览清晰度 ,那么设备摄像头采集的清晰度将以预览清晰度为标准,这可能导致最终发送分辨率有额外的缩放</p>
464  *
465  * <p><b>Possible values:</b>
466  * <ul>
467  * <li>{@link AVChatVideoQuality#QUALITY_DEFAULT QUALITY_DEFAULT(与不设置的效果一样)}</li>
468  * <li>{@link AVChatVideoQuality#QUALITY_LOW QUALITY_LOW}</li>
469  * <li>{@link AVChatVideoQuality#QUALITY_MEDIUM QUALITY_MEDIUM}</li>
470  * <li>{@link AVChatVideoQuality#QUALITY_HIGH QUALITY_HIGH}</li>
471  * <li>{@link AVChatVideoQuality#QUALITY_480P QUALITY_480P}</li>
472  * <li>{@link AVChatVideoQuality#QUALITY_540P QUALITY_540P}</li>
473  * <li>{@link AVChatVideoQuality#QUALITY_720P QUALITY_720P}</li>
474  * </ul></p>
475  *
476  * <p><b>Writable:</b> {@code true}</p>
477  * <p><b>Runtime:</b> {@code true}</p>
478  * <p><b>Compatibility</b> - 部分设置不能支持所有档次的清晰度</p>
479  */
480  @Writable
481  @Runtime
489  public static final Key<Integer> KEY_VIDEO_PREVIEW_QUALITY = new Key<>(RtcParameters.KEY_VIDEO_PREVIEW_QUALITY, Integer.class);
490 
491 
492  /**
493  * <p>视频绘制时自动旋转。</p>
494  *
495  * <p>视频绘制时会结合对方发送的画面角度,自己设备当前的角度以及当前视图布局的角度来旋转画面,让画面在任何情况下相对于自己都是正方向。</p>
496  *
497  * <p><b>Writable:</b> {@code true}</p>
498  * <p><b>Runtime:</b> {@code true}</p>
499  */
500  @Writable
501  @Runtime
502  public static final Key<Boolean> KEY_VIDEO_ROTATE_IN_RENDING = new Key<>(RtcParameters.KEY_VIDEO_ROTATE_IN_RENDING, Boolean.class);
503 
504 
505  /**
506  * <p>多人模式下用户角色设定。</p>
507  *
508  * <p>普通模式下,允许发送和接收数据。当切换到观众模式时,自己仅接收数据,不再发送数据。</p>
509  *
510  *
511  * <p><b>Possible values:</b>
512  * <ul>
513  * <li>{@link AVChatUserRole#AUDIENCE AUDIENCE}</li>
514  * <li>{@link AVChatUserRole#NORMAL NORMAL}</li>
515  * </ul></p>
516  *
517  * <p><b>Writable:</b> {@code true}</p>
518  * <p><b>Runtime:</b> {@code true}</p>
519  *
520  * @see AVChatUserRole#AUDIENCE
521  * @see AVChatUserRole#NORMAL
522  */
523  @Runtime
524  @Writable
526  public static final Key<Integer> KEY_SESSION_MULTI_MODE_USER_ROLE = new Key<>(RtcParameters.KEY_SESSION_MULTI_MODE_USER_ROLE, Integer.class);
527 
528 
529  /**
530  * <p>视频帧率汇报。</p>
531  *
532  * <p>每2秒会汇报本地预览帧率和对方画面预览帧率。帧率通过 {@link AVChatStateObserver#onVideoFpsReported(String, int)} 上报。</p>
533  *
534  *
535  * <p><b>Writable:</b> {@code true}</p>
536  * <p><b>Runtime:</b> {@code true}</p>
537  *
538  * @see AVChatStateObserver#onVideoFpsReported(String, int)
539  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
540  */
541  @Runtime
542  @Writable
543  public static final Key<Boolean> KEY_VIDEO_FPS_REPORTED = new Key<>(RtcParameters.KEY_VIDEO_FPS_REPORTED, Boolean.class);
544 
545 
546  /**
547  * <p>视频最大码率。</p>
548  *
549  * <p>设置视频流的最大码率,码率需要结合分辨率来设置,不能设置过小。</p>
550  *
551  * <p><b>Writable:</b> {@code true}</p>
552  * <p><b>Runtime:</b> {@code true}</p>
553  * <p><b>Units:</b> bit per seconds(bps)</p>
554  * <p><b>Range of valid values:</b> &gt;0 , &lt;5Mbps</p>
555  */
556  @Runtime
557  @Writable
558  public static final Key<Integer> KEY_VIDEO_MAX_BITRATE = new Key<>(RtcParameters.KEY_VIDEO_MAX_BITRATE, Integer.class);
559 
560  /**
561  * <p>视频帧率。</p>
562  *
563  * <p>设置视频画面期望帧率,由于设备限制,性能等问题可能存在实际帧率和期望帧率不一致。</p>
564  *
565  * <p><b>Possible values:</b>
566  * <ul>
567  * <li>{@link AVChatVideoFrameRate#FRAME_RATE_5 FRAME_RATE_5}</li>
568  * <li>{@link AVChatVideoFrameRate#FRAME_RATE_10 FRAME_RATE_10}</li>
569  * <li>{@link AVChatVideoFrameRate#FRAME_RATE_15 FRAME_RATE_15}</li>
570  * <li>{@link AVChatVideoFrameRate#FRAME_RATE_20 FRAME_RATE_20}</li>
571  * <li>{@link AVChatVideoFrameRate#FRAME_RATE_25 FRAME_RATE_25}</li>
572  * </ul></p>
573  * <p><b>Writable:</b> {@code true}</p>
574  * <p><b>Runtime:</b> {@code true}</p>
575  * <p><b>Units:</b> Frames per second (FPS)</p>
576  *
577  * @see AVChatVideoFrameRate#FRAME_RATE_5
578  * @see AVChatVideoFrameRate#FRAME_RATE_10
579  * @see AVChatVideoFrameRate#FRAME_RATE_15
580  * @see AVChatVideoFrameRate#FRAME_RATE_20
581  * @see AVChatVideoFrameRate#FRAME_RATE_25
582  */
583  @Writable
584  @Runtime
585  @IntDef({FRAME_RATE_5,
586  FRAME_RATE_10,
587  FRAME_RATE_15,
588  FRAME_RATE_20,
589  FRAME_RATE_25})
590  public static final Key<Integer> KEY_VIDEO_FRAME_RATE = new Key<>(RtcParameters.KEY_VIDEO_FRAME_RATE, Integer.class);
591 
592 
593  /**
594  * <p>视频数据预处理。</p>
595  *
596  * <p>通过此回调,外部可实现视频数据的预处理。目前提供数据格式为 {@link android.graphics.ImageFormat#NV21},
597  * 数据通过 {@link AVChatStateObserver#onVideoFrameFilter(AVChatVideoFrame, boolean)} 传递给上层,外部需要同步处理此数据。
598  * 目前数据回调所在线程不具备 {@link android.opengl.EGLContext} 上下文环境。</p>
599  *
600  * <p><b>Writable:</b> {@code true}</p>
601  * <p><b>Runtime:</b> {@code true}</p>
602  *
603  * @see AVChatStateObserver#onVideoFrameFilter(AVChatVideoFrame, boolean)
604  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
605  */
606  @Writable
607  @Runtime
608  public static final Key<Boolean> KEY_VIDEO_FRAME_FILTER = new Key<>(RtcParameters.KEY_VIDEO_FRAME_FILTER, Boolean.class);
609 
610 
611  /**
612  * <p>视频数据预处理。</p>
613  *
614  * <p>通过此回调,外部可实现视频数据的预处理。目前提供数据格式为 {@link android.graphics.ImageFormat#NV21,android.graphics.ImageFormat#I420,#GLES11Ext.GL_TEXTURE_EXTERNAL_OES},
615  * 数据通过 {@link AVChatStateObserver#onVideoFrameFilter(VideoFrame, VideoFrame[], VideoFilterParameter)} 传递给上层,外部需要同步处理此数据。
616  * 目前数据回调所在线程具备 {@link android.opengl.EGLContext} 上下文环境。</p>
617  *
618  * <p><b>Writable:</b> {@code true}</p>
619  * <p><b>Runtime:</b> {@code true}</p>
620  *
621  * @see AVChatStateObserver#onVideoFrameFilter(AVChatVideoFrame, boolean)
622  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
623  */
624  @Writable
625  @Runtime
626  public static final Key<Boolean> KEY_VIDEO_FRAME_FILTER_NEW = new Key<>(RtcParameters.KEY_VIDEO_FRAME_FILTER_NEW, Boolean.class);
627 
628 
629  /**
630  * <p>视频数据回调图像格式</p>
631  *
632  * <p>通过回调 {@link AVChatStateObserver#onVideoFrameFilter(AVChatVideoFrame, boolean)} 传出的数据格式。
633  * 建议使用 {@link AVChatImageFormat#I420} 格式,默认格式为 {@link AVChatImageFormat#NV21}.</p>
634  *
635  *
636  * <p><b>Possible values:</b>
637  * <ul>
638  * <li>{@link AVChatImageFormat#NV21}</li>
639  * <li>{@link AVChatImageFormat#I420}</li>
640  * </ul></p>
641  * <p><b>Writable:</b> {@code true}</p>
642  * <p><b>Runtime:</b> {@code true}</p>
643  *
644  * @see AVChatStateObserver#onVideoFrameFilter(AVChatVideoFrame, boolean)
645  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
646  */
647  @Writable
648  @Runtime
649  @IntDef({NV21,
650  I420})
651  public static final Key<Integer> KEY_VIDEO_FRAME_FILTER_FORMAT = new Key<>(RtcParameters.KEY_VIDEO_FRAME_FILTER_FORMAT, Integer.class);
652 
653 
654  /**
655  * <p>语音数据预处理。</p>
656  *
657  * <p>通过此回调,外部可实现语音数据的预处理。目前提供外部的数据格式为 {@code PCM}, 数据通过 {@link AVChatStateObserver#onAudioFrameFilter(AVChatAudioFrame)} 传递给上层,
658  * 外部需要同步处理此数据。</p>
659  *
660  * <p><b>Writable:</b> {@code true}</p>
661  * <p><b>Runtime:</b> {@code true}</p>
662  *
663  * @see AVChatStateObserver#onAudioFrameFilter(AVChatAudioFrame)
664  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
665  */
666  @Writable
667  @Runtime
668  public static final Key<Boolean> KEY_AUDIO_FRAME_FILTER = new Key<>(RtcParameters.KEY_AUDIO_FRAME_FILTER, Boolean.class);
669 
670 
671  /**
672  * <p>互动直播推流地址。</p>
673  *
674  * <p>推流地址,仅主播设置,非主播用户不能设置此参数。 如果需要开启直播,必须在通话前设置推流地址,通话过程中可以更新推流地址。</p>
675  *
676  * <p><b>Writable:</b> {@code true}</p>
677  * <p><b>Runtime:</b> {@code true}</p>
678  * <p><b>Units:</b> UTF-8 null-terminated string</p>
679  *
680  * @deprecated 推荐使用 {@link AVChatManagerLite#createRoom(String, String, List, AVChatCallback)}
681  */
682  @Deprecated
683  @Runtime
684  @Writable
685  public static final Key<String> KEY_SESSION_LIVE_URL = new Key<>(RtcParameters.KEY_SESSION_LIVE_URL, String.class);
686 
687 
688  /**
689  * <p>声音强度汇报。</p>
690  *
691  * <p>通话过程中汇报正在说话用户的语音强度。语音强度通过 {@link AVChatStateObserver#onReportSpeaker(Map, int)} 上报给上层。</p>
692  *
693  * <p><b>Writable:</b> {@code true}</p>
694  * <p><b>Runtime:</b> {@code true}</p>
695  *
696  * @see AVChatStateObserver#onReportSpeaker(Map, int)
697  * @see AVChatManager#observeAVChatState(AVChatStateObserverLite, boolean)
698  */
699  @Writable
700  @Runtime
701  public static final Key<Boolean> KEY_AUDIO_REPORT_SPEAKER = new Key<>(RtcParameters.KEY_AUDIO_REPORT_SPEAKER, Boolean.class);
702 
703 
704  /**
705  * <p>高清晰语音。</p>
706  *
707  * <p>默认情况下不开启高清语音。高清语音将使用高采样率进行语音采集来提升语音的清晰度。</p>
708  *
709  *
710  * <p><b>Writable:</b> {@code true}</p>
711  * <p><b>Runtime:</b> {@code true}</p>
712  * <p><b>Compatibility</b> - 部分设备不支持高清语音采集。</p>
713  */
714  @Writable
715  public static final Key<Boolean> KEY_AUDIO_HIGH_QUALITY = new Key<>(RtcParameters.KEY_AUDIO_HIGH_QUALITY, Boolean.class);
716 
717 
718  /**
719  * <p>视频采集方向。</p>
720  *
721  * <p>默认情况下都是竖屏采集,用户可以设置不同的采集方向来调整拉流观众观看的角度。</p>
722  *
723  *
724  * <p><b>Possible values:</b>
725  * <ul>
726  * <li>{@link AVChatVideoCaptureOrientation#ORIENTATION_PORTRAIT ORIENTATION_PORTRAIT}</li>
727  * <li>{@link AVChatVideoCaptureOrientation#ORIENTATION_PORTRAIT_UPSIDEDOWN ORIENTATION_PORTRAIT_UPSIDEDOWN}</li>
728  * <li>{@link AVChatVideoCaptureOrientation#ORIENTATION_LANDSCAPE_LEFT ORIENTATION_LANDSCAPE_LEFT}</li>
729  * <li>{@link AVChatVideoCaptureOrientation#ORIENTATION_LANDSCAPE_RIGHT ORIENTATION_LANDSCAPE_RIGHT}</li>
730  * </ul></p>
731  * <p><b>Writable:</b> {@code true}</p>
732  * <p><b>Runtime:</b> {@code true}</p>
733  *
734  * @see AVChatVideoCaptureOrientation#ORIENTATION_PORTRAIT
735  * @see AVChatVideoCaptureOrientation#ORIENTATION_PORTRAIT_UPSIDEDOWN
736  * @see AVChatVideoCaptureOrientation#ORIENTATION_LANDSCAPE_LEFT
737  * @see AVChatVideoCaptureOrientation#ORIENTATION_LANDSCAPE_RIGHT
738  */
739  @Writable
740  @Runtime
745  public static final Key<Integer> KEY_VIDEO_CAPTURE_ORIENTATION = new Key<>(RtcParameters.KEY_VIDEO_CAPTURE_ORIENTATION, Integer.class);
746 
747 
748  /**
749  * <p>视频画面裁剪比例。</p>
750  *
751  * <p>默认情况是视频采集画面不裁剪。 在不同的设备上采集处理的分辨率可能不一样。 比如 {@code 720P} 可能存在 {@code 960x720} 和 {@code 1280x720}。
752  * 不同的分辨率会导致在预览绘制时画面存在画面显示不全或者黑边等问题。</p>
753  *
754  * <p><b>Possible values:</b>
755  * <ul>
756  * <li>{@link AVChatVideoCropRatio#CROP_RATIO_NONE CROP_RATIO_NONE}</li>
757  * <li>{@link AVChatVideoCropRatio#CROP_RATIO_16_9 CROP_RATIO_16_9}</li>
758  * <li>{@link AVChatVideoCropRatio#CROP_RATIO_4_3 CROP_RATIO_4_3}</li>
759  * <li>{@link AVChatVideoCropRatio#CROP_RATIO_1_1 CROP_RATIO_1_1}</li>
760  * </ul></p>
761  * <p><b>Writable:</b> {@code true}</p>
762  * <p><b>Runtime:</b> {@code true}</p>
763  *
764  * @see AVChatVideoCropRatio#CROP_RATIO_NONE
765  * @see AVChatVideoCropRatio#CROP_RATIO_16_9
766  * @see AVChatVideoCropRatio#CROP_RATIO_4_3
767  * @see AVChatVideoCropRatio#CROP_RATIO_1_1
768  */
769  @Writable
770  @Runtime
775  public static final Key<Integer> KEY_VIDEO_FIXED_CROP_RATIO = new Key<>(RtcParameters.KEY_VIDEO_FIXED_CROP_RATIO, Integer.class);
776 
777 
778  /**
779  * <p>前置摄像头本地预览镜像</p>
780  *
781  * <p>当使用前置摄像头时,本地预览画面是否镜像。 默认前置摄像头画面镜像处理。</p>
782  *
783  * <p><b>Writable:</b> {@code true}</p>
784  * <p><b>Runtime:</b> {@code true}</p>
785  */
786  @Writable
787  @Runtime
788  public static final Key<Boolean> KEY_VIDEO_LOCAL_PREVIEW_MIRROR = new Key<>(RtcParameters.KEY_VIDEO_LOCAL_PREVIEW_MIRROR, Boolean.class);
789 
790 
791  /**
792  * <p>前置摄像头发送数据预览镜像</p>
793  *
794  * <p>当使用前置摄像头时,本地发送画面是否镜像。 默认前置摄像头发送换面不镜像处理。</p>
795  *
796  * <p><b>Writable:</b> {@code true}</p>
797  * <p><b>Runtime:</b> {@code true}</p>
798  */
799  @Runtime
800  @Writable
801  public static final Key<Boolean> KEY_VIDEO_TRANSPORT_MIRROR = new Key<>(RtcParameters.KEY_VIDEO_TRANSPORT_MIRROR, Boolean.class);
802 
803 
804  /**
805  * <p>服务器语音录制。</p>
806  *
807  * <p>在服务器录制通话语音数据,格式为 {@code aac}。</p>
808  *
809  * <p><b>Writable:</b> {@code true}</p>
810  * <p><b>Runtime:</b> {@code false}</p>
811  */
812  @Writable
813  public static final Key<Boolean> KEY_SERVER_AUDIO_RECORD = new Key<>(RtcParameters.KEY_SERVER_AUDIO_RECORD, Boolean.class);
814 
815 
816  /**
817  * <p>服务器视频录制。</p>
818  *
819  * <p>在服务器录制通话视频数据,格式为 {@code mp4}。</p>
820  *
821  * <p><b>Writable:</b> {@code true}</p>
822  * <p><b>Runtime:</b> {@code false}</p>
823  */
824  @Writable
825  public static final Key<Boolean> KEY_SERVER_VIDEO_RECORD = new Key<>(RtcParameters.KEY_SERVER_VIDEO_RECORD, Boolean.class);
826 
827 
828  /**
829  * <p>服务器录制模式。</p>
830  *
831  * <p>设置服务器录制时的模式,混合与单人、混合、单人。</p>
832  *
833  * <p><b>Possible values:</b>
834  * <ul>
835  * <li>{@link AVChatServerRecordMode#MIX_AND_SINGLE MIX_AND_SINGLE}</li>
836  * <li>{@link AVChatServerRecordMode#MIX MIX}</li>
837  * <li>{@link AVChatServerRecordMode#SINGLE SINGLE}</li>
838  * </ul></p>
839  * <p><b>Writable:</b> {@code true}</p>
840  * <p><b>Runtime:</b> {@code false}</p>
841  *
842  * @see AVChatServerRecordMode#MIX_AND_SINGLE
843  * @see AVChatServerRecordMode#MIX
844  * @see AVChatServerRecordMode#SINGLE
845  */
846  @Writable
847  @Runtime
848  @IntDef({MIX_AND_SINGLE,
849  MIX,
850  SINGLE})
851  public static final Key<Integer> KEY_SERVER_RECORD_MODE = new Key<>(RtcParameters.KEY_SERVER_RECORD_MODE, Integer.class);
852 
853 
854  /**
855  * <p>服务器录制是否为主讲人。</p>
856  *
857  * <p>在服务器录制开始时设置是否为主讲人。</p>
858  *
859  * <p><b>Writable:</b> {@code true}</p>
860  * <p><b>Runtime:</b> {@code false}</p>
861  */
862  @Writable
863  public static final Key<Boolean> KEY_SERVER_RECORD_SPEAKER = new Key<>(RtcParameters.KEY_SERVER_RECORD_SPEAKER, Boolean.class);
864 
865 
866  /**
867  * <p>服务器互动直播录制。</p>
868  *
869  * <p>在服务器录制互动直播内容。</p>
870  *
871  * <p><b>Writable:</b> {@code true}</p>
872  * <p><b>Runtime:</b> {@code false}</p>
873  *
874  * @deprecated 推荐使用 {@link AVChatManagerLite#createRoom(String, String, List, AVChatCallback)}
875  */
876  @Deprecated
877  @Writable
878  public static final Key<Boolean> KEY_SERVER_LIVE_RECORD = new Key<>(RtcParameters.KEY_SERVER_LIVE_RECORD, Boolean.class);
879 
880 
881  /**
882  * <p>互动直播混屏模式。</p>
883  *
884  * <p>当互动直播时有连麦用户加入,可以指定不同当混屏模式。用户可以使用简单的混合模式,也可以自定义复杂的混合模式</p>
885  *
886  *
887  * <p><b>Writable:</b> {@code true}</p>
888  * <p><b>Runtime:</b> {@code false}</p>
889  *
890  * @see <a href="http://netease.im/blog/12-3">http://netease.im/blog/12-3</a>
891  * @deprecated 推荐使用 {@link AVChatManagerLite#createRoom(String, String, List, AVChatCallback)}
892  */
893  @Deprecated
894  @Writable
895  public static final Key<AVChatLiveCompositingLayout> KEY_SESSION_LIVE_COMPOSITING_LAYOUT =
896  new Key<>(RtcParameters.KEY_SESSION_LIVE_COMPOSITING_LAYOUT, AVChatLiveCompositingLayout.class);
897 
898 
899  /**
900  * <p>互动直播模式。</p>
901  *
902  * <p>开启互动直播前提是需要多人会议模式, 必须通过 {@link AVChatManager#joinRoom2(String, AVChatType, AVChatCallback)} 来加入房间。</p>
903  *
904  * <p><b>Writable:</b> {@code true}</p>
905  * <p><b>Runtime:</b> {@code false}</p>
906  *
907  * @see AVChatManager#createRoom(String, String, List, AVChatCallback)
908  * @see AVChatManager#joinRoom2(String, AVChatType, AVChatCallback)
909  * @see AVChatManager#leaveRoom2(String, AVChatCallback)
910  */
911  @Writable
912  public static final Key<Boolean> KEY_SESSION_LIVE_MODE = new Key<>(RtcParameters.KEY_SESSION_LIVE_MODE, Boolean.class);
913 
914  /**
915  * <p>自定义服务器兼容性配置</p>
916  *
917  * <p>该参数设置一个URL地址,以指定一个远端JSON配置文件,由SDK负责下载后解析,并缓存在本地。
918  * 每次加载时,如果对应缓存有效,SDK优先使用缓存的配置;否则,本次仅完成下载和解析工作,配置会在下一次通话时才能应用。
919  * SDK会间隔15分钟去同步远端配置文件的修改,重新下载、解析并缓存。
920  * </p>
921  *
922  * <p><b>Writable:</b> {@code true}</p>
923  * <p><b>Runtime:</b> {@code false}</p>
924  */
925  @Writable
926  public static final Key<String> KEY_COMPATIBILITY_CONFIG_SERVER =
927  new Key<>(RtcParameters.KEY_COMPATIBILITY_CONFIG_SERVER, String.class);
928 
929  /**
930  * <p>自定义本地兼容性配置</p>
931  *
932  * <p>该参数设置一个本地文件路径,以指定一个本地兼容性配置文件供SDK解析应用。
933  * 每次启用,SDK都会重新解析本地配置文件。对于相同的配置项,本地适配会优先于服务器适配。</p>
934  *
935  * <p><b>Writable:</b> {@code true}</p>
936  * <p><b>Runtime:</b> {@code false}</p>
937  */
938  @Writable
939  public static final Key<String> KEY_COMPATIBILITY_CONFIG_LOCAL =
940  new Key<>(RtcParameters.KEY_COMPATIBILITY_CONFIG_LOCAL, String.class);
941 
942 
943  /**
944  * <p>外部语音数据采集</p>
945  *
946  * <p>用户在SDK外部采集语音数据,然后按照一定格式传入SDK内部编码发送</p>
947  *
948  * <p><b>Writable:</b> {@code true}</p>
949  * <p><b>Runtime:</b> {@code false}</p>
950  *
951  * @Deprecated 推荐使用 {@link AVChatManager#setExternalAudioSource(boolean)}<br/>
952  * @see AVChatManager#pushExternalAudioData(byte[], int, int, int, int, boolean)
953  */
954  @Writable
955  @Deprecated
956  public static final Key<Boolean> KEY_AUDIO_EXTERNAL_CAPTURE =
957  new Key<>(RtcParameters.KEY_AUDIO_EXTERNAL_CAPTURE, Boolean.class);
958 
959  /**
960  * 语音播放采样率设置
961  */
962  @Writable
963  public static final Key<Integer> KEY_AUDIO_PROCESS_DUMP_FLAG_DEBUG =
964  new Key<>(RtcParameters.KEY_AUDIO_PROCESS_DUMP_FLAG_DEBUG, Integer.class);
965 
966 
967  /**
968  * 设置是否打印 kTraceProfile 日志
969  */
970  @Writable
971  @Runtime
972  public static final Key<Boolean> KEY_PROFILE_TRACE_FLAG_DEBUG =
973  new Key<>(RtcParameters.KEY_PROFILE_TRACE_FLAG_DEBUG, Boolean.class);
974 
975 
976  /**
977  * 语音播放采样率设置
978  */
979  @Writable
984  public static final Key<Integer> KEY_AUDIO_PLAYBACK_DEFAULT_SAMPLE_RATE =
985  new Key<>(RtcParameters.KEY_AUDIO_PLAYBACK_DEFAULT_SAMPLE_RATE, Integer.class);
986 
987 
988  private RtcParameters mRawParams;
989 
990  public AVChatParameters() {
991  mRawParams = new RtcParameters();
992  }
993 
994  public void clear() {
995  mRawParams.clear();
996  }
997 
998  public RtcParameters getRawParameters() {
999  return mRawParams;
1000  }
1001 
1002  public void setRawParameters(RtcParameters parameters) {
1003  mRawParams = new RtcParameters();
1004 
1005  Set<String> keys = parameters.keys();
1006 
1007  if (keys != null) {
1008  for (String key : keys) {
1009  mRawParams.setObject(key, parameters.getObject(key));
1010  }
1011  }
1012  }
1013 
1014  public final AVChatParameters setRequestKeys(Set<Key> keys) {
1015  checkNotNull(keys);
1016 
1017  Set<String> keyName = new HashSet<>(keys.size());
1018  for (Key key : keys) {
1019  keyName.add(key.name());
1020  }
1021  mRawParams.setRequestKeys(keyName);
1022  return this;
1023  }
1024 
1025 
1026  public final AVChatParameters setRequestKey(Key key) {
1027  checkNotNull(key);
1028  mRawParams.setRequestKey(key.name());
1029  return this;
1030  }
1031 
1032 
1033  public final boolean getBoolean(Key<Boolean> key) {
1034  return get(key);
1035  }
1036 
1037  public final int getInteger(Key<Integer> key) {
1038  return get(key);
1039  }
1040 
1041  public final String getString(Key<String> key) {
1042  return get(key);
1043  }
1044 
1045  public final void setInteger(Key<Integer> key, int value) {
1046  set(key, value);
1047  }
1048 
1049  public final void setBoolean(Key<Boolean> key, boolean value) {
1050  set(key, value);
1051  }
1052 
1053  public final void setString(Key<String> key, String value) {
1054  set(key, value);
1055  }
1056 
1057  public final boolean containsKey(Key key) {
1058  checkNotNull(key);
1059  return mRawParams.containsKey(key.name());
1060  }
1061 
1062  public final <T> void set(Key<T> key, T value) {
1063  checkNotNull(key);
1064  mRawParams.setObject(key.name(), value);
1065  }
1066 
1067  public final <T> T get(Key<T> key) {
1068  checkNotNull(key);
1069  T value = (T) mRawParams.getObject(key.name());
1070  return value;
1071  }
1072 
1073  public final void setFloat(Key<Float> key, float value) {
1074  set(key, value);
1075  }
1076 
1077  public final float getFloat(Key<Float> key) {
1078  return get(key);
1079  }
1080 
1081  public final void removeParameters(Key key) {
1082  checkNotNull(key);
1083  mRawParams.removeParameters(key.name());
1084  }
1085 
1086 
1087  private static <T> T checkNotNull(T reference) {
1088  if (reference == null) {
1089  throw new NullPointerException();
1090  }
1091  return reference;
1092  }
1093 
1094 
1095 }
int I420
I420数据格式,4.8.0开始为默认值
static final Key< String > KEY_AUDIO_EFFECT_AUTOMATIC_GAIN_CONTROL
int NORMAL
普通用户,允许收发数据
String PLATFORM_BUILTIN
如果平台内置了语音处理, 优先使用平台内置语音处理
int ORIENTATION_LANDSCAPE_LEFT
Indicates that video should be oriented horizontally, home button on the left.
final void setBoolean(Key< Boolean > key, boolean value)
final void setFloat(Key< Float > key, float value)
int AUDIENCE
观众用户,仅允许接收数据
int ORIENTATION_PORTRAIT_UPSIDEDOWN
Indicates that video should be oriented vertically, home button on the top.
static final Key< Integer > KEY_AUDIO_PROCESS_DUMP_FLAG_DEBUG
语音播放采样率设置
final AVChatParameters setRequestKeys(Set< Key > keys)
int NV21
NV21数据各式,弃用,建议使用I420
final void setString(Key< String > key, String value)
int ORIENTATION_PORTRAIT
Indicates that video should be oriented vertically, home button on the bottom.
static final Key< AVChatLiveCompositingLayout > KEY_SESSION_LIVE_COMPOSITING_LAYOUT
static final Key< Boolean > KEY_PROFILE_TRACE_FLAG_DEBUG
设置是否打印 kTraceProfile 日志
static final Key< Integer > KEY_AUDIO_PLAYBACK_DEFAULT_SAMPLE_RATE
语音播放采样率设置
编解码模式,主要用来区分软件编解码和硬件编解码
final void setInteger(Key< Integer > key, int value)
static final Key< String > KEY_AUDIO_EFFECT_ACOUSTIC_ECHO_CANCELER
int ORIENTATION_LANDSCAPE_RIGHT
Indicates that video should be oriented horizontally, home button on the right.