类型定义
本页列出 Android API 所有的类型定义。
AreaCode
访问区域,即 SDK 连接的服务器所在的区域。
枚举值
- AREA_CODE_CN
- 中国大陆。
- AREA_CODE_NA
- 北美区域。
- AREA_CODE_EU
- 欧洲区域。
- AREA_CODE_AS
- 除中国以外的亚洲区域。
- AREA_CODE_JP
- 日本。
- AREA_CODE_IN
- 印度。
- AREA_CODE_GLOB
- 全球。
AudioCodecProfileType
推流输出音频的编解码规格,默认为 LC-AAC。
枚举值
- LC_AAC
- 0: (默认)LC-AAC 规格。
- HE_AAC
- 1: HE-AAC 规格。
- HE_AAC_V2
- 2: HE-AAC v2 规格。
AudioDualMonoMode
声道模式。
枚举值
- AUDIO_DUAL_MONO_STEREO
- 0: 原始模式。
- AUDIO_DUAL_MONO_L
- 1: 左声道模式。该模式用左声道的音频替换右声道的音频,即用户只能听到左声道的音频。
- AUDIO_DUAL_MONO_R
- 2: 右声道模式。该模式用右声道的音频替换左声道的音频,即用户只能听到右声道的音频。
- AUDIO_DUAL_MONO_MIX
- 3: 混合模式。该模式将左右声道的数据叠加,即用户能同时听到左声道和右声道的音频。
AUDIO_EQUALIZATION_BAND_FREQUENCY
语音音效均衡波段的中心频率。
枚举值
- AUDIO_EQUALIZATION_BAND_31
- 0: 31 Hz
- AUDIO_EQUALIZATION_BAND_62
- 1: 62 Hz
- AUDIO_EQUALIZATION_BAND_125
- 2: 125 Hz
- AUDIO_EQUALIZATION_BAND_250
- 3: 250 Hz
- AUDIO_EQUALIZATION_BAND_500
- 4: 500 Hz
- AUDIO_EQUALIZATION_BAND_1K
- 5: 1 kHz
- AUDIO_EQUALIZATION_BAND_2K
- 6: 2 kHz
- AUDIO_EQUALIZATION_BAND_4K
- 7: 4 kHz
- AUDIO_EQUALIZATION_BAND_8K
- 8: 8 kHz
- AUDIO_EQUALIZATION_BAND_16K
- 9: 16 kHz
AudioMixingDualMonoMode
声道模式。
枚举值
- AUDIO_MIXING_DUAL_MONO_AUTO
- 0:原始模式。
- AUDIO_MIXING_DUAL_MONO_L
- 1:左声道模式。该模式用左声道的音频替换右声道的音频,即用户只能听到左声道的音频。
- AUDIO_MIXING_DUAL_MONO_R
- 2:右声道模式。该模式用右声道的音频替换左声道的音频,即用户只能听到右声道的音频。
- AUDIO_MIXING_DUAL_MONO_MIX
- 3:混合模式。该模式将左右声道的数据叠加,即用户能同时听到左声道和右声道的音频。
AUDIO_REVERB_TYPE
音频混响类型。
枚举值
- AUDIO_REVERB_DRY_LEVEL
- 0: 原始声音强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB。
- AUDIO_REVERB_WET_LEVEL
- 1: 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB。
- AUDIO_REVERB_ROOM_SIZE
- 2: 所需混响效果的房间尺寸,一般房间越大,混响越强,取值范围 [0,100],单位为 dB。
- AUDIO_REVERB_WET_DELAY
- 3: Wet signal 的初始延迟长度,取值范围 [0,200],单位为毫秒。
- AUDIO_REVERB_STRENGTH
- 4: 混响持续的强度,取值范围为 [0,100]。
AudioSampleRateType
推流输出音频的采样率。
枚举值
- AUDIO_SAMPLE_RATE_32000
- 32000: 32 kHz
- AUDIO_SAMPLE_RATE_44100
- 44100: 44.1 kHz
- AUDIO_SAMPLE_RATE_48000
- 48000: (默认)48 kHz
DEGRADATION_PREFERENCE
带宽受限时的视频编码降级偏好。
枚举值
- MAINTAIN_QUALITY
-
0:(默认)带宽受限时,视频编码时优先降低视频帧率,维持视频质量不变。该降级偏好适用于画质优先的场景。
注意: 通信(COMMUNICATION)场景下,本地发送的视频分辨率可能改变,远端用户需能处理这种情况, 详见 onVideoSizeChanged。 - MAINTAIN_FRAMERATE
- 1:带宽受限时,视频编码时优先降低视频质量,维持视频帧率不变。该降级偏好适用于流畅性优先且允许画质降低的场景。
- MAINTAIN_BALANCED
-
2:带宽受限时,视频编码时同时降低视频帧率和视频质量。MAINTAIN_BALANCED 的降幅比 MAINTAIN_QUALITY 和 MAINTAIN_FRAMERATE 降幅更低,适用于流畅性和画质均有限的场景。
注意: 本地发送的视频分辨率可能改变,远端用户需能处理这种情况,详见 onVideoSizeChanged。 - MAINTAIN_RESOLUTION
- 3: 带宽受限时,视频编码时优先降低视频帧率。
DirectCdnStreamingError
CDN 推流出错原因。
枚举值
- OK
- 0:推流状态正常。
- FAILED
- 1:一般性错误,没有明确原因。你可以尝试重新推流。
- AUDIO_PUBLICATION
- 2:音频推流出错。例如,本地音频采集设备未正常工作、被其他进程占用或没有使用权限。
- VIDEO_PUBLICATION
- 3:视频推流出错。例如,本地视频采集设备未正常工作、被其他进程占用或没有使用权限。
- NET_CONNECT
- 4:连接 CDN 失败。
- BAD_NAME
- 5:URL 已用于推流。请使用新的 URL。
DirectCdnStreamingState
当前 CDN 推流状态。
枚举值
- IDLE
- 0:初始状态,即推流尚未开始。
- RUNNING
- 1:正在推流中。当你调用 startDirectCdnStreaming 成功推流时,SDK 会返回该值。
- STOPPED
- 2:推流已正常结束。当你调用 stopDirectCdnStreaming 主动停止推流时,SDK 会返回该值。
- FAILED
- 3:推流失败。你可以通过 onDirectCdnStreamingStateChanged 回调报告的信息排查问题,然后重新推流。
- RECOVERING
- 4:尝试重新连接 Agora 服务器和 CDN。最多尝试重连 10 次,如仍未成功恢复连接,则推流状态变为 FAILED。
ENCRYPTION_ERROR_TYPE
内置加密的错误类型。
枚举值
- ENCRYPTION_ERROR_INTERNAL_FAILURE
- 0: 内部原因。
- ENCRYPTION_ERROR_DECRYPTION_FAILURE
- 1: 解密错误。请确保接收端和发送端使用的加密模式或密钥一致。
- ENCRYPTION_ERROR_ENCRYPTION_FAILURE
- 2: 加密错误。
EncryptionMode
内置加密模式。
Agora 推荐使用 AES_128_GCM2 或 AES_256_GCM2 加密模式。这两种模式支持使用盐,安全性更高。
枚举值
- AES_128_XTS
- 1: 128 位 AES 加密,XTS 模式。
- AES_128_ECB
- 2: 128 位 AES 加密,ECB 模式。
- AES_256_XTS
- 3: 256 位 AES 加密,XTS 模式。
- SM4_128_ECB
- 4: 128 位 SM4 加密,ECB 模式。
- AES_128_GCM
- 5: 128 位 AES 加密,GCM 模式。
- AES_256_GCM
- 6: 256 位 AES 加密,GCM 模式。
- AES_128_GCM2
- 7:(默认)128 位 AES 加密,GCM 模式。该加密模式需要设置盐(
encryptionKdfSalt
)。 - AES_256_GCM2
- 8: 256 位 AES 加密,GCM 模式。该加密模式需要设置盐(
encryptionKdfSalt
)。 - MODE_END
- 枚举值边界。
ExternalVideoSourceType
外部视频帧编码类型。
枚举值
- VIDEO_FRAME
- 0:未编码视频帧。
- ENCODED_VIDEO_FRAME
- 1:已编码视频帧。
FRAME_RATE
视频帧率。
枚举值
- FRAME_RATE_FPS_1
- 1: 1 fps
- FRAME_RATE_FPS_7
- 7: 7 fps
- FRAME_RATE_FPS_10
- 10: 10 fps
- FRAME_RATE_FPS_15
- 15: 15 fps
- FRAME_RATE_FPS_24
- 24: 24 fps
- FRAME_RATE_FPS_30
- 30: 30 fps
HEADPHONE_EQUALIZER_PRESET
预设的耳机均衡器类型。
- 自从
- v4.0.1
枚举值
- HEADPHONE_EQUALIZER_OFF
- 关闭耳机均衡器,收听原始音频。
- HEADPHONE_EQUALIZER_OVEREAR
- 使用头戴式耳机的均衡器。
- HEADPHONE_EQUALIZER_INEAR
- 使用入耳式耳机的均衡器。
LogLevel
日志输出等级。
枚举值
- LOG_LEVEL_NONE
- 0: 不输出任何日志。
- LOG_LEVEL_INFO
- 0x0001:(默认)输出
FATAL
、ERROR
、WARN
、INFO
级别的日志。我们推荐你将日志级别设为该等级。 - LOG_LEVEL_WARN
- 0x0002: 仅输出
FATAL
、ERROR
、WARN
级别的日志。 - LOG_LEVEL_ERROR
- 0x0004: 仅输出
FATAL
、ERROR
级别的日志。 - LOG_LEVEL_FATAL
- 0x0008: 仅输出
FATAL
级别的日志。
MediaPlayerError
播放器的错误码。
枚举值
- PLAYER_ERROR_NONE
- 0: 没有错误。
- PLAYER_ERROR_INVALID_ARGUMENTS
- -1: 不正确的参数。
- PLAYER_ERROR_INTERNAL
- -2: 内部错误。
- PLAYER_ERROR_NO_RESOURCE
- -3: 没有 resource。
- PLAYER_ERROR_INVALID_MEDIA_SOURCE
- -4: 无效的 resource。
- PLAYER_ERROR_UNKNOWN_STREAM_TYPE
- -5: 未知的媒体流类型。
- PLAYER_ERROR_OBJ_NOT_INITIALIZED
- -6: 对象没有初始化。
- PLAYER_ERROR_CODEC_NOT_SUPPORTED
- -7: 解码器不支持该 codec。
- PLAYER_ERROR_VIDEO_RENDER_FAILED
- -8: 无效的 renderer。
- PLAYER_ERROR_INVALID_STATE
- -9: 播放器内部状态错误。
- PLAYER_ERROR_URL_NOT_FOUND
- -10: 未找到该 URL。
- PLAYER_ERROR_INVALID_CONNECTION_STATE
- -11: 播放器与 Agora 服务器的连接无效。
- PLAYER_ERROR_SRC_BUFFER_UNDERFLOW
- -12: 播放缓冲区数据不足。
- PLAYER_ERROR_INTERRUPTED
- -13: 播放被异常打断而结束。
- PLAYER_ERROR_NOT_SUPPORTED
- -14: SDK 不支持的接口调用。
- PLAYER_ERROR_TOKEN_EXPIRED
- -15: 媒体资源网络路径的鉴权信息已过期。
- PLAYER_ERROR_UNKNOWN
- -17:未知错误。
MediaPlayerEvent
播放器事件。
枚举值
- PLAYER_EVENT_UNKNOWN
- -1: 未知事件。
- PLAYER_EVENT_SEEK_BEGIN
- 0: 开始定位。
- PLAYER_EVENT_SEEK_COMPLETE
- 1: 完成定位。
- PLAYER_EVENT_SEEK_ERROR
- 2: 定位出错。
- PLAYER_EVENT_AUDIO_TRACK_CHANGED
- 5: 当前音轨发生改变。
- PLAYER_EVENT_BUFFER_LOW
- 6: 当前缓冲的数据不足以支持播放。
- PLAYER_EVENT_BUFFER_RECOVER
- 7: 当前缓冲的数据刚好能支持播放。
- PLAYER_EVENT_FREEZE_START
- 8: 音频或视频出现卡顿。
- PLAYER_EVENT_FREEZE_STOP
- 9: 音频和视频均停止卡顿。
- PLAYER_EVENT_SWITCH_BEGIN
- 10: 开始切换媒体资源。
- PLAYER_EVENT_SWITCH_COMPLETE
- 11: 媒体资源切换完成。
- PLAYER_EVENT_SWITCH_ERROR
- 12: 媒体资源切换出错。
- PLAYER_EVENT_FIRST_DISPLAYED
- 13: 视频首帧出图。
- PLAYER_EVENT_REACH_CACHE_FILE_MAX_COUNT
- 14:达到可缓存文件的数量上限。
- PLAYER_EVENT_REACH_CACHE_FILE_MAX_SIZE
- 15:达到可缓存文件的大小上限。
MediaPlayerMetadataType
媒体附属信息数据类型。
枚举值
- PLAYER_METADATA_TYPE_UNKNOWN
- 0: 未知类型。
- PLAYER_METADATA_TYPE_SEI
- 1: SEI (补充增强信息)类型。
MediaPlayerState
播放器的状态。
枚举值
- PLAYER_STATE_UNKNOWN
- -1: 未知状态。
- PLAYER_STATE_IDLE
- 0: 默认状态。播放器会在你打开媒体文件之前和结束播放之后返回该状态码。
- PLAYER_STATE_OPENING
- 正在打开媒体文件。
- PLAYER_STATE_OPEN_COMPLETED
- 成功打开媒体文件。
- PLAYER_STATE_PLAYING
- 正在播放。
- PLAYER_STATE_PAUSED
- 暂停播放。
- PLAYER_STATE_PLAYBACK_COMPLETED
- 播放完毕。
- PLAYER_STATE_PLAYBACK_ALL_LOOPS_COMPLETED
- 循环播放已结束。
- PLAYER_STATE_STOPPED
- 播放已停止。
- PLAYER_STATE_FAILED
- 100: 播放失败。
MediaSourceType
媒体源类型。
枚举值
- AUDIO_PLAYOUT_SOURCE
- 0: 音频播放设备。
- AUDIO_RECORDING_SOURCE
- 1: 音频采集设备。
- PRIMARY_CAMERA_SOURCE
- 2: 第一个摄像头
- SECONDARY_CAMERA_SOURCE
- 3: 第二个摄像头。
- UNKNOWN_MEDIA_SOURCE
- 100: 未知媒体源。
MediaStreamType
媒体流的类型。
枚举值
- STREAM_TYPE_UNKNOWN
- 0: 未知类型。
- STREAM_TYPE_VIDEO
- 1: 视频流。
- STREAM_TYPE_AUDIO
- 2: 音频流。
- STREAM_TYPE_SUBTITLE
- 3: 字幕流。
ORIENTATION_MODE
视频编码的方向模式。
枚举值
- ORIENTATION_MODE_ADAPTIVE
-
0: (默认)该模式下 SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以调整视频方向的场景。
- 如果采集的视频是横屏模式,则输出的视频也是横屏模式。
- 如果采集的视频是竖屏模式,则输出的视频也是竖屏模式。
- ORIENTATION_FIXED_LANDSCAPE
- 1: 该模式下 SDK 固定输出风景(横屏)模式的视频。如果采集到的视频是竖屏模式,则视频编码器会对其进行裁剪。该模式适用于当接收端无法调整视频方向时,如使用旁路推流场景下。
- ORIENTATION_FIXED_PORTRAIT
- 2: 该模式下 SDK 固定输出人像(竖屏)模式的视频,如果采集到的视频是横屏模式,则视频编码器会对其进行裁剪。该模式适用于当接收端无法调整视频方向时,如使用旁路推流场景下。
MediaPlayerPreloadEvent
预加载媒体资源时发生的事件。
枚举值
- PLAYER_PRELOAD_EVENT_BEGIN
- 0: 开始预加载媒体资源。
- PLAYER_PRELOAD_EVENT_COMPLETE
- 1: 预加载媒体资源完成。
- PLAYER_PRELOAD_EVENT_ERROR
- 2: 预加载媒体资源出错。
STREAM_PUBLISH_STATE
发布状态。
枚举值
- PUB_STATE_IDLE
- 0: 加入频道后的初始发布状态。
- PUB_STATE_NO_PUBLISHED
-
1: 发布失败。可能是因为:
- 本地用户调用 muteLocalAudioStream(
true
) 或 muteLocalVideoStream(true
) 停止发送本地媒体流。 - 本地用户调用 disableAudio 或 disableVideo 关闭本地音频或视频模块。
- 本地用户调用 enableLocalAudio(
false
) 或 enableLocalVideo(false
) 关闭本地音频或视频采集。 - 本地用户角色为观众。
- 本地用户调用 muteLocalAudioStream(
- PUB_STATE_PUBLISHING
- 2: 正在发布。
- PUB_STATE_PUBLISHED
- 3: 发布成功。
VideoCodecProfileType
旁路推流输出视频的编解码规格。
- BASELINE
- 66: Baseline 级别的视频编码规格,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等。
- MAIN
- 77: Main 级别的视频编码规格,一般用于主流消费类电子产品,如 MP4、便携的视频播放器、PSP、iPad 等。
- HIGH
- 100: (默认)High 级别的视频编码规格,一般用于广播、视频碟片存储、高清电视。
VideoCodecType
转码输出视频流的编解码类型。
枚举值
- H264
- 1:(默认)H.264。
- H265
- 2:H.265。
MIRROR_MODE_TYPE
镜像模式类型。
枚举值
- MIRROR_MODE_AUTO
- 0:(默认)由 SDK 决定镜像模式。
- MIRROR_MODE_ENABLED
- 1: 启用镜像模式。
- MIRROR_MODE_DISABLED
- 2: 关闭镜像模式。
VideoSourceType
视频源的类型。
枚举值
- VIDEO_SOURCE_CAMERA_PRIMARY
- (默认)第一个摄像头。
- VIDEO_SOURCE_CAMERA_SECONDARY
- 第二个摄像头。
- VIDEO_SOURCE_SCREEN_PRIMARY
- 第一个屏幕。
- VIDEO_SOURCE_SCREEN_SECONDARY
- 第二个屏幕。
- VIDEO_SOURCE_CUSTOM
- 自定义的视频源。
- VIDEO_SOURCE_MEDIA_PLAYER
- 媒体播放器共享的视频源。
- VIDEO_SOURCE_RTC_IMAGE_PNG
- 视频源为 PNG 图片。
- VIDEO_SOURCE_RTC_IMAGE_JPEG
- 视频源为 JPEG 图片。
- VIDEO_SOURCE_RTC_IMAGE_GIF
- 视频源为 GIF 图片。
- VIDEO_SOURCE_REMOTE
- 视频源为网络获取的远端视频。
- VIDEO_SOURCE_TRANSCODED
- 转码后的视频源。
- VIDEO_SOURCE_UNKNOWN
- 未知的视频源。
AdvancedAudioOptions
音频的高级选项。
public class AdvancedAudioOptions { public enum AgoraAudioProcessChannels { AGORA_AUDIO_MONO_PROCESSING(1), AGORA_AUDIO_STEREO_PROCESSING(2); private int value; private AgoraAudioProcessChannels(int v) { value = v; } public int getValue() { return this.value; } } public AgoraAudioProcessChannels audioProcessingChannels; public AdvancedAudioOptions(AgoraAudioProcessChannels channels) { audioProcessingChannels = channels; } public AdvancedAudioOptions() { audioProcessingChannels = AgoraAudioProcessChannels.AGORA_AUDIO_MONO_PROCESSING; } }
属性
- audioProcessingChannels
- 音频前处理的声道数。详见 AgoraAudioProcessChannels。
AgoraAudioProcessChannels
音频前处理的声道数。
在演唱会等需要增强真实感的场景中,本地用户可能需要采集立体声并发送立体声信号给远端用户。 例如,在演唱会的舞台上,主唱、吉他手、鼓手分别站在不同的位置,现场设备采集到了三者的立体声,并把立体声信号发送给远端用户,远端用户可以像亲临舞台一样听到来自不同方向的歌声、吉他声和鼓声。
- 前处理:调用 setAdvancedAudioOptions 并在 AdvancedAudioOptions 中设置 audioProcessingChannels 为 AGORA_AUDIO_STEREO_PROCESSING (2)。
- 后处理:调用 setAudioProfile [2/2] 并将 profile 设为 MUSIC_STANDARD_STEREO (3) 或 MUSIC_HIGH_QUALITY_STEREO (5)。
- 立体声设置仅在媒体音量下生效。详见音量类型。
枚举值
- AGORA_AUDIO_MONO_PROCESSING
- 1: (默认)单声道。
- AGORA_AUDIO_STEREO_PROCESSING
- 2: 双声道。
AgoraFacePositionInfo
检测到的人脸信息。
public static class AgoraFacePositionInfo { public int x; public int y; public int width; public int height; public int distance; }
属性
- x
-
人脸在画面中的 x 坐标 (px)。以摄像头采集画面的左上角为原点,x 坐标为人脸左上角相对于原点的横向位移。
- y
-
人脸在画面中的 y 坐标 (px)。以摄像头采集画面的左上角为原点,y 坐标为人脸左上角相对原点的纵向位移。
- width
-
人脸在画面中的宽度 (px)。
- height
-
人脸在画面中的高度 (px)。
- distance
-
人脸距设备屏幕的距离 (cm)。
AudioEncodedFrameObserverConfig
编码后音频的观测器设置。
public class AudioEncodedFrameObserverConfig {
public int postionType;
public int encodingType;
public AudioEncodedFrameObserverConfig() {
postionType = Constants.AUDIO_FILE_RECORDING_PLAYBACK;
encodingType = Constants.AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM;
}
}
属性
- postionType
-
音频编码内容:
- AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIC(1):仅编码本地用户的音频。
- AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK(2):仅编码所有远端用户的音频。
- AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED(3):编码本地和所有远端用户混音后的音频。
- encodingType
-
音频编码类型:
- AUDIO_ENCODING_TYPE_AAC_16000_LOW:AAC 编码格式,16000 Hz 采样率,低音质。音频时长为 10 分钟的文件编码后大小约为 1.2 MB。
- AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM:AAC 编码格式,16000 Hz 采样率,中音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_AAC_32000_LOW:AAC 编码格式,32000 Hz 采样率,低音质。音频时长为 10 分钟的文件编码后大小约为 1.2 MB。
- AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM:AAC 编码格式,32000 Hz 采样率,中音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_AAC_32000_HIGH:AAC 编码格式,32000 Hz 采样率,高音质。音频时长为 10 分钟的文件编码后大小约为 3.5 MB。
- AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM:AAC 编码格式,48000 Hz 采样率,中音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_AAC_48000_HIGH:AAC 编码格式,48000 Hz 采样率,高音质。音频时长为 10 分钟的文件编码后大小约为 3.5 MB。
- AUDIO_ENCODING_TYPE_OPUS_16000_LOW:OPUS 编码格式,16000 Hz 采样率,低音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM:OPUS 编码格式,16000 Hz 采样率,中音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM:OPUS 编码格式,48000 Hz 采样率,中音质。音频时长为 10 分钟的文件编码后大小约为 2 MB。
- AUDIO_ENCODING_TYPE_OPUS_48000_HIGH:OPUS 编码格式,48000 Hz 采样率,高音质。音频时长为 10 分钟的文件编码后大小约为 3.5 MB。
AudioFrame
原始音频数据。
public class AudioFrame { public byte[] bytes; public int sampleRataHz; public int bytesPerSample; public int channelNums; public int samplesPerChannel; public long timestamp; @CalledByNative public AudioFrame(byte[] bytes, int sampleRataHz, int bytesPerSample, int channelNums, int samplesPerChannel, long timestamp) { this.sampleRataHz = sampleRataHz; this.bytesPerSample = bytesPerSample; this.channelNums = channelNums; this.samplesPerChannel = samplesPerChannel; this.timestamp = timestamp; this.bytes = bytes; } @CalledByNative public byte[] getBytes() { return bytes; } @CalledByNative public int getBytesPerSample() { return bytesPerSample; } @CalledByNative public int getChannelNums() { return channelNums; } @CalledByNative public int getSampleRataHz() { return sampleRataHz; } @CalledByNative public int getSamplesPerChannel() { return samplesPerChannel; } @CalledByNative public long getTimestamp() { return timestamp; } @Override public String toString() { return "AudioFrame{sampleRataHz=" + sampleRataHz + ", bytesPerSample=" + bytesPerSample + ", channelNums=" + channelNums + ", samplesPerChannel=" + samplesPerChannel + ", timestamp=" + timestamp + '}'; } }
属性
- samplesPerChannel
- 每个声道的采样点数。
- bytesPerSample
- 每个采样点的字节数: 对于 PCM 来说,一般使用 16 bit,即两个字节。
- channelNums
-
声道数量(如果是立体声,数据是交叉的)。
- 1: 单声道
- 2: 双声道
- sampleRataHz
- 每声道每秒的采样点数。
- bytes
-
声音数据缓存区(如果是立体声,数据是交叉存储的)。
缓存区数据大小
buffer
=samples
×channels
×bytesPerSample
。 - timestamp
- >音频帧的时间戳。
AudioParams
音频数据格式。
public class AudioParams { public int sampleRate = 0; public int channel = 0; public int mode = Constants.RAW_AUDIO_FRAME_OP_MODE_READ_ONLY; public int samplesPerCall = 0; @CalledByNative public AudioParams(int sampleRate, int channelCnt, int mode, int samplesPerCall) { this.sampleRate = sampleRate; this.channel = channelCnt; this.mode = mode; this.samplesPerCall = samplesPerCall; } }
- getRecordAudioParams:设置 onRecordAudioFrame 回调的数据格式。
- getPlaybackAudioParams:设置 onPlaybackAudioFrame 回调的数据格式。
- getMixedAudioParams:设置 onMixedAudioFrame 回调的数据格式。
- getEarMonitoringAudioParams:设置 onEarMonitoringAudioFrame 回调的数据格式。
- SDK 会通过 AudioParams 中的 samplesPerCall、sampleRate 和 channel 参数计算采样间隔,并根据该采样间隔触发 onRecordAudioFrame、onPlaybackAudioFrame、onMixedAudioFrame 和 onEarMonitoringAudioFrame 回调。
- 采样间隔 = samplesPerCall/(sampleRate × channel)。
- 请确保采样间隔不得小于 0.01 (s)。
属性
- sampleRate
- 数据的采样率,单位为 Hz,取值如下:
- 8000
- 16000(默认值)
- 32000
- 44100
- 48000
- channel
- 数据的声道数,取值如下:
- 1:单声道(默认值)
- 2:双声道
- mode
- 数据的使用模式,取值如下:
- RAW_AUDIO_FRAME_OP_MODE_READ_ONLY(0): 只读模式,例如: 若用户通过 Agora SDK 采集数据,自己进行旁路推流,则可以选择该模式。
- RAW_AUDIO_FRAME_OP_MODE_READ_WRITE(2): 读写模式, 例如: 若用户自己有音效处理模块,且想要根据实际需要对数据进行前处理(例如变声),则可以选择该模式。
- samplesPerCall
- 数据的采样点数,如旁路推流应用中通常为 1024。
AgoraRhythmPlayerConfig
虚拟节拍器配置。
public class AgoraRhythmPlayerConfig { public int beatsPerMeasure; public int beatsPerMinute; public AgoraRhythmPlayerConfig() { this.beatsPerMeasure = 4; this.beatsPerMinute = 60; } @CalledByNative public int getBeatsPerMeasure() { return beatsPerMeasure; } @CalledByNative public int getBeatsPerMinute() { return beatsPerMinute; } }
属性
- beatsPerMeasure
- 每小节的拍数,取值范围为 [1,9]。默认值为 4,即每小节包含 1 个强拍和 3 个弱拍。
- beatsPerMinute
- 节拍速度(拍/分钟),取值范围为 [60,360]。默认值为 60,即 1 分钟有 60 拍。
AudioRecordingConfiguration
录音配置。
public class AudioRecordingConfiguration { public String filePath; public int sampleRate; public boolean codec; public int fileRecordOption; public int quality; int recordingChannel; public AudioRecordingConfiguration() { sampleRate = 32000; codec = true; fileRecordOption = Constants.AUDIO_FILE_RECORDING_MIXED; quality = Constants.AUDIO_RECORDING_QUALITY_MEDIUM; recordingChannel = 1; } }
属性
- filePath
- 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如:
content://com.android.providers.media.documents/document/audio%203A14441
。注意:请确保你指定的路径存在并且可写。
- codec
- 设置是否编码音频数据:
true
: 将音频数据用 AAC 编码。false
:(默认)不编码音频数据,直接保存录制的音频数据。
- sampleRate
- 录音采样率(Hz)。
- 16000
- 32000 (默认)
- 44100
- 48000
注意:如果把该参数设为 44100 或 48000,为保证录音效果,Agora 推荐录制 WAV 文件或 quality 为 AUDIO_RECORDING_QUALITY_MEDIUM 或 AUDIO_RECORDING_QUALITY_HIGH 的 AAC 文件。
- fileRecordOption
-
录音内容:
- AUDIO_FILE_RECORDING_MIC (1):仅录制本地用户的音频。
- AUDIO_FILE_RECORDING_PLAYBACK (2):仅录制所有远端用户的音频。
- AUDIO_FILE_RECORDING_MIXED (3): (默认)录制本地和所有远端用户混音后的音频。
- quality
-
录音音质:
- AUDIO_RECORDING_QUALITY_LOW (0):低音质。例如,采样率为 32000 Hz,录音时长为 10 分钟的 AAC 文件大小约为 1.2 MB。
- AUDIO_RECORDING_QUALITY_MEDIUM (1):(默认)中音质。例如,采样率为 32000 Hz,录音时长为 10 分钟的 AAC 文件大小约为 2 MB。
- AUDIO_RECORDING_QUALITY_HIGH (2):高音质。例如,采样率为 32000 Hz,录音时长为 10 分钟的 AAC 文件大小约为 3.75 MB。
- AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3):超高音质。例如,采样率为 32000 Hz,录制 10 分钟的文件大小约为 7.5 M 左右。
注意:该参数仅适用于 AAC 文件。
- recordingChannel
- 录制的音频声道。目前支持如下取值:
- 1:(默认)单声道。
- 2: 双声道。
注:实际录制的音频声道与你采集的音频声道有关:- 如果采集的音频为单声道,recordingChannel 设为
2
, 则录制的音频为经过单声道数据拷贝后的双声道数据,而不是立体声。 - 如果采集的音频为双声道,recordingChannel 设为
1
,则录制的音频为经过双声道数据混合后的单声道数据。
AudioSpectrumInfo
音频频谱数据。
public class AudioSpectrumInfo { private float[] audioSpectrumData; private int dataLength; }
属性
- audioSpectrumData
-
音频频谱数据。Agora 将声音频率分为 256 个频域,通过该参数报告各频域的能量值,每个能量值的取值范围为 [-300,1],单位为 dBFS。
- dataLength
- 音频频谱数据长度为 256。
AudioVolumeInfo
用户音量信息。
public static class AudioVolumeInfo { public int uid; public int volume; public int vad; public double voicePitch; }
属性
- uid
-
用户 ID。
- 在本地用户的回调中,uid 为 0。
- 在远端用户的回调中,uid 为瞬时音量最高的远端用户(最多 3 位)的 ID。
- volume
- 用户的音量,取值范围为 [0,255]。如果用户调用了 startAudioMixing [2/2],则 volume 为用户混音后的音量。
- vad
-
本地用户的人声状态。
- 0:本地无人声。
- 1:本地有人声。
注意:- vad 无法报告远端用户的人声状态。对于远端用户,vad 的值始终为 1。
- 如需使用此参数,请在调用 enableAudioVolumeIndication 时设置 reportVad 为
true
。
- voicePitch
-
本地用户的人声音调(Hz)。取值范围为 [0.0,4000.0]。
注意: voicePitch 无法报告远端用户的人声音调。对于远端用户,voicePitch 的值始终为 0.0。
BeautyOptions
美颜选项。
public class BeautyOptions { public static final int LIGHTENING_CONTRAST_LOW = 0; public static final int LIGHTENING_CONTRAST_NORMAL = 1; public static final int LIGHTENING_CONTRAST_HIGH = 2; public int lighteningContrastLevel; public float lighteningLevel; public float smoothnessLevel; public float rednessLevel; public float sharpnessLevel; }
属性
- lighteningContrastLevel
-
对比度,常与 lighteningLevel 搭配使用。取值越大,明暗对比程度越大。
- LIGHTENING_CONTRAST_LOW (0):低对比度。
- LIGHTENING_CONTRAST_NORMAL (1):正常对比度。
- LIGHTENING_CONTRAST_HIGH (2):高对比度。
- lighteningLevel
-
美白程度,取值范围为 [0.0,1.0],其中 0.0 表示原始亮度,默认值为 0.6。取值越大,美白程度越大。
- smoothnessLevel
-
磨皮程度,取值范围为 [0.0,1.0],其中 0.0 表示原始磨皮程度,默认值为 0.5。取值越大,磨皮程度越大。
- rednessLevel
-
红润度,取值范围为 [0.0,1.0],其中 0.0 表示原始红润度,默认值为 0.1。取值越大,红润程度越大。
- sharpnessLevel
-
锐化程度,取值范围为 [0.0,1.0],其中 0.0 表示原始锐度,默认值为 0.3。取值越大,锐化程度越大。
CacheStatistics
缓存文件的统计数据。
public class CacheStatistics { @CalledByNative public CacheStatistics() { fileSize = 0; cacheSize = 0; downloadSize = 0; } private long fileSize; private long cacheSize; private long downloadSize; }
属性
- fileSize
- 本次播放的媒体文件的大小,单位为字节。
- cacheSize
- 本次播放的媒体文件需缓存的数据大小,单位为字节。
- downloadSize
- 本次播放已下载的媒体文件大小,单位为字节。
CameraCapturerConfiguration
摄像头采集配置。
public class CameraCapturerConfiguration { public enum CAMERA_DIRECTION { CAMERA_REAR(0), CAMERA_FRONT(1); } public CAMERA_DIRECTION cameraDirection; static public class CaptureFormat { public int width; public int height; public int fps; } public CaptureFormat captureFormat; }
属性
- cameraDirection
- 摄像头方向设置。详见 CAMERA_DIRECTION。
- captureFormat
- 详见 CaptureFormat。
CAMERA_DIRECTION
摄像头方向。
枚举值
- CAMERA_REAR
- 后置摄像头。
- CAMERA_FRONT
- 前置摄像头。
CaptureFormat
视频帧格式。
static public class CaptureFormat { public int width; public int height; public int fps; }
属性
- width
- 视频帧的宽度(px)。
- height
- 视频帧的高度(px)。
- fps
- 视频帧的帧率。
ChannelMediaInfo
ChannelMediaInfo 类定义。
public class ChannelMediaInfo {
public String channelName = null;
public String token = null;
public int uid = 0;
}
属性
- channelName
- 频道名。
- token
- 能加入频道的 Token。
- uid
- 用户 ID。
ChannelMediaOptions
频道媒体设置选项。
public class ChannelMediaOptions { public Boolean publishCameraTrack; public Boolean publishScreenCaptureVideo; public Boolean publishScreenCaptureAudio; public Boolean publishCustomAudioTrack; public Boolean publishDirectCustomAudioTrack; public Boolean publishCustomVideoTrack; public Boolean publishEncodedVideoTrack; public Boolean publishMediaPlayerAudioTrack; public Boolean publishMediaPlayerVideoTrack; public Boolean publishRhythmPlayerTrack; public Integer publishMediaPlayerId; public Boolean publishMicrophoneTrack; public Boolean autoSubscribeAudio; public Boolean autoSubscribeVideo; public Boolean enableAudioRecordingOrPlayout; public Integer clientRoleType; public Integer audienceLatencyLevel; public Integer defaultVideoStreamType; public Integer channelProfile; public Integer audioDelayMs; public Integer mediaPlayerAudioDelayMs; public String token; public Boolean enableBuiltInMediaEncryption; public Integer publishCustomAudioSourceId; public Integer customVideoTrackId; public Boolean isAudioFilterable; public Boolean isInteractiveAudience;
true
;
publishCameraTrack、publishScreenCaptureVideo、publishCustomVideoTrack 或 publishEncodedVideoTrack 之中同一时间只能有一个为 true
。属性
- publishCameraTrack
- 设置是否发布摄像头采集的视频:
true
:(默认)发布摄像头采集的视频。false
:不发布摄像头采集的视频。
- publishMicrophoneTrack
- 设置是否发布麦克风采集到的音频:
true
:(默认)发布麦克风采集到的音频。false
:不发布麦克风采集到的音频。
注: 自 v4.0.0 起,该参数名称由 publishAudioTrack 改为 publishMicrophoneTrack。 - publishScreenCaptureVideo
-
设置是否发布屏幕采集的视频:
-
true
:发布屏幕采集到的视频。 -
false
:(默认)不发布屏幕采集到的视频。
-
-
设置是否发布屏幕采集的视频:
-
true
:发布屏幕采集到的视频。 -
false
:(默认)不发布屏幕采集到的视频。
-
- publishScreenCaptureAudio
-
设置是否发布屏幕采集的音频:
true
:发布屏幕采集到的音频。false
:(默认)不发布屏幕采集到的音频。
- publishCustomAudioTrack
- 设置是否发布自定义采集的音频:
true
:发布自定义采集到的音频。false
:(默认)不发布自定义采集到的音频。
- publishCustomAudioSourceId
- 待发布的自定义音频源的 ID。默认值为 0。
如果你已在 setExternalAudioSource [2/2] 中设置了 sourceNumber 大于 1,SDK 会创建对应数量的自采集音频轨道,并从 0 开始为每一个音频轨道分配一个 ID。
- publishCustomVideoTrack
- 设置是否发布自定义采集的视频:
true
:发布自定义采集的视频。false
:(默认)不发布自定义采集到的视频。
- publishEncodedVideoTrack
- 设置是否发布编码后的视频:
true
:发布编码后的视频 。false
:(默认)不发布编码后的视频。
- publishMediaPlayerAudioTrack
- 设置是否发布媒体播放器的音频:
true
:发布媒体播放器的音频。false
:(默认)不发布媒体播放器的音频。
- publishMediaPlayerVideoTrack
- 设置是否发布媒体播放器的视频:
true
:发布媒体播放器的视频。false
:(默认)不发布媒体播放器的视频。
- autoSubscribeAudio
- 设置是否自动订阅所有音频流:
-
true
:(默认)自动订阅所有音频流。 -
false
:不自动订阅任何音频流。
-
- autoSubscribeVideo
- 设置是否自动订阅所有视频流:
-
true
:(默认)自动订阅所有视频流。 -
false
:不自动订阅任何视频流。
-
- enableAudioRecordingOrPlayout
- 设置是否开启音频录制或播放:
-
true
:(默认)开启音频录制或播放。 -
false
:不开启音频录制或播放。
-
- publishMediaPlayerId
- 待发布的媒体播放器的 ID。默认值为 0。
- clientRoleType
-
用户的角色:
- CLIENT_ROLE_BROADCASTER (1):主播。
- CLIENT_ROLE_AUDIENCE (2):观众。
- audienceLatencyLevel
- 观众端延时级别。
- AUDIENCE_LATENCY_LEVEL_LOW_LATENCY(1): 低延时。
- AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY(2): (默认)超低延时。
- defaultVideoStreamType
-
默认订阅的视频流类型:
- VIDEO_STREAM_HIGH (0):视频大流,即高分辨率、高码率视频流。
- VIDEO_STREAM_LOW (1):视频小流,即低分辨率、低码率视频流。
- channelProfile
-
频道使用场景。
- CHANNEL_PROFILE_COMMUNICATION (0):通信。当频道中只有两个用户时,建议使用该场景。
- CHANNEL_PROFILE_LIVE_BROADCASTING (1):直播。当频道中超过两个用户时,建议使用该场景。
- CHANNEL_PROFILE_GAME (2):该属性已废弃。
- CHANNEL_PROFILE_CLOUD_GAMING (3):互动。该场景对延时进行了优化。如果你的场景中有用户需要频道互动, 建议使用该场景。
- token
-
(可选)在服务端生成的用于鉴权的动态密钥。详见使用 Token 鉴权。
警告:- 该参数仅在调用 updateChannelMediaOptions 或 updateChannelMediaOptionsEx 时生效。
- 请确保用于生成 token 的 App ID、频道名和用户名和 create [2/2] 方法初始化引擎时用的 App ID,以及 joinChannel [2/2] 或 joinChannelEx 方法加入频道时设置的频道名和用户名是一致的。
- publishRhythmPlayerTrack
- 设置是否发布虚拟节拍器声音至远端:
true
:(默认)发布。本地用户和远端用户都能听到节拍器。false
:不发布。只有本地用户能听到节拍器。
- isInteractiveAudience
- 是否开启互动观众模式:
true
:开启互动观众模式。成功开启后,本地用户作为互动观众,收到低延时和流畅的远端用户视频。false
:(默认)不开启互动观众模式。本地用户作为普通观众,收到默认设置的远端用户视频。
注意:- 该参数用于实现跨直播间连麦场景。连麦主播需要调用 joinChannelEx 方法,以观众身份加入对方的直播间,并将 isInteractiveAudience 设置为
true
。 - 仅当用户角色为 CLIENT_ROLE_AUDIENCE 时,该参数生效。
- customVideoTrackId
- 调用 createCustomVideoTrack 方法返回的视频轨道 ID。默认值为 0。
- isAudioFilterable
- 设置是否让当前音频流根据音强算法参与选流。
true
:(默认)参与音强选流。如未开启音强选流功能,该参数不会生效。false
:不参与音强选流。
注意: 如需启用该功能,请联系 sales@agora.io。
ChannelMediaRelayConfiguration
ChannelMediaRelayConfiguration 类定义。
public class ChannelMediaRelayConfiguration {
private ChannelMediaInfo srcInfo = null;
private Map<String, ChannelMediaInfo> destInfos = null;
public ChannelMediaRelayConfiguration() {
destInfos = new HashMap<String, ChannelMediaInfo>();
srcInfo = new ChannelMediaInfo(null, null, 0);
}
public void setSrcChannelInfo(ChannelMediaInfo srcInfo) {
this.srcInfo = srcInfo;
}
属性
- srcInfo
-
源频道信息 ChannelMediaInfo,包含如下成员:
-
channelName
:源频道名。默认值为NULL
,表示 SDK 填充当前的频道名。 -
uid
:标识源频道中的转发媒体流的 UID。默认值为 0,表示 SDK 随机分配一个uid
。请确保设为 0。 -
token
:能加入源频道的token
。由你在srcInfo
中设置的channelName
和uid
生成。- 如未启用 App Certificate,可直接将该参数设为默认值
NULL
,表示 SDK 填充 App ID。 - 如已启用 App Certificate,则务必填入使用
channelName
和uid
生成的token
,且其中的uid
必须为 0。
- 如未启用 App Certificate,可直接将该参数设为默认值
-
- destInfos
-
目标频道信息 ChannelMediaInfo,包含如下成员:
-
channelName
:目标频道的频道名。 -
uid
:标识目标频道中的转发媒体流的 UID。取值范围为 0 到(2 32-1),请确保与目标频道中的所有 UID 不同。默认值为 0,表示 SDK 随机分配一个 UID。请确保不要将该参数设为目标频道的主播的 UID,并与目标频道中的所有 UID 都不同。 -
token
:能加入目标频道的token
。由你在destInfos
中设置的channelName
和uid
生成。- 如未启用 App Certificate,可直接将该参数设为默认值
NULL
,表示 SDK 填充 App ID。 - 如已启用 App Certificate,则务必填入使用
channelName
和uid
生成的token
。
- 如未启用 App Certificate,可直接将该参数设为默认值
-
ContentInspectConfig
视频截图上传配置。
public class ContentInspectConfig {
public final static int CONTENT_INSPECT_TYPE_INVALID = 0;
public final static int CONTENT_INSPECT_TYPE_SUPERVISE = 2;
public static final int MAX_CONTENT_INSPECT_MODULE_COUNT = 32;
public String extraInfo;
public ContentInspectModule[] modules;
public int moduleCount;
public static class ContentInspectModule {
public int type;
public int interval;
public ContentInspectModule() {
type = CONTENT_INSPECT_TYPE_INVALID;
interval = 0;
}
}>
参数
- CONTENT_INSPECT_TYPE_INVALID
- (默认)无实际功能。请不要将 type 设为该值。
- CONTENT_INSPECT_SUPERVISE
- 视频截图上传。SDK 会对本地用户发送的视频进行截图并上传。
- extraInfo
-
附加信息,最大长度为 1024 字节。
SDK 会将附加信息和截图一起上传至 Agora 服务器;截图完成后,Agora 服务器会将附加信息随回调通知一起发送给你的服务器。
- modules
-
功能模块。详见 ContentInspectModule。
最多支持配置 32 个 ContentInspectModule 实例,MAX_CONTENT_INSPECT_MODULE_COUNT 的取值范围为 [1,32] 中的整数。
注意: 一个功能模块最多只能配置一个实例。目前仅支持截图上传功能。 - moduleCount
- 功能模块数,即配置的 ContentInspectModule 实例的数量,必须与 modules 中配置的实例个数一致。最大值为 32。
ContentInspectModule
ContentInspectModule 结构体,用于配置视频截图上传的频率。
public static class ContentInspectModule {
public int type;
public int interval;
public ContentInspectModule() {
type = CONTENT_INSPECT_TYPE_INVALID;
interval = 0;
}
属性
- type
-
功能模块的类型:
- CONTENT_INSPECT_TYPE_INVALID(0):(默认)该功能模块无实际功能。请不要设为该值。
- CONTENT_INSPECT_TYPE_SUPERVISE(2):视频截图上传。SDK 会对视频流进行截图并上传。
- interval
- 视频截图上传的间隔,单位为秒,取值必须大于 0。默认值为 0,表示不进行截图上传。推荐值为 10 秒,你也可以根据业务需求自行调整。
ClientRoleOptions
用户角色具体设置。
public class ClientRoleOptions {
public int audienceLatencyLevel;
@CalledByNative
public int getAudienceLatencyLevel() {
return audienceLatencyLevel;
}
}
属性
- audienceLatencyLevel
- 观众端延时级别。
- AUDIENCE_LATENCY_LEVEL_LOW_LATENCY(1): 低延时。
- AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY(2): (默认)超低延时。
ColorEnhanceOptions
色彩增强选项。
public class ColorEnhanceOptions { public float strengthLevel; public float skinProtectLevel; public ColorEnhanceOptions() { strengthLevel = 0.5f; skinProtectLevel = 1f; } public ColorEnhanceOptions(float strength, float skinProtect) { strengthLevel = strength; skinProtectLevel = skinProtect; } }
属性
- strengthLevel
- 色彩增强程度。取值范围为 [0.0,1.0]。
0.0
表示不对视频进行色彩增强。取值越大,色彩增强的程度越大。默认值为0.5
。 - skinProtectLevel
肤色保护程度。取值范围为 [0.0,1.0]。
0.0
表示不对肤色进行保护。取值越大,肤色保护的程度越大。默认值为1.0
。- 当色彩增强程度较大时,人像肤色会明显失真,你需要设置肤色保护程度;
- 肤色保护程度较大时,色彩增强效果会略微降低。
DataStreamConfig
数据流设置。
public class DataStreamConfig { public boolean syncWithAudio = false; public boolean ordered = false; }
下表展示不同的参数设置下,SDK 的行为:
syncWithAudio |
ordered |
SDK 行为 |
---|---|---|
false |
false |
接收端接收到数据包后,SDK 立刻触发 onStreamMessage 回调。 |
true |
false |
如果数据包的延迟在音频延迟的范围内,SDK 会在播放音频的同时触发与该音频包同步的 onStreamMessage 回调。如果数据包的延迟超出了音频延迟,SDK 会在接收到该数据包时立刻触发 onStreamMessage 回调;此情况会造成音频包和数据包的不同步。 |
false |
true |
如果数据包的延迟在 5 秒以内,SDK 会修正数据包的乱序问题。如果数据包的延迟超出 5 秒,SDK 会丢弃该数据包。 |
true |
true |
如果数据包的延迟在音频延迟的范围内,SDK 会修正数据包的乱序问题。如果数据包的延迟超出音频延迟,SDK 会丢弃该数据包。 |
属性
- syncWithAudio
-
是否与本地发送的音频流同步。
true
: 数据流与音频流同步。false
: 数据流与音频流不同步。
- ordered
-
是否保证接收到的数据按发送的顺序排列。
true
: 保证 SDK 按照发送方发送的顺序输出数据包。false
: 不保证 SDK 按照发送方发送的顺序输出数据包。
true
。
DeviceInfo
音频设备信息。
public class DeviceInfo {
public boolean isLowLatencyAudioSupported;
@CalledByNative
public DeviceInfo(boolean isLowLatencyAudioSupported) {
this.isLowLatencyAudioSupported = isLowLatencyAudioSupported;
}
}
属性
- isLowLatencyAudioSupported
- 是否支持极低延时音频采集和播放:
true
: 支持false
: 不支持
DirectCdnStreamingMediaOptions
主播端的媒体选项。
public class DirectCdnStreamingMediaOptions { public Boolean publishCameraTrack; public Boolean publishMicrophoneTrack; public Boolean publishCustomAudioTrack; public Boolean publishCustomVideoTrack; public Integer customVideoTrackId; public DirectCdnStreamingMediaOptions() { publishCameraTrack = false; publishMicrophoneTrack = false; publishCustomAudioTrack = false; publishCustomVideoTrack = false; } }
属性
- publishCameraTrack
- 设置是否发布摄像头采集的视频。
true
: 发布摄像头采集的视频。false
:(默认)不发布摄像头采集的视频。
- publishMicrophoneTrack
- 设置是否发布麦克风采集的音频。
true
: 发布麦克风采集的音频。false
:(默认)不发布麦克风采集的音频。
- publishCustomAudioTrack
- 设置是否发布自定义采集的音频。
true
: 发布自定义采集的音频。false
:(默认)不发布自定义采集的音频。
- publishCustomVideoTrack
- 设置是否发布自定义采集的视频。
true
: 发布自定义采集的视频。false
:(默认)不发布自定义采集的视频。
- customVideoTrackId
- 调用 createCustomVideoTrack 方法返回的视频轨道 ID。默认值为 0。
DirectCdnStreamingStats
当前 CDN 推流的统计数据。
public class DirectCdnStreamingStats { public int videoWidth; public int videoHeight; public int fps; public int videoBitrate; public int audioBitrate; public DirectCdnStreamingStats() { videoWidth = 0; videoHeight = 0; fps = 0; videoBitrate = 0; audioBitrate = 0; } }
属性
- videoWidth
- 视频的宽度(px)。
- videoHeight
- 视频的高度(px)。
- fps
- 当前视频帧率(fps)。
- videoBitrate
- 当前视频码率(bps)。
- audioBitrate
- 当前音频码率(bps)。
EchoTestConfiguration
音视频通话回路测试的配置。
public class EchoTestConfiguration { public SurfaceView view = null; public boolean enableAudio = true; public boolean enableVideo = true; public String token = null; public String channelId = null; @CalledByNative public EchoTestConfiguration( SurfaceView view, boolean enableAudio, boolean enableVideo, String token, String channelId) { this.view = view; this.enableAudio = enableAudio; this.enableVideo = enableVideo; this.token = token; this.channelId = channelId; } @CalledByNative public EchoTestConfiguration() { this.view = null; this.enableAudio = true; this.enableVideo = true; this.token = null; this.channelId = null; } }
属性
- view
- 用于渲染本地用户视频的视图。该参数仅适用于测试视频设备的场景,即该结构体中 enableVideo 为 true。
- enableAudio
- 是否开启音频设备:
- true: (默认) 开启音频设备。如需测试音频设备,请设为 true。
- false: 关闭音频设备。
- enableVideo
- 是否开启视频设备:
- true: (默认) 开启视频设备。如需测试视频设备,请设为 true。
- false: 关闭视频设备。
- token
- 用于保证音视频通话回路测试安全性的 Token。如果你在 Agora 控制台未启用 App 证书,则不需要向该参数传值;如果你在 Agora 控制台已启用 App 证书,则必须向该参数传入 Token,且在你生成 Token 时使用的
uid
必须为 0xFFFFFFFF,使用的频道名必须为标识每个音视频通话回路测试的频道名。服务端生成 Token 的方式请参考使用 Token 鉴权。 - channelId
- 标识每个音视频通话回路测试的频道名。为保证回路测试功能正常,同一个项目(App ID) 的各终端用户在不同设备上做音视频通话回路测试时,传入的标识每个回路测试的频道名不能相同。
EncodedVideoFrameInfo
外部编码视频帧的信息。
public class EncodedVideoFrameInfo { public int codecType; public int width; public int height; public int framesPerSecond; public int frameType; public int rotation; public int trackId; public long captureTimeMs; public int uid; public int streamType; public EncodedVideoFrameInfo() { codecType = Constants.VIDEO_CODEC_H264; width = 0; height = 0; framesPerSecond = 0; frameType = Constants.VIDEO_FRAME_TYPE_BLANK_FRAME; rotation = Constants.VIDEO_ORIENTATION_0; trackId = 0; captureTimeMs = 0; uid = 0; streamType = Constants.VIDEO_STREAM_HIGH; } @CalledByNative public EncodedVideoFrameInfo(int codecType, int width, int height, int framesPerSecond, int frameType, int rotation, int trackId, long captureTimeMs, int uid, int streamType) { this.codecType = codecType; this.width = width; this.height = height; this.framesPerSecond = framesPerSecond; this.frameType = frameType; this.rotation = rotation; this.trackId = trackId; this.captureTimeMs = captureTimeMs; this.uid = uid; this.streamType = streamType; } @CalledByNative public int getCodecType() { return codecType; } @CalledByNative public int getWidth() { return width; } @CalledByNative public int getHeight() { return height; } @CalledByNative public int getFramesPerSecond() { return framesPerSecond; } @CalledByNative public int getFrameType() { return frameType; } @CalledByNative public int getRotation() { return rotation; } @CalledByNative public int getTrackId() { return trackId; } @CalledByNative public long getCaptureTimeMs() { return captureTimeMs; } @CalledByNative public int getUid() { return uid; } @CalledByNative public int getStreamType() { return streamType; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("codecType=").append(codecType); sb.append(" width=").append(width); sb.append(" height=").append(height); sb.append(" framesPerSecond=").append(framesPerSecond); sb.append(" frameType=").append(frameType); sb.append(" rotation=").append(rotation); sb.append(" trackId=").append(trackId); sb.append(" captureTimeMs=").append(captureTimeMs); sb.append(" uid=").append(uid); sb.append(" streamType=").append(streamType); return sb.toString(); } }
属性
- codecType
- 视频编解码类型:
- 1:VP8。
- 2:(默认)H264。
- width
- 视频帧的宽度 (px)。
- height
- 视频帧的高度 (px)。
- framesPerSecond
-
每秒的视频帧数。
当该参数不为
0
时,你可以用它计算外部编码视频帧的 Unix 时间戳。 - frameType
- 视频帧的类型:
- 0:(默认)VIDEO_FRAME_TYPE_BLANK_FRAME,空白帧。
- 3:VIDEO_FRAME_TYPE_KEY_FRAME,关键帧。
- 4:VIDEO_FRAME_TYPE_DELTA_FRAME,Delta 帧。
- 5:VIDEO_FRAME_TYPE_B_FRAME,B 帧。
- 6:VIDEO_FRAME_TYPE_UNKNOW,未知。
- rotation
- 视频帧的旋转信息,取值如下:
- 0:(默认)不旋转。
- 90:顺时针旋转 90 度。
- 180:顺时针旋转 180 度。
- 270:顺时针旋转 270 度。
- trackId
- 预留参数。
- captureTimeMs
- 采集外部编码视频帧的 Unix 时间戳 (ms)。
- uid
- 推送外部编码视频帧的用户 ID。
- streamType
- 视频流类型。
EncryptionConfig
配置内置加密模式和密钥。
public class EncryptionConfig { public enum EncryptionMode { AES_128_XTS(1), AES_128_ECB(2), AES_256_XTS(3), SM4_128_ECB(4), AES_128_GCM(5), AES_256_GCM(6), AES_128_GCM2(7), AES_256_GCM2(8), MODE_END(9); private int value; private EncryptionMode(int v) { value = v; } public int getValue() { return this.value; } }
属性
- encryptionMode
-
内置加密模式。详见 EncryptionMode。Agora 推荐使用
AES_128_GCM2
或AES_256_GCM2
加密模式。这两种模式支持使用盐,安全性更高。 - encryptionKey
-
内置加密密钥,字符串类型,长度无限制。Agora 推荐使用 32 字节的密钥。
注意: 如果未指定该参数或将该参数设置为NULL
,则无法启用内置加密,且 SDK 会返回错误码-2
。 - encryptionKdfSalt
-
盐,长度为 32 字节。Agora 推荐你在服务端使用 OpenSSL 生成盐。详见《媒体流加密》。
注意: 只有在AES_128_GCM2
或AES_256_GCM2
加密模式下,该参数才生效。此时,需确保填入该参数的值不全为0
。
AgoraVideoFrame
外部视频帧。
public class AgoraVideoFrame { public static final int FORMAT_NONE = -1; public static final int FORMAT_TEXTURE_2D = 10; public static final int FORMAT_TEXTURE_OES = 11; public static final int FORMAT_I420 = 1; public static final int FORMAT_BGRA = 2; public static final int FORMAT_NV21 = 3; public static final int FORMAT_RGBA = 4; public static final int FORMAT_I422 = 16; public static final int BUFFER_TYPE_NONE = -1; public static final int BUFFER_TYPE_BUFFER = 1; public static final int BUFFER_TYPE_ARRAY = 2; public static final int BUFFER_TYPE_TEXTURE = 3; public int format; public long timeStamp; public int stride; public int height; public int textureID; public boolean syncMode; public float[] transform; public javax.microedition.khronos.egl.EGLContext eglContext11; public android.opengl.EGLContext eglContext14; public byte[] buf; public int cropLeft; public int cropTop; public int cropRight; public int cropBottom; public int rotation; }
- 弃用:
- 该类已废弃。
属性
- format
- 视频数据的格式:
- 10:TEXTURE_2D。
- 11:TEXTURE_OES,通常摄像头采集的数据为这种格式。
- 1:I420。
- 3:NV21。
- 4:RGBA。
- 16:I422。
- buf
- 视频缓冲区。
- stride
- 传入视频帧的行间距,单位为像素而不是字节。对于 Texture,该值指的是 Texture 的宽度。
- height
- 传入视频帧的高度。
- textureID
- 该帧的 Texture ID。该参数仅适用于 Texture 格式的视频数据。
- syncMode
- 设置是否开启同步模式,开启后 SDK 会在 Texture 处理时进行等待。该参数仅适用于 Texture 格式的视频数据。
true
:开启同步模式。false
:不开启同步模式。
- transform
- Texture 帧额外的转换。该参数仅适用于 Texture 格式的视频数据。
- eglContext11
- EGLContext11。该参数仅适用于 Texture 格式的视频数据。
- eglContext14
- EGLContext14。该参数仅适用于 Texture 格式的视频数据。
- 该参数仅适用于 Texture 格式的视频数据。指 MetaData 的数据缓冲区,默认值为
NULL
。 - 该参数仅适用于 Texture 格式的视频数据。指 MetaData 的大小,默认值为
0
。 - cropLeft
- 原始数据相关字段。指定左边裁剪掉的像素数量。默认为 0。
- cropTop
- 原始数据相关字段。指定顶边裁剪掉的像素数量。默认为 0。
- cropRight
- 原始数据相关字段。指定右边裁剪掉的像素数量。默认为 0。
- cropBottom
- 原始数据相关字段。指定底边裁剪掉的像素数量。默认为 0。
- rotation
- 原始数据相关字段。指定是否对传入的视频组做顺时针旋转操作,可选值为 0, 90, 180, 270。默认为 0。
- timestamp
- 传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步。
ImageTrackOptions
垫片图片的设置选项。
public class ImageTrackOptions { public String getImageUrl() { return imageUrl; } public int getFps() { return fps; } public ImageTrackOptions(String url, int fps) { this.imageUrl = url; this.fps = fps; } }
属性
- imageUrl
- 垫片图片的 URL,目前仅支持本地 PNG 格式的图片。支持从本地绝对路径或相对路径添加垫片图片。
- fps
- 视频帧率,取值范围为 [1,30]。默认值为 1。
LastmileProbeConfig
Last mile 网络探测配置。
public class LastmileProbeConfig { public boolean probeUplink; public boolean probeDownlink; public int expectedUplinkBitrate; public int expectedDownlinkBitrate; public LastmileProbeConfig() {} }
属性
- probeUplink
-
是否探测上行网络。有些用户,如直播频道中的普通观众,不需要进行网络探测:
true
: 探测上行网络。false
: 不探测上行网络。
- probeDownlink
-
是否探测下行网络:
true
: 探测下行网络。false
: 不探测下行网络。
- expectedUplinkBitrate
- 用户期望的最高发送码率,单位为 bps,范围为 [100000,5000000]。Agora 推荐参考 setVideoEncoderConfiguration 中的码率值设置该参数的值。
- expectedDownlinkBitrate
- 用户期望的最高接收码率,单位为 bps,范围为 [100000,5000000]。
LastmileProbeOneWayResult
上行或下行 Last mile 网络质量探测结果。
public static class LastmileProbeOneWayResult { public int packetLossRate; public int jitter; public int availableBandwidth; }
属性
- packetLossRate
- 丢包率。
- jitter
- 网络抖动 (ms)。
- availableBandwidth
- 可用网络带宽预估 (bps)。
LastmileProbeResult
上下行 Last mile 网络质量探测结果。
public static class LastmileProbeResult { public static class LastmileProbeOneWayResult { public int packetLossRate; public int jitter; public int availableBandwidth; } public short state; public int rtt; public LastmileProbeOneWayResult uplinkReport = new LastmileProbeOneWayResult(); public LastmileProbeOneWayResult downlinkReport = new LastmileProbeOneWayResult(); }
属性
- state
-
Last-mile 质量探测结果的状态,有如下几种:
- LASTMILE_PROBE_RESULT_COMPLETE (1):表示本次 Last-mile 质量探测是完整的。
- LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE (2):表示本次 Last-mile 质量探测未进行带宽预测,因此结果不完整。一个可能的原因是测试资源暂时受限。
- LASTMILE_PROBE_RESULT_UNAVAILABLE (3):未进行 Last-mile 质量探测。一个可能的原因是网络连接中断。
- uplinkReport
- 上行网络质量报告。详见 LastmileProbeOneWayResult。
- downlinkReport
- 下行网络质量报告。详见 LastmileProbeOneWayResult。
- rtt
- 往返时延 (ms)。
LeaveChannelOptions
离开频道的选项。
public class LeaveChannelOptions { public boolean stopAudioMixing; public boolean stopAllEffect; public boolean stopMicrophoneRecording; }
属性
- stopAudioMixing
- 离开频道时,是否停止播放音乐文件及混音:
true
:(默认)停止播放音乐文件及混音。false
: 不停止播放音乐文件及混音。
- stopAllEffect
- 离开频道时,是否停止播放音效:
true
:(默认)停止播放音效。false
: 不停止播放音效。
- stopMicrophoneRecording
- 离开频道时,是否停止麦克风采集:
true
:(默认)停止麦克风采集。false
: 不停止麦克风采集。
LiveTranscoding
旁路推流的转码属性。
public class LiveTranscoding { public enum AudioSampleRateType { TYPE_32000(32000), TYPE_44100(44100), TYPE_48000(48000); private int value; private AudioSampleRateType(int v) { value = v; } public static int getValue(AudioSampleRateType type) { return type.value; } } public enum VideoCodecProfileType { BASELINE(66), MAIN(77), HIGH(100); private int value; private VideoCodecProfileType(int v) { value = v; } public static int getValue(VideoCodecProfileType type) { return type.value; } } public enum AudioCodecProfileType { LC_AAC(0), HE_AAC(1), HE_AAC(1); HE_AAC_V2(2); private int value; private AudioCodecProfileType(int v) { value = v; } public static int getValue(AudioCodecProfileType type) { return type.value; } } public enum VideoCodecType { H264(1), H265(2); private int value; private VideoCodecType(int v) { value = v; } public static int getValue(VideoCodecType type) { return type.value; } } public int width; public int height; public int videoBitrate; public int videoFramerate; public boolean lowLatency; @Deprecated public boolean lowLatency; public int videoGop; public AgoraImage watermark; private ArrayList<AgoraImage> watermarkList; public void addWatermark(AgoraImage watermark) { if (watermarkList == null) { watermarkList = new ArrayList<AgoraImage>(); } watermarkList.add(watermark); } public boolean removeWatermark(AgoraImage watermark) { if (watermarkList == null) { return false; } return watermarkList.remove(watermark); } public ArrayList<AgoraImage> getWatermarkList() { return watermarkList; } public AgoraImage backgroundImage; private ArrayList<AgoraImage> backgroundImageList; public void addBackgroundImage(AgoraImage backgroundImage) { if (backgroundImageList == null) { backgroundImageList = new ArrayList<AgoraImage>(); } backgroundImageList.add(backgroundImage); } public boolean removeBackgroundImage(AgoraImage backgroundImage) { if (backgroundImageList == null) { return false; } return backgroundImageList.remove(backgroundImage); } public ArrayList<AgoraImage> getBackgroundImageList() { return backgroundImageList; } public AudioSampleRateType audioSampleRate; public int audioBitrate; public int audioChannels; public AudioCodecProfileType audioCodecProfile; public VideoCodecProfileType videoCodecProfile; public VideoCodecType videoCodecType; @Deprecated public int userCount; @Deprecated public int backgroundColor; public String userConfigExtraInfo; public String metadata; @Deprecated public String metadata; private Map<Integer, TranscodingUser> transcodingUsers; private Map<String, Boolean> advancedFeatures; public void setAdvancedFeatures(String featureName, Boolean opened) { advancedFeatures.put(featureName, opened); } public Map<String, Boolean> getAdvancedFeatures() { return advancedFeatures; } public static class TranscodingUser { public int uid; public String userId; public String userId; public int x; public int y; public int width; public int height; public int zOrder; public float alpha; public int audioChannel; public TranscodingUser() { alpha = 1; } } public LiveTranscoding() { width = 360; height = 640; videoBitrate = 400; videoCodecProfile = VideoCodecProfileType.HIGH; videoCodecType = VideoCodecType.H264; videoGop = 30; videoFramerate = 15; watermark = new AgoraImage(); backgroundImage = new AgoraImage(); lowLatency = false; audioSampleRate = AudioSampleRateType.TYPE_44100; audioBitrate = 48; audioChannels = 1; audioCodecProfile = AudioCodecProfileType.LC_AAC; transcodingUsers = new HashMap<>(); advancedFeatures = new HashMap<>(); backgroundColor = 0xFF000000; userConfigExtraInfo = null; metadata = null; } public int addUser(TranscodingUser user) { if (user == null || user.uid == 0) { return -Constants.ERR_INVALID_ARGUMENT; } transcodingUsers.put(user.uid, user); userCount = transcodingUsers.size(); return Constants.ERR_OK; } public final ArrayList<TranscodingUser> getUsers() { Collection<TranscodingUser> values = transcodingUsers.values(); return new ArrayList<>(values); } public void setUsers(ArrayList<TranscodingUser> users) { transcodingUsers.clear(); if (users != null) { for (TranscodingUser user : users) { transcodingUsers.put(user.uid, user); } } userCount = transcodingUsers.size(); } public void setUsers(Map<Integer, TranscodingUser> users) { transcodingUsers.clear(); if (users != null) { transcodingUsers.putAll(users); } userCount = transcodingUsers.size(); } public int removeUser(int uid) { if (!transcodingUsers.containsKey(uid)) return -Constants.ERR_INVALID_ARGUMENT; transcodingUsers.remove(uid); userCount = transcodingUsers.size(); return Constants.ERR_OK; } public int getUserCount() { return transcodingUsers.size(); } public int getBackgroundColor() { return this.backgroundColor; } public void setBackgroundColor(int color) { this.backgroundColor = color; } public void setBackgroundColor(int red, int green, int blue) { this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); } @Deprecated public int getRed() { return (backgroundColor >> 16) & 0x0ff; } @Deprecated public int getGreen() { return (backgroundColor >> 8) & 0x0ff; } @Deprecated public int getBlue() { return backgroundColor & 0x0ff; } @Deprecated public void setRed(int red) { int green = getGreen(); int blue = getBlue(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); } @Deprecated public void setGreen(int green) { int red = getRed(); int blue = getBlue(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); } @Deprecated public void setBlue(int blue) { int red = getRed(); int green = getGreen(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); } }
属性
- width
-
推流视频的总宽度,默认值 360,单位为像素。
- 如果推视频流,
width
取值范围为 [64,1920]。如果取值低于 64,Agora 服务器会自动调整为 64; 如果取值高于 1920,Agora 服务器会自动调整为 1920。 - 如果推音频流,请将
width
和height
设为 0。
- 如果推视频流,
- height
-
推流视频的总高度,默认值 640,单位为像素。
- 如果推视频流,
height
取值范围为 [64,1080]。如果取值低于 64,Agora 服务器会自动调整为 64; 如果取值高于 1080,Agora 服务器会自动调整为 1080。 - 如果推音频流,请将
width
和height
设为 0。
- 如果推视频流,
- videoBitrate
-
用于旁路直播的输出视频的码率。单位为 Kbps。400 Kbps 为默认值。
你可以根据视频属性参考表中的码率值进行设置;如果设置的码率超出合理范围,Agora 服务器会在合理区间内自动调整码率值。
- videoFrameRate
-
用于旁路直播的输出视频的帧率。取值范围是 (0,30],单位为 fps。15 fps 为默认值。
注意: Agora 服务器会将高于 30 fps 的帧率统一调整为 30 fps。 - lowLatency
-
- 弃用
- Agora 不推荐使用。
低延时模式
true
: 低延时,不保证画质。false
:(默认值)高延时,保证画质。
- videoGop
- 用于旁路直播的输出视频的 GOP(Group of Pictures)。单位为帧。默认值为 30。
- videoCodecProfile
-
用于旁路直播的输出视频的编码规格。可以设置为 66、77 或 100,详见 VideoCodecProfileType。
注意: 如果你把这个参数设为其他值,Agora 服务器会将其调整为默认值。 - videoCodecType
- 用于旁路直播的输出视频的编解码类型。详见 VideoCodecType。
- transcodingUsers
-
用于管理参与旁路直播的视频转码合图的用户。最多支持 17 人同时参与转码合图。详见 TranscodingUser。
- userConfigExtraInfo
-
预留参数:用户自定义的发送到旁路推流客户端的信息,用于填充 H264/H265 视频中 SEI 帧内容。长度限制:4096 字节。关于 SEI 的详细信息,详见 SEI 帧相关问题。
- backgroundColor
-
- 弃用
- 已废弃,Agora 不推荐使用。请改用 setBackgroundColor [1/2] 方法。
- userCount
-
- 弃用
- 已废弃,Agora 不推荐使用。请改用 getUserCount 方法。
参与合图的用户数量,默认 0。取值范围为 [0,17]。
- metadata
-
- 弃用
- 已废弃,Agora 不推荐使用。
发送给 CDN 客户端的 metadata。
- watermark
-
- 弃用
- 请改用 addWatermark。
直播视频上的水印。图片格式需为 PNG。详见 AgoraImage。
- backgroundImage
-
- 弃用
- 请改用 addBackgroundImage。
直播视频上的背景图。图片格式需为 PNG。详见 AgoraImage。
- audioSampleRate
-
用于旁路推流的输出媒体流的音频采样率 (Hz),详见 AudioSampleRateType。
- audioBitrate
-
用于旁路直播的输出音频的码率。单位为 Kbps,默认值为 48,最大值为 128。
- audioChannels
-
用于旁路直播的输出音频的声道数,默认值为 1。取值范围为 [1,5] 中的整型,建议取 1 或 2。3、4、5 需要特殊播放器支持:
- 1: (默认)单声道
- 2: 双声道
- 3: 三声道
- 4: 四声道
- 5: 五声道
- audioCodecProfile
- 用于旁路直播输出音频的编码规格。详见 AudioCodecProfileType。
addBackgroundImage
添加背景图。
public void addBackgroundImage(AgoraImage backgroundImage) { if (backgroundImageList == null) { backgroundImageList = new ArrayList<AgoraImage>(); } backgroundImageList.add(backgroundImage); }
该方法每次只能添加一张背景图,如果你需要添加多张背景图,则需多次调用该方法。
水印和背景图的总数量需大于等于 0 且小于等于 10。
参数
- backgroundImage
- 直播视频上的背景图。必须为 PNG 格式。详见 AgoraImage。
addUser
添加转码合图用户。
public int addUser(TranscodingUser user) {
if (user == null || user.uid == 0) {
return -Constants.ERR_INVALID_ARGUMENT;
}
参数
- user
- 参与合图的用户,详见 TranscodingUser。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
addWatermark
添加水印。
public void addWatermark(AgoraImage watermark) { if (watermarkList == null) { watermarkList = new ArrayList<AgoraImage>(); } watermarkList.add(watermark); }
该方法每次只能添加一个水印,如果你需要添加多个水印,则需多次调用该方法。
水印和背景图的总数量需大于等于 0 且小于等于 10。
参数
- watermark
- 直播视频上的水印。必须为 PNG 格式。详见 AgoraImage。
getAdvancedFeatures
获取转码推流高级功能的开/关状态。
public Map<String, Boolean> getAdvancedFeatures() { return advancedFeatures; }
如需使用转码推流高级功能,请联系 sales@agora.io。
返回值
高级功能的名称,包含 LBHQ(低码率的高清视频功能)和 VEO(优化的视频编码器功能)以及该功能的开/关状态。
getBackgroundColor
获取背景颜色。
public int getBackgroundColor() { return this.backgroundColor; }
返回值
背景颜色,格式为 RGB 定义下的 Hex 值。
getBackgroundImageList
获取背景图列表。
public ArrayList<AgoraImage> getBackgroundImageList() { return backgroundImageList; }
返回值
背景图列表。背景图信息见 AgoraImage。
getBlue
获取背景蓝色分量。
@Deprecated public int getBlue() { return backgroundColor & 0x0ff; }
- 弃用:
- 该方法已废弃。
返回值
背景蓝色分量。
getGreen
获取背景绿色分量。
@Deprecated public int getGreen() { return (backgroundColor >> 8) & 0x0ff; }
- 弃用:
- 该方法已废弃。
返回值
背景绿色分量。
getRed
获取背景红色分量。
@Deprecated public int getRed() { return (backgroundColor >> 16) & 0x0ff; }
- 弃用:
- 该方法已废弃。
返回值
背景红色分量。
getUserCount
获取转码合图用户人数。
public int getUserCount() { return transcodingUsers.size(); }
返回值
参与转码合图的用户人数。
getUsers
获取参与合图的用户列表。
public final ArrayList<TranscodingUser> getUsers() { Collection<TranscodingUser> values = transcodingUsers.values(); return new ArrayList<>(values); }
该方法用于获取参与合图的全部用户。该方法返回的用户列表为只读,开发者不应该修改该数据。
返回值
用户列表。用户信息见 TranscodingUser。
getWatermarkList
获取水印列表。
public ArrayList<AgoraImage> getWatermarkList() { return watermarkList; }
返回值
水印列表。水印信息见 AgoraImage。
removeBackgroundImage
从背景图列表中删除一张背景图。
public boolean removeBackgroundImage(AgoraImage backgroundImage) { if (backgroundImageList == null) { return false; } return backgroundImageList.remove(backgroundImage); }
该方法每次只能删除一张背景图,如果你需要删除多张背景图,则需多次调用该方法。
参数
- backgroundImage
- 直播视频上的背景图。必须为 PNG 格式。详见 AgoraImage。
返回值
是否成功删除背景图:
true
:成功。false
:失败。
removeUser
删除转码合图用户。
public int removeUser(int uid) { if (!transcodingUsers.containsKey(uid)) return -Constants.ERR_INVALID_ARGUMENT; transcodingUsers.remove(uid); userCount = transcodingUsers.size(); return Constants.ERR_OK; }
参数
- uid
- 待删除的用户 ID。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
removeWatermark
从水印列表中删除一个水印。
public boolean removeWatermark(AgoraImage watermark) { if (watermarkList == null) { return false; } return watermarkList.remove(watermark); }
该方法每次只能删除一个水印,如果你需要删除多个水印,则需多次调用该方法。
参数
- watermark
- 直播视频上的水印。必须为 PNG 格式。详见 AgoraImage。
返回值
true
:成功删除水印。false
:删除水印失败。
setAdvancedFeatures
设置是否启用转码推流的高级功能。
public void setAdvancedFeatures(String featureName, Boolean opened) { advancedFeatures.put(featureName, opened); }
如需使用转码推流高级功能,请联系 sales@agora.io。
参数
- featureName
- 转码推流高级功能的名称,包含 LBHQ(低码率的高清视频功能)和 VEO(优化的视频编码器功能)。
- opened
- 是否启用转码推流的高级功能:
true
:开启转码推流的高级功能。false
:(默认)关闭转码推流的高级功能。
setBackgroundColor [1/2]
设置背景色。
public void setBackgroundColor(int color) { this.backgroundColor = color; }
参数
- color
- 用于旁路直播的输出视频的背景色,格式为 RGB 定义下的 Hex 值,不要带 # 号,如 0xFFB6C1 表示浅粉色。默认 0x000000,黑色。
setBackgroundColor [2/2]
设置背景色 RGB。
public void setBackgroundColor(int red, int green, int blue) { this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); }
参数
- red
- 红。
- green
- 绿。
- blue
- 蓝。
setBlue
设置背景蓝色分量。
@Deprecated public void setBlue(int blue) { int red = getRed(); int green = getGreen(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); }
- 弃用:
- 该方法已废弃。
参数
- blue
- 背景蓝色分量。
setGreen
设置背景绿色分量。
@Deprecated public void setGreen(int green) { int red = getRed(); int blue = getBlue(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); }
- 弃用:
- 该方法已废弃。
参数
- green
- 背景绿色分量。
setRed
设置背景红色分量。
@Deprecated public void setRed(int red) { int green = getGreen(); int blue = getBlue(); this.backgroundColor = (red << 16) | (green << 8) | (blue << 0); }
- 弃用:
- 该方法已废弃。
参数
- red
- 背景红色分量。
setUsers [1/2]
批量设置用户。
public void setUsers(ArrayList<TranscodingUser> users) { transcodingUsers.clear(); if (users != null) { for (TranscodingUser user : users) { transcodingUsers.put(user.uid, user); } } userCount = transcodingUsers.size(); }
该方法用于设置参与合图的全部用户。该方法会使用新的 TranscodingUser 数据替换原有的数据。
参数
- users
- 所有参与合图的用户,定义详见 TranscodingUser。
setUsers [2/2]
批量设置用户。
public void setUsers(Map<Integer, TranscodingUser> users) { transcodingUsers.clear(); if (users != null) { transcodingUsers.putAll(users); } userCount = transcodingUsers.size(); }
该方法用于设置参与合图的全部用户。该方法会使用新的 TranscodingUser 数据替换原有的数据。
参数
- users
- 所有参与合图的用户,定义详见 TranscodingUser。
LocalAccessPointConfiguration
Local Access Point 配置。
public class LocalAccessPointConfiguration { public ArrayList<String> ipList = null; public ArrayList<String> domainList = null; public String verifyDomainName = null; public int mode = Constants.LOCAL_RPOXY_CONNECTIVITY_FIRST; }
属性
- ipList
- Local Access Point 的对内 IP 地址列表。ipList 和 domainList 必须至少填一个。
- domainList
- Local Access Point 的域名列表。SDK 会根据你填入的域名解析出 Local Access Point 的 IP 地址。域名解析的超时时间为 10 秒。ipList 和 domainList 必须至少填一个。如果你同时指定 IP 地址和域名,SDK 会将根据域名解析出来的 IP 地址和你指定的 IP 地址合并、去重,然后随机连接一个 IP 来实现负载均衡。
- verifyDomainName
- 内网证书验证域名。如果传值为空,则用 SDK 默认的证书验证域名
secure-edge.local
。 - mode
-
连接模式:
- LOCAL_RPOXY_CONNECTIVITY_FIRST (0):SDK 优先尝试连接指定的声网私有媒体服务器;如果无法连接到指定的声网私有媒体服务器,则连接声网 SD-RTN™。
- LOCAL_RPOXY_LOCAL_ONLY (1):SDK 只尝试连接指定的声网私有媒体服务器。
LocalAudioStats
本地音频统计数据。
public static class LocalAudioStats { public int numChannels; public int sentSampleRate; public int sentBitrate; public int internalCodec; public int txPacketLossRate; public int audioDeviceDelay; };
属性
- numChannels
- 声道数。
- sentSampleRate
- 发送本地音频的采样率,单位为 Hz。
- sentBitrate
- 发送本地音频的码率平均值,单位为 Kbps。
- txPacketLossRate
- 弱网对抗前本端到 Agora 边缘服务器的丢包率 (%)。
- internalCodec
- 内部的 payload 类型。
- audioDeviceDelay
- 播放或录制音频时,音频设备模块的延时。
LocalVideoStats
本地视频流统计信息。
public static class LocalVideoStats { public int uid; public int sentBitrate; public int sentFrameRate; public int captureFrameRate; public int captureFrameWidth; public int captureFrameHeight; public int regulatedCaptureFrameRate; public int regulatedCaptureFrameWidth; public int regulatedCaptureFrameHeight; public int encoderOutputFrameRate; public int rendererOutputFrameRate; public int targetBitrate; public int targetFrameRate; public int qualityAdaptIndication; public int encodedBitrate; public int encodedFrameWidth; public int encodedFrameHeight; public int encodedFrameCount; public int codecType; public int txPacketLossRate; public int captureBrightnessLevel; }
属性
- uid
- 本地用户的 ID。
- sentBitrate
-
实际发送码率 (Kbps)注意: 不包含丢包后重传视频等的发送码率。
- sentFrameRate
- 实际发送帧率 (fps)。
注意: 不包含丢包后重传视频等的发送帧率。
- captureFrameRate
- 本地视频采集帧率 (fps)。
- captureFrameWidth
- 本地视频采集宽度 (px)。
- captureFrameHeight
- 本地视频采集高度 (px)。
- regulatedCaptureFrameRate
- SDK 内置的视频采集适配器(regulator)调整后的摄像头采集视频帧率 (fps)。Regulator 根据视频编码配置对摄像头采集视频的帧率进行调整。
- regulatedCaptureFrameWidth
- SDK 内置的视频采集适配器(regulator)调整后的摄像头采集视频宽度 (px)。Regulator 根据视频编码配置对摄像头采集视频的宽高进行调整。
- regulatedCaptureFrameHeight
- SDK 内置的视频采集适配器(regulator)调整后的摄像头采集视频高度 (px)。Regulator 根据视频编码配置对摄像头采集视频的宽高进行调整。
- encoderOutputFrameRate
- 本地视频编码器的输出帧率,单位为 fps。
- rendererOutputFrameRate
- 本地视频渲染器的输出帧率,单位为 fps。
- targetBitrate
- 当前编码器的目标编码码率 (Kbps),该码率为 SDK 根据当前网络状况预估的一个值。
- targetFrameRate
- 当前编码器的目标编码帧率 (fps)。
- qualityAdaptIndication
- 统计周期内本地视频质量(基于目标帧率和目标码率)的自适应情况。
- ADAPT_NONE (0): 本地视频质量不变。
- ADAPT_UP_BANDWIDTH (1): 因网络带宽增加,本地视频质量改善。
- ADAPT_DOWN_BANDWIDTH (2): 因网络带宽减少,本地视频质量变差。
- encodedBitrate
-
视频编码码率(Kbps)。注意: 不包含丢包后重传视频等的编码码率。
- encodedFrameHeight
- 视频编码高度(px)。
- encodedFrameWidth
- 视频编码宽度(px)。
- encodedFrameCount
- 视频发送的帧数,累计值。
- codecType
- 视频的编码类型。
- VIDEO_CODEC_VP8 (1): VP8。
- VIDEO_CODEC_H264 (2): (默认值) H.264。
- txPacketLossRate
- 弱网对抗前本端到 Agora 边缘服务器的视频丢包率 (%)。
- captureBrightnessLevel
- 本地采集的画质亮度级别。
- CAPTURE_BRIGHTNESS_LEVEL_INVALID (-1): SDK 未检测出本地采集的画质亮度级别。请等待几秒,通过下一次回调的 captureBrightnessLevel 获取亮度级别。
- CAPTURE_BRIGHTNESS_LEVEL_NORMAL (0): 本地采集的画质亮度正常。
- CAPTURE_BRIGHTNESS_LEVEL_BRIGHT (1): 本地采集的画质亮度偏亮。
- CAPTURE_BRIGHTNESS_LEVEL_DARK (2): 本地采集的画质亮度偏暗。
LogConfig
Agora SDK 日志文件的配置。
public static class LogConfig { public String filePath; public int fileSizeInKB; public int level = Constants.LogLevel.getValue(Constants.LogLevel.LOG_LEVEL_INFO); }
属性
- filePath
-
日志文件的完整路径。请确保你指定的目录存在且可写。你可以通过该参数修改日志文件名。
默认路径为 /storage/emulated/0/Android/data/<packagename>/files/agorasdk.log。
- fileSizeInKB
- 单个
agorasdk.log
日志文件的大小,单位为 KB,取值范围为 [128,1024],默认值为 1,024 KB。 如果你将fileSizeInKByte
设为小于 128 KB,SDK 会自动调整到 128 KB;如果你将fileSizeInKByte
设为大于 1,024 KB,SDK 会自动调整到 1,024 KB。 - level
-
Agora SDK 的日志输出等级,详见 LogLevel。
例如,如果你选择 WARN 级别,就可以看到在 FATAL、ERROR 和 WARN 级别上的所有日志信息。
LowlightEnhanceOptions
暗光增强选项。
public class LowLightEnhanceOptions { public static final int LOW_LIGHT_ENHANCE_AUTO = 0; public static final int LOW_LIGHT_ENHANCE_MANUAL = 1; public static final int LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY = 0; public static final int LOW_LIGHT_ENHANCE_LEVEL_FAST = 1; public int lowlightEnhanceMode; public int lowlightEnhanceLevel; public LowLightEnhanceOptions() { lowlightEnhanceMode = LOW_LIGHT_ENHANCE_AUTO; lowlightEnhanceLevel = LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY; } public LowLightEnhanceOptions(int mode, int level) { lowlightEnhanceMode = mode; lowlightEnhanceLevel = level; } }
属性
- level
- 暗光增强等级。
- LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY(0):(默认)优先画质的暗光增强,会处理视频图像的亮度、细节、噪声,消耗的性能适中,处理速度适中,综合画质最优。
- LOW_LIGHT_ENHANCE_LEVEL_FAST(1):优先性能的暗光增强,会处理视频图像的亮度、细节,消耗的性能较少,处理速度较快。
- mode
- 暗光增强模式。
- LOW_LIGHT_ENHANCE_AUTO(0):(默认)自动模式。SDK 会根据环境光亮度自动开启或关闭暗光增强功能,以适时补光和防止过曝。
- LOW_LIGHT_ENHANCE_MANUAL(1):手动模式。用户需手动开启或关闭暗光增强功能。
MediaRecorderConfiguration
本地音视频流录制配置。
public static class MediaRecorderConfiguration { public String storagePath; public int containerFormat = CONTAINER_MP4; public int streamType = STREAM_TYPE_BOTH; public int maxDurationMs = 120000; public int recorderInfoUpdateInterval = 0; public MediaRecorderConfiguration(String storagePath, int containerFormat, int streamType, int maxDurationMs, int recorderInfoUpdateInterval) { this.storagePath = storagePath; this.containerFormat = containerFormat; this.streamType = streamType; this.maxDurationMs = maxDurationMs; this.recorderInfoUpdateInterval = recorderInfoUpdateInterval; } }
属性
- storagePath
- 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如:
- Windows:
C:\Users\<user_name>\AppData\Local\Agora\<process_name>\example.mp4
- iOS:
/App Sandbox/Library/Caches/example.mp4
- macOS:
/Library/Logs/example.mp4
- Android:
/storage/emulated/0/Android/data/<package name>/files/example.mp4
注意: 请确保你指定的路径存在并且可写。 - Windows:
- containerFormat
- 录制文件的格式,目前仅支持 CONTAINER_MP4。
- streamType
- 录制内容:
- STREAM_TYPE_AUDIO:仅音频。
- STREAM_TYPE_VIDEO:仅视频。
- STREAM_TYPE_BOTH:(默认)音视频。
- maxDurationMs
- 最大录制时长,单位为毫秒,默认值为 120000。
- recorderInfoUpdateInterval
- 录制信息更新间隔,单位为毫秒,取值范围为 [1000,10000]。SDK 会根据该值的设置触发 onRecorderInfoUpdated 回调,报告更新后的录制信息。
MediaPlayerSource
需播放的媒体文件的相关信息及播放设置。
public class MediaPlayerSource {
public MediaPlayerSource() {
this.startPos = 0;
this.enableCache = false;
this.url = null;
this.uri = null;
this.autoPlay = true;
this.provider = null;
}
String url;
String uri;
long startPos;
boolean autoPlay;
Boolean isAgoraSource;
Boolean isLiveSource;
boolean enableCache;
IMediaPlayerCustomDataProvider provider;
}
属性
- url
-
需要播放的媒体资源的 URL。
注: 如果你打开媒体资源为自定义媒体资源,则无需向 url 传值。 - uri
- 媒体文件的 URI(Uniform Resource Identifier),可用于标识媒体文件。
- startPos
- 设置起始播放位置 (毫秒),默认值为 0。
- autoPlay
- 打开媒体文件后,是否开启自动播放:
true
:(默认)开启自动播放。false
:关闭自动播放。
注:如果你设置关闭自动播放,打开媒体文件后,还需再调用 play 方法来播放媒体文件。
- enableCache
- 此次播放是否开启实时缓存功能:
true
:开启实时缓存。false
:(默认)关闭实时缓存。
注:- 如需开启实时缓存,请向 uri 传值,否则播放器会以媒体文件的 url 作为缓存索引。
- 开启实时缓存后,播放器会预先缓存当前正在播放的媒体文件的部分数据到本地,当你下次播放该文件时播放器会直接从缓存中加载数据,可节省网络流量。当前缓存的媒体文件的相关统计数据会在媒体文件开始播放后每秒更新一次,详见 CacheStatistics。
- isAgoraSource
- 打开的媒体资源是否为通过 Agora 融合 CDN 分发的直播或点播流:
true
:打开的媒体资源是 Agora 融合 CDN 分发的直播或点播流。false
:(默认)打开的媒体资源不是 Agora 融合 CDN 分发的直播或点播流。
注:如果你需要打开的媒体资源为 Agora 融合 CDN 分发的直播流或点播流,请向 url 传入直播或点播流的 URL 并将 isAgoraSource 设置为
true
,否则无需设置 isAgoraSource。 - isLiveSource
- 打开的媒体资源是否为直播流:
true
:直播流。false
:(默认)非直播流。
如果你打开的媒体资源为直播流,Agora 推荐你将该参数设置为
true
,可加快打开直播流的速度。注:仅当打开的媒体资源为直播流时,将 isLiveSource 设置为
true
后才可加快媒体资源的打开速度。 - provider
-
自定义媒体资源文件的回调。详见 IMediaPlayerCustomDataProvider。
注:如果你需要打开自定义的媒体资源,例如需要自行解密的媒体资源,直接向 provider 传值,无需再向 url 传值。
MediaStreamInfo
播放器媒体流的所有信息。
public class MediaStreamInfo { private int streamIndex; private int mediaStreamType; private String codecName; private String language; private int videoFrameRate; private int videoBitRate; private int videoWidth; private int videoHeight; private int videoRotation; private int audioSampleRate; private int audioChannels; private int audioBytesPerSample; private long duration; public MediaStreamInfo() {} }
属性
- streamIndex
- 媒体流的索引值。
- mediaStreamType
- 此条媒体流的类型。
- STREAM_TYPE_UNKNOWN (0): 未知类型。
- STREAM_TYPE_VIDEO (1): 视频流。
- STREAM_TYPE_AUDIO (2): 音频流。
- STREAM_TYPE_SUBTITLE (3): 字幕流。
- codecName
- 此条媒体流的编码规格。
- language
- 此条媒体流的语言。
- videoFrameRate
- 该参数仅对视频流生效,表示视频帧率 (fps)。
- videoBitRate
- 该参数仅对视频流生效,表示视频码率 (bps)。
- videoWidth
- 该参数仅对视频流生效,表示视频宽度 (pixel)。
- videoHeight
- 该参数仅对视频流生效,表示视频高度 (pixel)。
- videoRotation
- 该参数仅对视频流生效,表示旋转角度。
- audioSampleRate
- 该参数仅对音频流生效,表示音频采样率 (Hz)。
- audioChannels
- 该参数仅对音频流生效,表示声道数。
- audioBytesPerSample
- 该参数仅对音频流生效,表示每个音频采样点的位数 (bit)。
- duration
- 媒体流的时长(秒)。
PlayerUpdatedInfo
媒体播放器相关信息。
public class PlayerUpdatedInfo { public String playerId; public String deviceId; public CacheStatistics cacheStatistics; }
属性
- playerId
- 播放器 ID,标识一个播放器。
- deviceId
- 设备 ID,标识一个设备。
- cacheStatistics
-
当前缓存的媒体文件的相关统计数据。
调用 openWithMediaSource 方法且设置 enableCache 成员为
true
后,当前缓存的媒体文件的相关统计数据会在媒体文件开始播放后每秒更新一次,详见 CacheStatistics。
RecorderInfo
录制文件信息。
public class RecorderInfo {
public String fileName;
public int durationMs;
public int fileSize;
@CalledByNative
public RecorderInfo(String fileName, int durationMs, int fileSize) {
this.fileName = fileName;
this.durationMs = durationMs;
this.fileSize = fileSize;
}
}
属性
- fileName
- 录制文件的绝对存储路径。
- durationMs
- 录制文件的时长,单位为毫秒。
- fileSize
- 录制文件的大小,单位为字节。
Rectangle
目标区域相对于整个屏幕或窗口的位置,如不填,则表示整个屏幕或窗口。
public static class Rectangle { public int x = 0; public int y = 0; public int width = 0; public int height = 0; public Rectangle() { x = 0; y = 0; width = 0; height = 0; } public Rectangle(int x_, int y_, int width_, int height_) { x = x_; y = y_; width = width_; height = height_; } };
属性
- x
- 左上角的横向偏移。
- y
- 左上角的纵向偏移。
- width
- 目标区域的宽度。
- height
- 目标区域的高度。
RemoteAudioStats
远端用户的音频统计数据。
public static class RemoteAudioStats { public int uid; public int quality; public int networkTransportDelay; public int jitterBufferDelay; public int audioLossRate; public int numChannels; public int receivedSampleRate; public int receivedBitrate; public int totalFrozenTime; public int frozenRate; public int mosValue; public long totalActiveTime; public long publishDuration; public long qoeQuality; public int qualityChangedReason; }
属性
- uid
- 远端用户的用户 ID。
- quality
-
远端用户发送的音频流质量。
- QUALITY_UNKNOWN (0):质量未知。
- QUALITY_EXCELLENT (1):质量极好。
- QUALITY_GOOD (2):用户主观感觉和极好差不多,但码率可能略低于极好。
- QUALITY_POOR (3):用户主观感受有瑕疵但不影响沟通。
- QUALITY_BAD (4):勉强能沟通但不顺畅。
- QUALITY_VBAD (5):网络质量非常差,基本不能沟通。
- QUALITY_DOWN (6):网络连接断开,完全无法沟通。
- networkTransportDelay
- 音频发送端到接收端的网络延迟(毫秒)。
- jitterBufferDelay
-
音频接收端到网络抖动缓冲的网络延迟(毫秒)。
- audioLossRate
- 统计周期内的远端音频流的丢帧率 (%)。
- numChannels
- 声道数。
- receivedSampleRate
- 统计周期内接收到的远端音频流的采样率。
- receivedBitrate
- 接收到的远端音频流在统计周期内的平均码率(Kbps)。
- totalFrozenTime
- 远端用户在加入频道后发生音频卡顿的累计时长(毫秒)。通话过程中,音频丢帧率达到 4% 即记为一次音频卡顿。
- frozenRate
- 音频卡顿的累计时长占音频总有效时长的百分比 (%)。音频有效时长是指远端用户加入频道后音频未被停止发送或禁用的时长。
- totalActiveTime
-
远端用户在音频通话开始到本次回调之间的有效时长(毫秒)。
有效时长是指去除了远端用户进入静音状态的总时长。
- publishDuration
-
远端音频流的累计发布时长(毫秒)。
- qoeQuality
-
接收远端音频时,本地用户的主观体验质量。
- EXPERIENCE_QUALITY_GOOD (0):主观体验质量较好。
- EXPERIENCE_QUALITY_BAD (1):主观体验质量较差。
- qualityChangedReason
-
接收远端音频时,本地用户主观体验质量较差的原因。
- EXPERIENCE_REASON_NONE (0): 无原因,说明主观体验质量较好。
- REMOTE_NETWORK_QUALITY_POOR (1): 远端用户的网络较差。
- LOCAL_NETWORK_QUALITY_POOR (2): 本地用户的网络较差。
- WIRELESS_SIGNAL_POOR (4): 本地用户的 Wi-Fi 或者移动数据网络信号弱。
- WIFI_BLUETOOTH_COEXIST (8): 本地用户同时开启 Wi-Fi 和蓝牙,二者信号互相干扰,导致音频传输质量下降。
- mosValue
-
统计周期内,Agora 实时音频 MOS(平均主观意见分)评估方法对接收到的远端音频流的质量评分。返回值范围为 [0,500]。返回值除以 100 即可得到 MOS 分数,范围为 [0,5] 分,分数越高,音频质量越好。
Agora 实时音频 MOS 评分对应的主观音质感受如下:MOS 分数 音质感受 大于 4 分 音频质量佳,清晰流畅。 3.5 - 4 分 音频质量较好,偶有音质损伤,但依然清晰。 3 - 3.5 分 音频质量一般,偶有卡顿,不是非常流畅,需要一点注意力才能听清。 2.5 - 3 分 音频质量较差,卡顿频繁,需要集中精力才能听清。 2 - 2.5 分 音频质量很差,偶有杂音,部分语义丢失,难以交流。 小于 2 分 音频质量非常差,杂音频现,大量语义丢失,完全无法交流。
RemoteVideoStats
远端视频流的统计信息。
public static class RemoteVideoStats { public int uid; public int delay; public int width; public int height; public int receivedBitrate; public int decoderOutputFrameRate; public int rendererOutputFrameRate; public int frameLossRate; public int packetLossRate; public int rxStreamType; public int totalFrozenTime; public int frozenRate; public int avSyncTimeMs; public long totalActiveTime; public long publishDuration; public int superResolutionType; }
属性
- uid
- 用户 ID,指定是哪个用户的视频流。
- delay
-
- 弃用:
- 在有音画同步机制的音视频场景中,你可以参考 RemoteAudioStats 里的 networkTransportDelay 和 jitterBufferDelay 成员的值,了解视频的延迟数据。
延时(毫秒)。
- width
- 视频流宽(像素)。
- height
- 视频流高(像素)。
- receivedBitrate
- (上次统计后)接收到的码率(Kbps)。
- decoderOutputFrameRate
- 远端视频解码器的输出帧率,单位为 fps。
- rendererOutputFrameRate
- 远端视频渲染器的输出帧率,单位为 fps。
- frameLossRate
- 远端视频丢包率(%)。
- packetLossRate
- 远端视频在使用抗丢包技术之后的丢包率(%)。
- rxStreamType
- 视频流类型,大流或小流。
- VIDEO_STREAM_HIGH (0):视频大流,即高分辨率高码率的视频流。
- VIDEO_STREAM_LOW (1):视频小流,即低分辨率低码率的视频流。
- totalFrozenTime
- 远端用户在加入频道后发生视频卡顿的累计时长(ms)。通话过程中,视频帧率设置不低于 5 fps 时,连续渲染的两帧视频之间间隔超过 500 ms,则记为一次视频卡顿。
- frozenRate
- 远端用户在加入频道后发生视频卡顿的累计时长占视频总有效时长的百分比 (%)。视频有效时长是指远端用户加入频道后视频未被停止发送或禁用的时长。
- totalActiveTime
-
视频有效时长(毫秒)。
视频总有效时长是远端用户或主播加入频道后,既没有停止发送视频流,也没有禁用视频模块的通话时长。
- publishDuration
-
远端视频流的累计发布时长(毫秒)。
- superResolutionType
- 超分辨率的开启状态:
- >0:超分辨率已开启。
- =0:超分辨率未开启。
- avSyncTimeMs
- 音频超前视频的时间 (ms)。
注意: 如果为负值,则代表音频落后于视频。
RemoteVoicePositionInfo
远端用户或媒体播放器的空间位置信息。
public class RemoteVoicePositionInfo { public float[] position; public float[] forward; public RemoteVoicePositionInfo() { position = new float[] {0.0f, 0.0f, 0.0f}; forward = new float[] {0.0f, 0.0f, 0.0f}; } }
属性
- position
- 在世界坐标系中的坐标。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
- forward
- 在世界坐标系前轴的单位向量。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
RtcEngineConfig
RtcEngineConfig 定义。
public class RtcEngineConfig { public Context mContext; public String mAppId; public Constants.AreaCode mAreaCode; public IAgoraEventHandler mEventHandler; public int mChannelProfile; public int mAudioScenario; public List<String> mExtensionList; public IMediaExtensionObserver mExtensionObserver; public LogConfig mLogConfig; public String mNativeLibPath; public static class LogConfig { public String filePath; public int fileSizeInKB; public int level = Constants.LogLevel.getValue(Constants.LogLevel.LOG_LEVEL_INFO); @CalledByNative("LogConfig") public String getFilePath() { return filePath; } @CalledByNative("LogConfig") public int getFileSize() { return fileSizeInKB; } @CalledByNative("LogConfig") public int getLevel() { return level; } } public RtcEngineConfig() { mContext = null; mAppId = ""; mChannelProfile = Constants.CHANNEL_PROFILE_LIVE_BROADCASTING; mEventHandler = null; mAudioScenario = Constants.AUDIO_SCENARIO_HIGH_DEFINITION; mAreaCode = Constants.AreaCode.AREA_CODE_GLOB; mExtensionList = new ArrayList<>(); mExtensionObserver = null; mLogConfig = new LogConfig(); } public void addExtension(String providerName) { mExtensionList.add(providerName); } @CalledByNative public Context getContext() { return mContext; } @CalledByNative public String getAppId() { return mAppId; } @CalledByNative public int getChannelProfile() { return mChannelProfile; } @CalledByNative public int getAudioScenario() { return mAudioScenario; } @CalledByNative public int getAreaCode() { return Constants.AreaCode.getValue(mAreaCode); } @CalledByNative public IMediaExtensionObserver getExtensionObserver() { return mExtensionObserver; } @CalledByNative public LogConfig getLogConfig() { return mLogConfig; } }
属性
- mEventHandler
- RtcEngine 的事件句柄,详见 IRtcEngineEventHandler。
- mAppId
- Agora 为 app 开发者签发的 App ID。 使用同一个 App ID 的 app 才能进入同一个频道进行通话或直播。一个 App ID 只能用于创建一个 RtcEngine。如需更换 App ID,必须先调用 destroy 销毁当前 RtcEngine 再重新创建。
- mContext
-
安卓活动上下文。
- mNativeLibPath
-
指定
.so
文件的存储目录。存储目录必须为有效的 app 的私有目录,可以通过Context.getDir()
获取。- 如果你设置了该参数,SDK 会在你指定的目录下自动加载
.so
文件,使 app 在运行时动态加载需要的.so
文件,从而减小 app 的包体积。 - 如果你不设置该参数或将其设置为 null,SDK 会从 app 默认的
nativeLibraryPath
中加载打包所需的.so
文件,相对于上一种方式,app 的包体积会增加。
注意:- 该设置仅适用于手动集成 SDK,不适用于通过 Maven Central 或 JitPack 集成 SDK 的情况。
- 务必确保你设置的路径为有效路径,否则会导致 RtcEngine 创建失败。
- 如果你设置了该参数,SDK 会在你指定的目录下自动加载
- mChannelProfile
-
频道使用场景。
- CHANNEL_PROFILE_COMMUNICATION (0):通信。当频道中只有两个用户时,建议使用该场景。
- CHANNEL_PROFILE_LIVE_BROADCASTING (1):直播。当频道中超过两个用户时,建议使用该场景。
- CHANNEL_PROFILE_GAME (2):该属性已废弃。
- CHANNEL_PROFILE_CLOUD_GAMING (3):互动。该场景对延时进行了优化。如果你的场景中有用户需要频道互动, 建议使用该场景。
- mAudioScenario
- 音频场景。不同的音频场景下,设备的音量类型是不同的。
- AUDIO_SCENARIO_DEFAULT (0): (默认)自动场景,根据用户角色和音频路由自动匹配合适的音质。
- AUDIO_SCENARIO_GAME_STREAMING (3): 高音质场景,适用于音乐为主的场景。
- AUDIO_SCENARIO_CHATROOM (5): 聊天室场景,适用于用户需要频繁上下麦的场景。该场景下,观众会收到申请麦克风权限的弹窗提示。
- AUDIO_SCENARIO_CHORUS (7): 合唱场景。适用于网络条件良好,要求极低延时的实时合唱场景。
注意: 使用该枚举前,你需要调用 getAudioDeviceInfo 获取音频设备是否支持极低延时采集和播放。只有在支持极低延时(isLowLatencyAudioSupported =
true
)的音频设备上,才能够体验到极低延时。 - AUDIO_SCENARIO_MEETING (8): 会议场景,适用于人声为主的多人会议。
- mAreaCode
- 服务器的访问区域。该功能为高级设置,适用于有访问安全限制的场景。支持的区域详见 AreaCode。区域码支持位操作。
- mLogConfig
-
设置 Agora SDK 输出的日志文件。详见 LogConfig。
默认情况下,SDK 会生成 5 个 SDK 日志文件和 5 个 API 调用日志文件,规则如下:
- SDK 日志文件的名称分别为:
agorasdk.log
、agorasdk.1.log
、agorasdk.2.log
、agorasdk.3.log
、agorasdk.4.log
。 - API 调用日志文件的名称分别为:
agoraapi.log
、agoraapi.1.log
、agoraapi.2.log
、agoraapi.3.log
、agoraapi.4.log
。 - 每个 SDK 日志文件的默认大小为 1,024 KB;API 调用日志文件的默认大小为 2,048 KB。日志文件均为 UTF-8 编码。
- 最新的日志永远写在
agorasdk.log
和agoraapi.log
中。 - 当
agorasdk.log
写满后,SDK 会按照以下顺序对日志文件进行操作:- 删除
agorasdk.4.log
文件(如有)。 - 将
agorasdk.3.log
重命名为agorasdk.4.log
。 - 将
agorasdk.2.log
重命名为agorasdk.3.log
。 - 将
agorasdk.1.log
重命名为agorasdk.2.log
。 - 新建
agorasdk.log
文件。
- 删除
agoraapi.log
文件的覆盖规则与agorasdk.log
相同。
- SDK 日志文件的名称分别为:
- mExtensionList
- 插件列表。
- mExtensionObserver
- IMediaExtensionObserver 实例。
addExtension
添加插件。
public void addExtension(String providerName) { mExtensionList.add(providerName); }
参数
- providerName
- 想要添加的插件名称。
RtcConnection
包含连接信息的类。
public class RtcConnection { public enum CONNECTION_STATE_TYPE { CONNECTION_STATE_NOT_INITIALIZED(0), CONNECTION_STATE_DISCONNECTED(1), CONNECTION_STATE_CONNECTING(2), CONNECTION_STATE_CONNECTED(3), CONNECTION_STATE_RECONNECTING(4), CONNECTION_STATE_FAILED(5); private int value; private CONNECTION_STATE_TYPE(int v) { value = v; } public static int getValue(CONNECTION_STATE_TYPE type) { return type.value; } } public String channelId; public int localUid; public String localUserAccount; public RtcConnection() { channelId = null; localUserAccount = null; localUid = Constants.DEFAULT_CONNECTION_ID; } public RtcConnection(String channelId, int uid) { this.channelId = channelId; this.localUid = uid; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("channelId=").append(channelId); sb.append("localUid=").append(localUid); sb.append("localUserAccount=").append(localUserAccount); return sb.toString(); } }
属性
- channelId
- 频道名。
- localUid
- 本地用户 ID。
- localUserAccount
- 本地用户名。
AgoraImage
图像属性。
public class AgoraImage { public String url; public int x; public int y; public int width; public int height; public int zOrder; public double alpha; public AgoraImage() { this.url = null; this.x = 0; this.y = 0; this.width = 0; this.height = 0; this.zOrder = 0; this.alpha = 1.0; } public AgoraImage(String url) { this.url = url; this.x = 0; this.y = 0; this.width = 0; this.height = 0; this.zOrder = 0; this.alpha = 1.0; } }
用于设置直播视频的水印和背景图片的属性。
属性
- url
- 直播视频上图片的 HTTP/HTTPS 地址。字符长度不得超过 1024 字节。
- x
- 图片在视频画面上的 x 坐标 (pixel),以输出视频画面的左上角为原点。
- y
- 图片在视频画面上的 y 坐标 (pixel),以输出视频画面的左上角为原点。
- width
- 图片在视频画面上的宽度 (pixel)。
- height
- 图片在视频画面上的高度 (pixel)。
- zOrder
- 水印或背景图的图层编号。使用水印数组添加单张或多张水印时,必须向 zOrder 传值,取值范围为 [1,255],否则 SDK 会报错。其余情况,zOrder 可选传值,取值范围为 [0,255],0 为默认值。0 代表图层的最下层,255 代表图层的最上层。
- alpha
- 水印或背景图片的透明度。取值范围为 [0.0,1.0]:
- 0.0: 完全透明。
- 1.0:(默认)完全不透明。
RtcStats
通话相关的统计信息。
public static class RtcStats { public int totalDuration; public int txBytes; public int rxBytes; public int txKBitRate; public int txAudioBytes; public int rxAudioBytes; public int txVideoBytes; public int rxVideoBytes; public int rxKBitRate; public int txAudioKBitRate; public int rxAudioKBitRate; public int txVideoKBitRate; public int rxVideoKBitRate; public int lastmileDelay; public double cpuTotalUsage; public int gatewayRtt; public double cpuAppUsage; public int users; public int connectTimeMs; public int txPacketLossRate; public int rxPacketLossRate; public double memoryAppUsageRatio; public double memoryTotalUsageRatio; public int memoryAppUsageInKbytes; }
属性
- totalDuration
- 本地用户通话时长(秒),累计值。
- txBytes
- 发送字节数(bytes)。
- rxBytes
- 接收字节数(bytes)。
- txAudioBytes
- 发送音频字节数(bytes),累计值。
- txVideoBytes
- 发送视频字节数(bytes),累计值。
- rxAudioBytes
- 接收音频字节数(bytes),累计值。
- rxVideoBytes
- 接收视频字节数(bytes),累计值。
- txKBitRate
- 发送码率(Kbps)。
- rxKBitRate
- 接收码率(Kbps)。
- rxAudioKBitRate
- 音频接收码率 (Kbps)。
- txAudioKBitRate
- 音频包的发送码率 (Kbps)。
- rxVideoKBitRate
- 视频接收码率 (Kbps)。
- txVideoKBitRate
- 视频发送码率 (Kbps)。
- lastmileDelay
- 客户端-接入服务器延时 (毫秒)。
- txPacketLossRate
- 使用抗丢包技术前,客户端上行发送到服务器丢包率 (%)。
- rxPacketLossRate
- 使用抗丢包技术前,服务器下行发送到客户端丢包率 (%)。
- users
- 当前频道内的用户人数。
- cpuAppUsage
- 当前 App 的 CPU 使用率 (%)。
注意:
- onLeaveChannel 回调中报告的 cpuAppUsage 恒为 0。
- 自 Android 8.1 起,因系统限制,你可能无法通过该属性获取 CPU 使用率。
- cpuTotalUsage
-
当前系统的 CPU 使用率 (%)。
注意:- onLeaveChannel 回调中报告的 cpuTotalUsage 恒为 0。
- 自 Android 8.1 起,因系统限制,你无法通过该属性获取 CPU 使用率。
- connectTimeMs
- 从开始建立连接到成功连接的时间(毫秒)。如报告 0,则表示无效。
- gatewayRtt
- 客户端到本地路由器的往返时延 (ms)。
注: 在 Android 平台上,如需获取 gatewayRtt,请确保已在项目
AndroidManifest.xml
文件的</application>
后面添加android.permission.ACCESS_WIFI_STATE
权限。 - memoryAppUsageRatio
-
当前 App 的内存占比 (%)。
注意: 该值仅作参考。受系统限制可能无法获取。 - memoryTotalUsageRatio
-
当前系统的内存占比 (%)。
注意: 该值仅作参考。受系统限制可能无法获取。 - memoryAppUsageInKbytes
-
当前 App 的内存大小 (KB)。
注意: 该值仅作参考。受系统限制可能无法获取。
ScreenCaptureParameters
屏幕共享的参数配置。
public class ScreenCaptureParameters { public static class VideoCaptureParameters { public int bitrate = 0; public int framerate = 15; public int width = 1280; public int height = 720; public int contentHint = Constants.SCREEN_CAPTURE_CONTENT_HINT_MOTION; @CalledByNative("VideoCaptureParameters") public int getBitrate() { return bitrate; } @CalledByNative("VideoCaptureParameters") public int getFramerate() { return framerate; } @CalledByNative("VideoCaptureParameters") public int getWidth() { return width; } @CalledByNative("VideoCaptureParameters") public int getHeight() { return height; } @CalledByNative("VideoCaptureParameters") public int getContentHint() { return contentHint; } @Override public String toString() { return "VideoCaptureParameters{" + "bitrate=" + bitrate + ", framerate=" + framerate + ", width=" + width + ", height=" + height + ", contentHint=" + contentHint + '}'; } } public static class AudioCaptureParameters { public int sampleRate = 16000; public int channels = 2; public int captureSignalVolume = 100; @CalledByNative("AudioCaptureParameters") public int getSampleRate() { return sampleRate; } @CalledByNative("AudioCaptureParameters") public int getChannels() { return channels; } @CalledByNative("AudioCaptureParameters") public int getCaptureSignalVolume() { return captureSignalVolume; } @Override public String toString() { return "AudioCaptureParameters{" + "sampleRate=" + sampleRate + ", channels=" + channels + ", captureSignalVolume=" + captureSignalVolume + '}'; } } public boolean captureAudio = false; public VideoCaptureParameters videoCaptureParameters = new VideoCaptureParameters(); public boolean captureVideo = true; public AudioCaptureParameters audioCaptureParameters = new AudioCaptureParameters(); @CalledByNative public boolean isCaptureAudio() { return captureAudio; } @CalledByNative public VideoCaptureParameters getVideoCaptureParameters() { return videoCaptureParameters; } @CalledByNative public boolean isCaptureVideo() { return captureVideo; } @CalledByNative public AudioCaptureParameters getAudioCaptureParameters() { return audioCaptureParameters; } @Override public String toString() { return "ScreenCaptureParameters{" + "captureAudio=" + captureAudio + ", videoCaptureParameters=" + videoCaptureParameters + ", captureVideo=" + captureVideo + ", audioCaptureParameters=" + audioCaptureParameters + '}'; } }
属性
- captureAudio
- 屏幕共享时是否采集系统音频:
true
: 采集系统音频。false
: (默认)不采集系统音频。
注: 受系统限制,采集系统音频仅适用于 Android API 级别为 29 及以上,即 Android 10 及以上。 - captureVideo
- 屏幕共享时是否采集屏幕:
true
:(默认)采集屏幕。false
: 不采集屏幕。
注: 受系统限制,采集屏幕仅适用于 Android API 级别为 21 及以上,即 Android 5 及以上。
VideoCaptureParameters
共享屏幕流的视频编码配置。
public static class VideoCaptureParameters { public int bitrate = 0; public int framerate = 15; public int width = 1280; public int height = 720; public int contentHint = Constants.SCREEN_CAPTURE_CONTENT_HINT_MOTION; @CalledByNative("VideoCaptureParameters") public int getBitrate() { return bitrate; } @CalledByNative("VideoCaptureParameters") public int getFramerate() { return framerate; } @CalledByNative("VideoCaptureParameters") public int getWidth() { return width; } @CalledByNative("VideoCaptureParameters") public int getHeight() { return height; } @CalledByNative("VideoCaptureParameters") public int getContentHint() { return contentHint; } @Override public String toString() { return "VideoCaptureParameters{" + "bitrate=" + bitrate + ", framerate=" + framerate + ", width=" + width + ", height=" + height + ", contentHint=" + contentHint + '}'; } }
仅适用于 captureVideo 为 true
的场景。
属性
- width
- 视频编码分辨率中的宽 (px)。默认值为 1280。如果 width 和 height 的宽高比与屏幕像素值的宽高比不一致,SDK 会按照如下规则调节视频编码分辨率, 以 width × height 是 1280 × 720 为例:
- 当屏幕宽和高的像素值均小于 width 和 height 时,例如屏幕像素值为 640 × 360,SDK 以 640 × 360 编码。
- 当屏幕宽或高的像素值大于 width 或 height 时,例如屏幕像素值为 2000 × 1500,SDK 以屏幕像素值的宽高比,即 4:3,取 width × height 内最大分辨率进行编码,即 960 × 720。
注:- 屏幕共享流的计费以 width 和 height 的值为准:当你未传值时,以 1280 × 720 计费;当你传值时,以你传入的值计费。详细的计费规则请参考计费说明。
- 该值不代表最终视频输出的方向。请查阅 ORIENTATION_MODE 了解设置视频方向。
- 视频能否达到 720P 的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720P 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。
- height
- 视频编码分辨率中的高 (px)。默认值为 720。如果 width 和 height 的宽高比与屏幕像素值 的宽高比不一致,SDK 会按照如下规则调节视频编码分辨率,以 width × height 是 1280 × 720 为例:
- 当屏幕宽和高的像素值均小于 width 和 height 时,例如屏幕像素值为 640 × 360,SDK 以 640 × 360 编码。
- 当屏幕宽或高的像素值大于 width 或 height 时,例如屏幕像素值为 2000 × 1500,SDK 以屏幕像素值的宽高比,即 4:3,取 width × height 内最大分辨率进行编码,即 960 × 720。
注:- 屏幕共享流的计费以 width 和 height 的值为准:当你未传值时,以 1280 × 720 计费;当你传值时,以你传入的值计费。详细的计费规则请参考计费说明。
- 该值不代表最终视频输出的方向。请查阅 ORIENTATION_MODE 了解设置视频方向。
- 视频能否达到 720P 的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720P 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。
- framerate
- 视频编码帧率 (fps)。默认值为 15。
- bitrate
- 视频编码码率 (Kbps)。
- contentHint
- 屏幕共享视频的内容类型。
- SCREEN_CAPTURE_CONTENT_HINT_NONE(0):(默认)无指定的内容类型。
- SCREEN_CAPTURE_CONTENT_HINT_MOTION(1):内容类型为动画。当共享的内容是视频、电影或视频游戏时,推荐选择该内容类型。
- SCREEN_CAPTURE_CONTENT_HINT_DETAILS(2):内容类型为细节。当共享的内容是图片或文字时,推荐选择该内容类型。
AudioCaptureParameters
共享屏幕流的音频配置。
public static class AudioCaptureParameters { public int sampleRate = 16000; public int channels = 2; public int captureSignalVolume = 100; @CalledByNative("AudioCaptureParameters") public int getSampleRate() { return sampleRate; } @CalledByNative("AudioCaptureParameters") public int getChannels() { return channels; } @CalledByNative("AudioCaptureParameters") public int getCaptureSignalVolume() { return captureSignalVolume; } @Override public String toString() { return "AudioCaptureParameters{" + "sampleRate=" + sampleRate + ", channels=" + channels + ", captureSignalVolume=" + captureSignalVolume + '}'; } }
仅适用于 captureAudio 为 true
的场景。
属性
- sampleRate
- 音频采样率 (Hz)。默认值为 16000。
- channels
- 声道数。默认值为 2,表示双声道。
- captureSignalVolume
- 采集的系统音量。取值范围为 [0,100]。默认值为 100。
SegmentationProperty
背景图像的处理属性。
public class SegmentationProperty { public static final int SEG_MODEL_AI = 1; public static final int SEG_MODEL_GREEN = 2; public int modelType; public float greenCapacity; public SegmentationProperty(int modelType, float greenCapacity) { this.modelType = modelType; this.greenCapacity = greenCapacity; } public SegmentationProperty() { this.modelType = SEG_MODEL_AI; this.greenCapacity = 0.5f; } }
属性
- modelType
- 进行背景处理的算法。
- SEG_MODEL_AI(1): (默认) 适用于所有场景下的背景处理算法。
- SEG_MODEL_GREEN(2): 仅适用于绿幕背景下的背景处理算法。
- greenCapacity
-
对画面中绿颜色(即不同程度的绿色)识别的精度范围。取值范围为 [0,1],默认值为 0.5。取值越大,代表可识别的绿色范围越大。当该参数取值过大时,人像边缘和人像范围内的绿色也会被识别。Agora 推荐你根据实际效果动态调整该参数的值。
注: 该参数仅在 modelType 设置为 SEG_MODEL_GREEN 时生效。
SimulcastStreamConfig
视频小流的配置。
public class SimulcastStreamConfig { public VideoEncoderConfiguration.VideoDimensions dimensions; public int bitrate; public int framerate; public SimulcastStreamConfig() { this.dimensions = new VideoEncoderConfiguration.VideoDimensions(-1, -1); this.bitrate = -1; this.framerate = 5; } public SimulcastStreamConfig( VideoEncoderConfiguration.VideoDimensions dimensions, int bitrate, int framerate) { this.dimensions = dimensions; this.bitrate = bitrate; this.framerate = framerate; } }
属性
- dimensions
- 视频尺寸。详见 VideoDimensions。默认值为 160 × 120。
- bitrate
- 视频码率 (Kbps)。默认值为 65。
- framerate
- 视频帧率 (fps)。默认值为 5。
SpatialAudioParams
空间音效参数。
public class SpatialAudioParams { public Double speaker_azimuth; public Double speaker_elevation; public Double speaker_distance; public Integer speaker_orientation; public Boolean enable_blur; public Boolean enable_air_absorb; public Double speaker_attenuation; public Boolean enable_doppler; @CalledByNative public Double getSpeakerAzimuth() { return speaker_azimuth; } @CalledByNative public Double getSpeakerElevation() { return speaker_elevation; } @CalledByNative public Double getSpeakerDistance() { return speaker_distance; } @CalledByNative public Integer getSpeakerOrientation() { return speaker_orientation; } @CalledByNative public Boolean getBlurFlag() { return enable_blur; } @CalledByNative public Boolean getAirAbsorbFlag() { return enable_air_absorb; } @CalledByNative public Double getSpeakerAttenuation() { return speaker_attenuation; } @CalledByNative public Boolean getDopplerFlag() { return enable_doppler; } }
属性
- speaker_azimuth
- 远端用户或媒体播放器相对于本地用户的水平角。取值范围为 [0,360],单位为度。其中:
- 0:(默认)0 度,表示水平面的正前方。
- 90: 90 度,表示水平面的正左方。
- 180: 180 度,表示水平面的正后方。
- 270: 270 度,表示水平面的正右方。
- 360: 360 度,表示水平面的正前方。
- speaker_elevation
- 远端用户或媒体播放器相对于本地用户的俯仰角。取值范围为 [-90,90],单位为度。其中:
- 0:(默认)0 度,表示水平面无旋转。
- -90: -90 度,表示水平面向下旋转 90 度。
- 90: 90 度,表示水平面向上旋转 90 度。
- speaker_distance
- 远端用户或媒体播放器相对于本地用户的距离。取值范围为 [1,50],单位为米。默认值为 1 米。
- speaker_orientation
- 远端用户或媒体播放器相对于本地用户的朝向。取值范围为 [0,180],单位为度。其中:
- 0:(默认)0 度,表示声源和听者朝向同一方向。
- 180: 180 度,表示声源和听者面对面。
- enable_blur
- 是否开启声音模糊处理:
true
: 开启模糊处理。false
: (默认)关闭模糊处理。
- enable_air_absorb
- 是否开启空气衰减,即模拟声音在空气中传播的音色衰减效果:在一定的传输距离下,高频声音衰减速度快、低频声音衰减速度慢。
true
: (默认)开启空气衰减。需确认 speaker_attenuation 的值不为0
,否则该设置不生效。false
: 关闭空气衰减。
- speaker_attenuation
- 远端用户或媒体播放器的声音衰减系数,取值范围为[0,1]。其中:
- 0:广播模式,即音量和音色均不随距离衰减,无论距离远近,本地用户听到的音量和音色都无变化。
- (0,0.5):弱衰减模式,即音量和音色(需同时开启 enable_air_absorb )在传播过程中仅发生微弱衰减,跟真实环境相比,声音可以传播得更远。
- 0.5:(默认)模拟音量在真实环境下的衰减,效果等同于不设置 speaker_attenuation 参数。
- (0.5,1]:强衰减模式,即音量和音色(需同时开启 enable_air_absorb )在传播过程中发生迅速衰减。
- enable_doppler
- 是否开启多普勒音效:当声源与接收声源者之间产生相对位移时,接收方听到的音调会发生变化。
true
: 开启多普勒音效。false
: (默认)关闭多普勒音效。
警告:- 该参数适用于声源高速运动的场景(例如:赛车游戏),在普通音视频互动场景(语聊、连麦、在线 KTV)中不建议开启。
- 开启该参数时,建议设定一个规律的周期(比如 30 ms),然后调用 updatePlayerPositionInfo、updateSelfPosition 和 updateRemotePosition 方法持续更新声源和接收方的相对距离。以下因素会导致多普勒效应达不到预期或者声音出现抖动:更新距离的周期过长,更新周期不规律,网络丢包或延迟导致距离信息丢失。
SpatialAudioZone
隔声区域的设置。
public class SpatialAudioZone { public int zoneSetId; public float[] position; public float[] forward; public float[] right; public float[] up; public float forwardLength; public float rightLength; public float upLength; public float audioAttenuation; public SpatialAudioZone() { zoneSetId = -1; position = new float[] {0.0f, 0.0f, 0.0f}; forward = new float[] {0.0f, 0.0f, 0.0f}; right = new float[] {0.0f, 0.0f, 0.0f}; up = new float[] {0.0f, 0.0f, 0.0f}; forwardLength = 0.0f; rightLength = 0.0f; upLength = 0.0f; audioAttenuation = 0.0f; } @CalledByNative public float[] getPosition() { return position; } @CalledByNative public float[] getForward() { return forward; } @CalledByNative public float[] getRight() { return right; } @CalledByNative public float[] getUp() { return up; } @CalledByNative public int getZoneSetId() { return zoneSetId; } @CalledByNative public float getForwardLength() { return forwardLength; } @CalledByNative public float getRightLength() { return rightLength; } @CalledByNative public float getUpLength() { return upLength; } @CalledByNative public float getAudioAttenuation() { return audioAttenuation; } }
- 自从
- v4.0.1
属性
- zoneSetId
- 隔声区域的 ID。
- position
- 隔声区域的空间中心点。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
- forward
- 以 position 为起点,向前的单位向量。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
- right
- 以 position 为起点,向右的单位向量。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
- up
- 以 position 为起点,向上的单位向量。该参数是长度为 3 的数组,三个值依次表示前、右、上的坐标值。
- forwardLength
- 将整个隔声区域看做一个立方体,表示向前的边长,单位为游戏引擎的单位长度。
- rightLength
- 将整个隔声区域看做一个立方体,表示向右的边长,单位为游戏引擎的单位长度。
- upLength
- 将整个隔声区域看做一个立方体,表示向上的边长,单位为游戏引擎的单位长度。
- audioAttenuation
- 隔声区域以内的用户和外部用户互通时的声音衰减系数,取值范围为 [0,1]。其中:
- 0:广播模式,即音量和音色均不随距离衰减,无论距离远近,本地用户听到的音量和音色都无变化。
- (0,0.5):弱衰减模式,即音量和音色在传播过程中仅发生微弱衰减,跟真实环境相比,声音可以传播得更远。
- 0.5:模拟音量在真实环境下的衰减,效果等同于不设置 audioAttenuation 参数。
- (0.5,1]:强衰减模式 (默认值为 1) ,即音量和音色在传播过程中发生迅速衰减。
SrcInfo
媒体资源播放时的视频码率相关信息。
public class SrcInfo { private int bitrateInKbps; private String name; public SrcInfo() {} }
属性
- bitrateInKbps
- 媒体资源播放时的视频码率(Kbps)。
- name
- 媒体资源的名字。
TranscodingUser
参与转码合流的每个主播的设置。
public static class TranscodingUser {
public int uid;
public String userId;
public int x;
public int y;
public int width;
public int height;
public int zOrder;
public float alpha;
public int audioChannel;
public TranscodingUser() {
alpha = 1;
}
}
属性
- uid
-
主播的用户 ID。
- x
-
主播视频画面在输出视频画面的 x 坐标 (pixel),以输出视频画面的左上角为原点。取值范围为[0,width],width 为 LiveTranscoding 中设置的
width
。 - y
- 主播视频画面在输出视频画面的 y 坐标 (pixel),以输出视频画面的左上角为原点。取值范围为[0,height],height 为 LiveTranscoding 中设置的
height
。 - width
- 主播视频画面的宽 (pixel)。
- height
-
主播视频画面的高 (pixel)。
- zOrder
-
主播视频画面的图层编号。取值范围为 [0,100]。
- 0:(默认)视频画面位于图层的最下层。
- 100: 视频画面位于图层的最上层。
注意:- 如果取值小于 0 或大于 100,会返回错误 ERR_INVALID_ARGUMENT。
- 支持将 zOrder 设置为 0。
- alpha
-
主播视频画面的透明度。取值范围为 [0.0,1.0]。
- 0.0: 完全透明。
- 1.0:(默认)完全不透明。
- audioChannel
-
主播音频在输出音频中占用的声道。默认值为 0,取值范围为 [0,5]:
0
: (推荐)默认混音设置,最多支持双声道,与主播上行音频相关。1
: 主播音频在输出音频的 FL 声道。如果主播上行音频是多声道,Agora 服务器会先把多声道混音成单声道。2
: 主播音频在输出音频的 FC 声道。如果主播上行音频是多声道,Agora 服务器会先把多声道混音成单声道。3
: 主播音频在输出音频的 FR 声道。如果主播上行音频是多声道,Agora 服务器会先把多声道混音成单声道。4
: 主播音频在输出音频的 BL 声道。如果主播上行音频是多声道,Agora 服务器会先把多声道混音成单声道。5
: 主播音频在输出音频的 BR 声道。如果主播上行音频是多声道,Agora 服务器会先把多声道混音成单声道。0xFF
或取值大于5
: 该主播音频静音,Agora 服务器移除该主播的音频。
注意: 取值不为0
时,需要使用特殊的播放器。
UplinkNetworkInfo
上行网络信息。
public static class UplinkNetworkInfo { public int video_encoder_target_bitrate_bps; };
属性
- video_encoder_target_bitrate_bps
- 目标视频编码器的码率 (bps)。
UserAudioSpectrumInfo
远端用户的音频频谱信息。
public class UserAudioSpectrumInfo { private int uid; private AudioSpectrumInfo audioSpectrumInfo; }
属性
- uid
- 远端用户 ID。
- audioSpectrumInfo
-
远端用户的音频频谱数据。详见 AudioSpectrumInfo。
UserInfo
用户的信息。
public class UserInfo {
public int uid;
public String userAccount;
@CalledByNative
public UserInfo(int uid, String userAccount) {
this.uid = uid;
this.userAccount = userAccount;
}
}
属性
- uid
- 用户 ID。
- userAccount
- 用户 Account。
VideoCanvas
视频画布对象的属性。
public class VideoCanvas { public static final int RENDER_MODE_HIDDEN = 1; public static final int RENDER_MODE_FIT = 2; public static final int RENDER_MODE_ADAPTIVE = 3; public View view; public int renderMode; public int mirrorMode; public int sourceType; public int sourceId; public int uid; }
属性
- view
- 视频显示窗口。
- renderMode
-
- RENDER_MODE_HIDDEN (1):优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,多出的视频将被截掉。
- RENDER_MODE_FIT (2):优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频长宽与显示窗口不同,视窗上未被填满的区域将被涂黑。
- RENDER_MODE_ADAPTIVE (3): 该模式已废弃,不推荐使用。
- mirrorMode
-
- MIRROR_MODE_AUTO (0):默认的镜像模式(SDK 决定镜像模式)。如果你使用前置摄像头,默认启动本地视图镜像模式;如果你启用后置摄像头,默认关闭本地视图镜像模式。
- MIRROR_MODE_ENABLED (1):开启镜像模式。
- MIRROR_MODE_DISABLED (2):关闭镜像模式。
注意:- 本地视图镜像模式:如果你使用前置摄像头,默认启动本地视图镜像模式;如果你使用后置摄像头,默认关闭本地视图镜像模式。
- 远端用户视图镜像模式:默认关闭远端用户的镜像模式。
- uid
- 用户 ID。
- sourceType
- 视频源的类型,详见 VideoSourceType。
- sourceId
- 视频源 ID。
VideoDenoiserOptions
视频降噪选项。
public class VideoDenoiserOptions { public static final int VIDEO_DENOISER_AUTO = 0; public static final int VIDEO_DENOISER_MANUAL = 1; public static final int VIDEO_DENOISER_LEVEL_HIGH_QUALITY = 0; public static final int VIDEO_DENOISER_LEVEL_FAST = 1; public static final int VIDEO_DENOISER_LEVEL_STRENGTH = 2; public int denoiserMode; public int denoiserLevel; public VideoDenoiserOptions() { denoiserMode = VIDEO_DENOISER_AUTO; denoiserLevel = VIDEO_DENOISER_LEVEL_HIGH_QUALITY; } public VideoDenoiserOptions(int mode, int level) { denoiserMode = mode; denoiserLevel = level; } }
属性
- level
- 视频降噪等级。
- VIDEO_DENOISER_LEVEL_HIGH_QUALITY0:(默认)优先画质的暗光增强,会处理视频图像的亮度、细节、噪声,消耗的性能适中,处理速度适中,综合画质最优。
- VIDEO_DENOISER_LEVEL_FAST1:优先性能的视频降噪。是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,Agora 推荐你在摄像头固定的情况下使用该设置。
- VIDEO_DENOISER_LEVEL_STRENGTH2:强效的视频降噪。是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 VIDEO_DENOISER_LEVEL_HIGH_QUALITY 不能满足你的视频降噪需求,你可以使用该设置。
- mode
- 视频降噪模式。
- VIDEO_DENOISER_AUTO0:(默认)自动模式。SDK 会根据环境光亮度自动开启或关闭视频降噪功能。
- VIDEO_DENOISER_MANUAL1:手动模式。用户需手动开启或关闭视频降噪功能。
VideoDimensions
视频尺寸。
static public class VideoDimensions { public int width; public int height; public VideoDimensions(int width, int height) { this.width = width; this.height = height; } public VideoDimensions() { this.width = 0; this.height = 0; } }
属性
- width
-
视频宽度,单位为像素。
- height
- 视频高度,单位为像素。
VideoEncoderConfiguration
视频编码器的配置。
public class VideoEncoderConfiguration { static public class VideoDimensions { public int width; public int height; public VideoDimensions(int width, int height) { this.width = width; this.height = height; } public VideoDimensions() { this.width = 0; this.height = 0; } } public final static VideoDimensions VD_120x120 = new VideoDimensions(120, 120); public final static VideoDimensions VD_160x120 = new VideoDimensions(160, 120); public final static VideoDimensions VD_180x180 = new VideoDimensions(180, 180); public final static VideoDimensions VD_240x180 = new VideoDimensions(240, 180); public final static VideoDimensions VD_320x180 = new VideoDimensions(320, 180); public final static VideoDimensions VD_240x240 = new VideoDimensions(240, 240); public final static VideoDimensions VD_320x240 = new VideoDimensions(320, 240); public final static VideoDimensions VD_424x240 = new VideoDimensions(424, 240); public final static VideoDimensions VD_360x360 = new VideoDimensions(360, 360); public final static VideoDimensions VD_480x360 = new VideoDimensions(480, 360); public final static VideoDimensions VD_640x360 = new VideoDimensions(640, 360); public final static VideoDimensions VD_480x480 = new VideoDimensions(480, 480); public final static VideoDimensions VD_640x480 = new VideoDimensions(640, 480); public final static VideoDimensions VD_840x480 = new VideoDimensions(840, 480); public final static VideoDimensions VD_960x720 = new VideoDimensions(960, 720); public final static VideoDimensions VD_1280x720 = new VideoDimensions(1280, 720); public final static VideoDimensions VD_1920x1080 = new VideoDimensions(1920, 1080); public final static VideoDimensions VD_2540x1440 = new VideoDimensions(2540, 1440); public final static VideoDimensions VD_3840x2160 = new VideoDimensions(3840, 2160); public enum FRAME_RATE { FRAME_RATE_FPS_1(1), FRAME_RATE_FPS_7(7), FRAME_RATE_FPS_10(10), FRAME_RATE_FPS_15(15), FRAME_RATE_FPS_24(24), FRAME_RATE_FPS_30(30), FRAME_RATE_FPS_60(60); private int value; private FRAME_RATE(int v) { value = v; } public int getValue() { return this.value; } } public enum ORIENTATION_MODE { ORIENTATION_MODE_ADAPTIVE(0), ORIENTATION_MODE_FIXED_LANDSCAPE(1), ORIENTATION_MODE_FIXED_PORTRAIT(2); private int value; private ORIENTATION_MODE(int v) { value = v; } public int getValue() { return this.value; } } public enum DEGRADATION_PREFERENCE { MAINTAIN_QUALITY(0), MAINTAIN_FRAMERATE(1), MAINTAIN_BALANCED(2), MAINTAIN_RESOLUTION(3), DISABLED(100); private int value; private DEGRADATION_PREFERENCE(int v) { value = v; } public int getValue() { return this.value; } } public enum MIRROR_MODE_TYPE { MIRROR_MODE_AUTO(0), MIRROR_MODE_ENABLED(1), MIRROR_MODE_DISABLED(2); private int value; private MIRROR_MODE_TYPE(int v) { value = v; } public int getValue() { return this.value; } } public static final int STANDARD_BITRATE = 0; public static final int COMPATIBLE_BITRATE = -1; public static final int DEFAULT_MIN_BITRATE = -1; public static final int DEFAULT_MIN_FRAMERATE = -1; public static final int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2; public VideoDimensions dimensions; public int frameRate; public int minFrameRate; public int bitrate; public int minBitrate; public ORIENTATION_MODE orientationMode; public DEGRADATION_PREFERENCE degradationPrefer; public MIRROR_MODE_TYPE mirrorMode; public VideoEncoderConfiguration() { this.dimensions = new VideoDimensions(640, 480); this.frameRate = FRAME_RATE.FRAME_RATE_FPS_15.getValue(); this.minFrameRate = DEFAULT_MIN_FRAMERATE; this.bitrate = STANDARD_BITRATE; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE; this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, ORIENTATION_MODE orientationMode) { this.dimensions = dimensions; this.frameRate = frameRate.getValue(); this.minFrameRate = DEFAULT_MIN_FRAMERATE; this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, ORIENTATION_MODE orientationMode, MIRROR_MODE_TYPE mirrorMode) { this.dimensions = dimensions; this.frameRate = frameRate.getValue(); this.minFrameRate = DEFAULT_MIN_FRAMERATE; this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; this.mirrorMode = mirrorMode; } public VideoEncoderConfiguration( int width, int height, FRAME_RATE frameRate, int bitrate, ORIENTATION_MODE orientationMode) { this.dimensions = new VideoDimensions(width, height); this.frameRate = frameRate.getValue(); this.minFrameRate = DEFAULT_MIN_FRAMERATE; this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; } public VideoEncoderConfiguration(int width, int height, FRAME_RATE frameRate, int bitrate, ORIENTATION_MODE orientationMode, MIRROR_MODE_TYPE mirrorMode) { this.dimensions = new VideoDimensions(width, height); this.frameRate = frameRate.getValue(); this.minFrameRate = DEFAULT_MIN_FRAMERATE; this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; this.mirrorMode = mirrorMode; } }
属性
- dimensions
-
用户可以自行设置分辨率,也可以在如下列表中直接选择想要的分辨率:
- VD_120x120:视频分辨率为 120 × 120。
- VD_160x120:视频分辨率为 160 × 120。
- VD_180x180:视频分辨率为 180 × 180。
- VD_240x180:视频分辨率为 240 × 180。
- VD_320x180:视频分辨率为 320 × 180。
- VD_240x240:视频分辨率为 240 × 240。
- VD_320x240:视频分辨率为 320 × 240。
- VD_424x240:视频分辨率为 424 × 240。
- VD_360x360:视频分辨率为 360 × 360。
- VD_480x360:视频分辨率为 480 × 360。
- VD_640x360:视频分辨率为 640 × 360。
- VD_480x480:视频分辨率为 480 × 480。
- VD_640x480:视频分辨率为 640 × 480。
- VD_840x480:视频分辨率为 840 × 480。
- VD_960x720:视频分辨率为 960 × 720。
- VD_1280x720:视频分辨率为 1280 × 720。
- VD_1920x1080:视频分辨率为 1920 × 1080。
- VD_2540x1440:视频分辨率为 2540 × 1440。
- VD_3840x2160:视频分辨率为 3840 × 2160。
注意:- 视频能否达到 720P 的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720P 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。
- 默认值为 640 × 360。
- frameRate
- 视频编码的帧率(fps),默认值为 15。详见 FRAME_RATE。
- minFramerate
- 视频的最小帧率。默认值为 -1。
- bitrate
-
视频编码码率,单位为 Kbps。
- STANDARD_BITRATE: (推荐) 标准码率模式。该模式下,视频的码率是基准码率的两倍。
- COMPATIBLE_BITRATE: 适配码率模式。该模式下,视频码率与基准码率一致。直播时如果选择该模式,视频帧率可能会低于设置的值。
- minBitrate
-
最低编码码率,单位为 Kbps。
SDK 会根据网络状况自动调整视频编码码率。将参数设为高于默认值可强制视频编码器输出高质量图片,但在网络状况不佳情况下可能导致网络丢包并影响视频播放的流畅度造成卡顿。因此如非对画质有特殊需求,声网建议不要修改该参数的值。
注意: 该参数仅适用于直播场景。 - orientationMode
- 视频编码的方向模式,详见 ORIENTATION_MODE。
- degradationPreference
- 带宽受限时,视频编码降级偏好。详见 DEGRADATION_PREFERENCE 。
- mirrorMode
-
发送编码视频时是否开启镜像模式,只影响远端用户看到的视频画面。详见 MIRROR_MODE_TYPE。
注意: 默认关闭镜像模式。
VideoFrame
视频帧的属性设置。
public interface Buffer extends RefCounted { @CalledByNative("Buffer") int getWidth(); @CalledByNative("Buffer") int getHeight(); @Override @CalledByNative("Buffer") void retain(); @Override @CalledByNative("Buffer") void release(); @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } public interface ColorSpace { enum Range { Invalid(0), Limited(1), Full(2), Derived(3); private final int range; private Range(int range) { this.range = range; } public int getRange() { return range; }; } enum Matrix { RGB(0), BT709(1), Unspecified(2), FCC(4), BT470BG(5), SMPTE170M(6), SMPTE240M(7), YCOCG(8), BT2020_NCL(9), BT2020_CL(10), SMPTE2085(11), CDNCLS(12), CDCLS(13), BT2100_ICTCP(14); private final int matrix; private Matrix(int matrix) { this.matrix = matrix; } public int getMatrix() { return matrix; }; } enum Transfer { BT709(1), Unspecified(2), GAMMA22(4), GAMMA28(5), SMPTE170M(6), SMPTE240M(7), LINEAR(8), LOG(9), LOG_SQRT(10), IEC61966_2_4(11), BT1361_ECG(12), IEC61966_2_1(13), BT2020_10(14), BT2020_12(15), SMPTEST2084(16), SMPTEST428(17), ARIB_STD_B67(18); private final int transfer; private Transfer(int transfer) { this.transfer = transfer; } public int getTransfer() { return transfer; } } enum Primary { BT709(1), Unspecified(2), BT470M(4), BT470BG(5), kSMPTE170M(6), kSMPTE240M(7), kFILM(8), kBT2020(9), kSMPTEST428(10), kSMPTEST431(11), kSMPTEST432(12), kJEDECP22(22); private final int primary; private Primary(int primary) { this.primary = primary; } public int getPrimary() { return primary; } } Range getRange(); Matrix getMatrix(); Transfer getTransfer(); Primary getPrimary(); } public enum SourceType { kFrontCamera, kBackCamera, kUnspecified, } private Buffer buffer; private int rotation; private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; private byte[] alphaBuffer; public VideoFrame(Buffer buffer, int rotation, long timestampNs) { this(buffer, rotation, timestampNs, null, null, 1.0f, SourceType.kUnspecified.ordinal()); } @CalledByNative public VideoFrame(Buffer buffer, int rotation, long timestampNs, ColorSpace colorSpace, byte[] alphaBuffer, float sampleAspectRatio, int sourceType) { if (buffer == null) { throw new IllegalArgumentException("buffer not allowed to be null"); } if (rotation % 90 != 0) { throw new IllegalArgumentException("rotation must be a multiple of 90"); } this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; this.colorSpace = colorSpace; this.alphaBuffer = alphaBuffer; this.sampleAspectRatio = sampleAspectRatio; this.sourceType = SourceType.values()[sourceType]; } @CalledByNative public SourceType getSourceType() { return sourceType; } public float getSampleAspectRatio() { return sampleAspectRatio; } @CalledByNative public Buffer getBuffer() { return buffer; } @CalledByNative public int getRotation() { return rotation; } @CalledByNative public long getTimestampNs() { return timestampNs; } public int getRotatedWidth() { if (rotation % 180 == 0) { return buffer.getWidth(); } return buffer.getHeight(); } public int getRotatedHeight() { if (rotation % 180 == 0) { return buffer.getHeight(); } return buffer.getWidth(); } public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; } public ColorSpace getColorSpace() { return colorSpace; } public byte[] getAlphaBuffer() { return alphaBuffer; } @Override public void retain() { buffer.retain(); } @Override @CalledByNative public void release() { buffer.release(); } }
视频数据的格式为 YUV420。缓冲区给出的是指向指针的指针,该接口不能修改缓冲区的指针,只能修改缓冲区的内容。
属性
- buffer
-
警告: 该参数不可为空,否则会发生异常。缓冲区的数据。与该参数相关的方法如下所示:
- rotation
- 在渲染视频前设置该帧的顺时针旋转角度,目前支持 0 度、90 度、180 度,和 270 度。
- timestampNs
- 视频帧的时间戳(纳秒)。
- colorSpace
- 表示视频帧的色彩空间。详见 VideoColorSpace。
- sourceType
- 在使用 SDK 采集视频时,表示该视频源的类型。
- kFrontCamera:前置摄像头。
- kBackCamera:后置摄像头。
- kUnspecified:(默认) 视频源类型未知。
- sampleAspectRatio
- 单个像素的宽高比,即每个像素宽度与高度的比值。
- alphaBuffer
-
表示人像分割算法的输出数据,跟视频帧的尺寸一致。每个像素点的取值范围为 [0,255],其中 0 表示背景;255 代表前景(人像)。
在用户自定义视频渲染场景下,该参数可帮助实现将视频背景自渲染为各种效果,例如:透明、纯色、图片、视频等等。注: 该参数需要联系技术支持开通。
VirtualBackgroundSource
自定义的背景。
public class VirtualBackgroundSource { public static final int BACKGROUND_COLOR = 1; public static final int BACKGROUND_IMG = 2; public static final int BACKGROUND_BLUR = 3; public static final int BLUR_DEGREE_LOW = 1; public static final int BLUR_DEGREE_MEDIUM = 2; public static final int BLUR_DEGREE_HIGH = 3; public int backgroundSourceType; public int color; public String source = null; public int blurDegree; public VirtualBackgroundSource( int backgroundSourceType, int color, String source, int blurDegree) { this.backgroundSourceType = backgroundSourceType; this.color = color; this.source = source; this.blurDegree = blurDegree; } public VirtualBackgroundSource() { this.backgroundSourceType = BACKGROUND_COLOR; this.color = 0xffffff; this.source = ""; this.blurDegree = BLUR_DEGREE_HIGH; } }
属性
- backgroundSourceType
- 自定义的背景图类型。
- BACKGROUND_COLOR(1):(默认)背景图为纯色。
- BACKGROUND_IMG(2):背景图为 PNG、JPG 格式的图片。
- BACKGROUND_BLUR(3):将虚化处理后的背景作为背景图。
- color
- 自定义的背景图颜色。格式为 RGB 定义下的十六进制整数,不要带 # 号,如 0xFFB6C1 表示浅粉色。 默认值为 0xFFFFFF,表示白色。 取值范围为 [0x000000,0xffffff]。如果取值非法,SDK 会用白色背景图替换原背景图。
注意: 该参数仅在自定义背景图类型为 BACKGROUND_COLOR 时生效。
- source
- 自定义背景图的本地绝对路径。支持 PNG 和 JPG 格式。如果路径无效,SDK 会用白色背景图替换原背景图。
注意: 该参数仅在自定义背景图类型为 BACKGROUND_IMG 时生效。
- blurDegree
- 自定义背景图的模糊程度。
- BLUR_DEGREE_LOW(1):自定义背景图的虚化程度为低。用户差不多能看清背景。
- BLUR_DEGREE_MEDIUM(2):自定义背景图的虚化程度为中。用户较难看清背景。
- BLUR_DEGREE_HIGH(3):(默认)自定义背景图的虚化程度为高。用户很难看清背景。
注意: 该参数仅在自定义背景图类型为 BACKGROUND_BLUR 时生效。
WatermarkOptions
水印图片的设置。
public class WatermarkOptions { public static class Rectangle { public int x = 0; public int y = 0; public int width = 0; public int height = 0; public Rectangle() { x = 0; y = 0; width = 0; height = 0; } public Rectangle(int x_, int y_, int width_, int height_) { x = x_; y = y_; width = width_; height = height_; } }; public boolean visibleInPreview = true; public Rectangle positionInLandscapeMode = new Rectangle(); public Rectangle positionInPortraitMode = new Rectangle(); }