AOQ Client SDK Android 版提供完整的实时音视频通信能力,包括引擎生命周期管理、音频/视频采集与播放、编解码配置、外部音频流注入、音频文件混音、实时消息收发、音视频帧数据回调等功能。本文档为 Android 平台 Java API 的完整参考。
接口目录
引擎生命周期
|
接口 |
简介 |
|
createEngine |
创建引擎实例(单例模式) |
|
destroy |
销毁引擎实例 |
|
getVersion |
获取 SDK 版本号 |
|
connect |
连接 Relay 服务器 |
|
disconnect |
断开服务器连接 |
音频设备管理
|
接口 |
简介 |
|
startAudioCapture |
打开音频采集设备(麦克风) |
|
stopAudioCapture |
关闭音频采集设备 |
|
muteAudioCapture |
静音或取消静音音频采集 |
|
startAudioPlayer |
开始音频渲染(播放远端音频) |
|
stopAudioPlayer |
停止音频渲染 |
|
pauseAudioPlayer |
暂停音频渲染,支持淡出 |
|
resumeAudioPlayer |
恢复音频渲染,支持淡入 |
|
interruptAudioPlayer |
打断本轮音频通话 |
|
enableSpeakerphone |
切换音频输出到扬声器或听筒 |
|
isSpeakerphoneEnabled |
查询当前是否使用扬声器输出 |
音频编码配置
|
接口 |
简介 |
|
setAudioEncoderConfig |
设置音频编码参数 |
|
setAudioDecoderConfig |
设置音频解码参数 |
视频设备管理
|
接口 |
简介 |
|
startVideoCapture |
打开视频采集设备(摄像头) |
|
stopVideoCapture |
关闭视频采集设备 |
|
switchCamera |
切换前后置摄像头 |
|
setLocalView |
设置或移除本地视频渲染窗口 |
|
setRemoteView |
设置或移除远端视频渲染窗口 |
视频编码与外部输入
|
接口 |
简介 |
|
setVideoEncoderConfig |
设置视频编码参数 |
|
pushExternalVideoCapturedFrame |
推送外部采集视频帧 |
|
pushExternalVideoEncodedFrame |
推送外部已编码视频帧 |
媒体流发送控制 / 实时消息
|
接口 |
简介 |
|
enableSendMediaStream |
控制本地媒体流的发送开关 |
|
sendDataMsg |
发送实时数据消息 |
音频文件播放
|
接口 |
简介 |
|
startAudioFile |
开始推流播放本地音频文件 |
|
stopAudioFile |
停止音频文件播放 |
|
pauseAudioFile |
暂停音频文件播放 |
|
resumeAudioFile |
恢复音频文件播放 |
|
getAudioFileDuration |
获取音频文件总时长 |
|
getAudioFileCurrentPosition |
获取音频文件当前播放位置 |
|
setAudioFilePositionMillis |
设置音频文件播放位置(seek) |
|
setAudioFileVolume |
设置音频文件音量 |
|
getAudioFileVolume |
获取音频文件当前音量 |
外部音频流
|
接口 |
简介 |
|
addAudioExternalStream |
新增一条外部音频流 |
|
removeAudioExternalStream |
移除外部音频流 |
|
pushAudioExternalStreamData |
输入外部音频 PCM 数据 |
|
setAudioExternalStreamVolume |
设置外部音频流音量 |
|
getAudioExternalStreamVolume |
获取外部音频流音量 |
|
clearAudioExternalStreamBuffer |
清空外部音频流缓存 |
音视频帧回调
|
接口 |
简介 |
|
setAudioFrameObserver |
设置音频帧数据回调监听 |
|
enableAudioFrameObserver |
开启或关闭指定位置的音频帧回调 |
|
setVideoFrameObserver |
设置视频帧数据回调监听 |
|
enableVideoFrameObserver |
开启或关闭指定位置的视频帧回调 |
AoqClientListener 回调
|
回调 |
简介 |
|
onError |
引擎错误回调 |
|
onWarning |
引擎警告回调 |
|
onConnectionStatusChange |
连接状态变化回调 |
|
onStats |
引擎统计信息回调 |
|
onAudioDeviceStateChanged |
音频设备操作状态变化回调 |
|
onAudioDeviceRouteChanged |
音频输出路由变化回调 |
|
onAudioDeviceInterrupted |
音频设备中断回调 |
|
onVideoDeviceStateChanged |
视频设备操作状态变化回调 |
|
onAudioDeviceFocusChanged |
音频焦点变化回调 |
|
onAudioFileState |
音频文件播放状态回调 |
|
onDataMsg |
收到实时数据消息回调 |
接口详情
引擎生命周期
createEngine
创建引擎实例。SDK 内部以全局单例方式持有引擎,重复调用会返回已创建的实例。
@NonNull
public static AoqClientEngine createEngine(
@NonNull Context context,
@NonNull AoqCreateConfig config,
@NonNull AoqClientListener listener)
|
参数 |
类型 |
说明 |
|
context |
Context |
Android 应用上下文 |
|
config |
AoqCreateConfig |
引擎创建配置 |
|
listener |
AoqClientListener |
引擎事件回调监听 |
返回值:AoqClientEngine 引擎实例,不会返回 null。
destroy
销毁引擎实例,释放所有资源。
public static int destroy()
返回值:0 表示成功;非 0 表示失败。
getVersion
@NonNull
public static String getVersion()
返回值:版本号字符串,如 "1.0.0"。
connect
连接 Relay 服务器。连接参数由业务方 AppServer 通过 /api/v1/allocate 分配后下发给客户端。
public abstract int connect(@NonNull AoqConnectConfig config)
返回值:0 表示调用已下发(异步执行);非 0 表示参数校验失败。
disconnect
public abstract int disconnect()
返回值:0 表示调用已下发(异步执行);非 0 表示失败。
音频设备管理
public abstract int startAudioCapture(@NonNull AoqAudioCaptureConfig config)
public abstract int stopAudioCapture()
public abstract int muteAudioCapture(boolean mute)
public abstract int startAudioPlayer(@NonNull AoqAudioPlaybackConfig config)
public abstract int stopAudioPlayer()
public abstract int pauseAudioPlayer(int fadeMs)
public abstract int resumeAudioPlayer(int fadeMs)
public abstract int interruptAudioPlayer(@NonNull AoqTrackType trackType, int fadeMs)
public abstract int enableSpeakerphone(boolean enable)
public abstract boolean isSpeakerphoneEnabled()
fadeMs:淡出/淡入时长(毫秒);0 表示立即执行。
音频编码配置
public abstract int setAudioEncoderConfig(@NonNull AoqAudioCodecConfig config)
public abstract int setAudioDecoderConfig(@NonNull AoqAudioCodecConfig config)
视频设备管理
public abstract int startVideoCapture(@NonNull AoqVideoCaptureConfig config)
public abstract int stopVideoCapture()
public abstract int switchCamera(@NonNull AoqCameraDirection direction)
public abstract int setLocalView(@NonNull AoqTrackType trackType, @Nullable AoqVideoCanvas canvas)
public abstract int setRemoteView(@NonNull AoqTrackType trackType, @Nullable AoqVideoCanvas canvas)
setLocalView/setRemoteView 的 trackType 参数传 AoqTrackTypeVideo。
视频编码与外部输入
public abstract int setVideoEncoderConfig(@NonNull AoqVideoCodecConfig config)
public abstract int pushExternalVideoCapturedFrame(@NonNull AoqTrackType trackType, @NonNull AoqVideoFrame frame)
public abstract int pushExternalVideoEncodedFrame(@NonNull AoqTrackType trackType, @NonNull AoqVideoEncodedFrame frame)
pushExternalVideoCapturedFrame 仅在 startVideoCapture(isExternal=true) 后消费。若缓冲区满返回 AoqErrorCodeVideoExternalBufferFull(210)。
媒体流发送控制
public abstract int enableSendMediaStream(@NonNull AoqTrackType trackType, boolean enable)
建议初始化后先 enableSendMediaStream(false),待 onConnectionStatusChange(Connected) 后再开启。
音频文件播放
public abstract int startAudioFile(@NonNull String fileId, @NonNull AoqAudioFileMixConfig config)
public abstract int stopAudioFile(@NonNull String fileId)
public abstract int pauseAudioFile(@NonNull String fileId)
public abstract int resumeAudioFile(@NonNull String fileId)
public abstract long getAudioFileDuration(@NonNull String fileId)
public abstract long getAudioFileCurrentPosition(@NonNull String fileId)
public abstract int setAudioFilePositionMillis(@NonNull String fileId, long positionMillis)
public abstract int setAudioFileVolume(@NonNull String fileId, @NonNull AoqAudioStreamDirection type, int volume)
public abstract int getAudioFileVolume(@NonNull String fileId, @NonNull AoqAudioStreamDirection type)
外部音频流
public abstract int addAudioExternalStream(@NonNull String streamId, @NonNull AoqAudioExternalStreamConfig config)
public abstract int removeAudioExternalStream(@NonNull String streamId)
public abstract int pushAudioExternalStreamData(@NonNull String streamId, @NonNull AoqAudioFrameData data)
public abstract int setAudioExternalStreamVolume(@NonNull String streamId, @NonNull AoqAudioStreamDirection type, int volume)
public abstract int getAudioExternalStreamVolume(@NonNull String streamId, @NonNull AoqAudioStreamDirection type)
public abstract void clearAudioExternalStreamBuffer(@NonNull String streamId, int fadeoutMs)
pushAudioExternalStreamData 缓冲区满时返回 AoqErrorCodeAudioExternalBufferFull(110),建议 Sleep 30ms 后重试。
实时消息
public abstract int sendDataMsg(@NonNull AoqDataMsg msg)
音频帧回调
public abstract int setAudioFrameObserver(@Nullable AoqClientListener.AoqAudioFrameListener listener)
public abstract int enableAudioFrameObserver(boolean enabled, @NonNull AoqAudioSource audioSource, @NonNull AoqAudioObserverConfig config)
视频帧回调
public abstract int setVideoFrameObserver(@Nullable AoqClientListener.AoqVideoFrameListener listener)
public abstract int enableVideoFrameObserver(boolean enabled, @NonNull AoqVideoSource videoSource, @NonNull AoqVideoObserverConfig config)
AoqClientListener 回调
AoqClientListener 是 SDK 所有异步事件通知的统一出口。所有回调方法都带有默认空实现,无需强制重写不关心的方法。
public void onError(int code, String message)
public void onWarning(int code, String message)
public void onConnectionStatusChange(@NonNull AoqConnectionStatus status)
public void onStats(@NonNull AoqStats stats)
public void onAudioDeviceStateChanged(@NonNull AoqAudioDeviceState state)
public void onAudioDeviceRouteChanged(int routeType)
public void onAudioDeviceInterrupted(boolean interrupt)
public void onVideoDeviceStateChanged(@NonNull AoqVideoDeviceState state)
public void onAudioDeviceFocusChanged(int audioFocus)
public void onAudioFileState(@NonNull AoqAudioFileState state)
public void onDataMsg(@NonNull AoqDataMsg msg)
连接状态流转:Disconnected → Connecting → Connected/Failed → Disconnected。
AoqAudioFrameListener
public interface AoqAudioFrameListener {
default void onCapturedAudioFrame(@NonNull AoqAudioFrameData frame) {}
default void onProcessCapturedAudioFrame(@NonNull AoqAudioFrameData frame) {}
default void onPublishAudioFrame(@NonNull AoqTrackType trackType, @NonNull AoqAudioFrameData frame) {}
default void onPlaybackAudioFrame(@NonNull AoqAudioFrameData frame) {}
}
AoqVideoFrameListener
public interface AoqVideoFrameListener {
default boolean onCapturedVideoFrame(@NonNull AoqVideoFrameData frame) { return false; }
default boolean onPreEncodeVideoFrame(@NonNull AoqTrackType trackType, @NonNull AoqVideoFrameData frame) { return false; }
default boolean onRemoteVideoFrame(@NonNull AoqTrackType trackType, @NonNull AoqVideoFrameData frame) { return false; }
}
返回 true 表示数据已修改需写回 SDK(仅 I420 写回生效)。frame 中 ByteBuffer/textureId 仅在回调期间有效,异步使用需自行拷贝。
数据类型与枚举
通用类型
AoqCreateConfig
|
字段 |
类型 |
默认值 |
说明 |
|
workDir |
String |
"" |
SDK 工作目录 |
|
isBTScoMode |
boolean |
false |
true 蓝牙 SCO 模式;false A2DP 模式 |
|
enableDumpAudio |
boolean |
false |
是否开启音频 dump(调试用) |
|
extras |
String |
"" |
扩展参数字符串 |
AoqConnectConfig
|
字段 |
类型 |
默认值 |
说明 |
|
token |
String |
"" |
连接鉴权 Token |
|
sid |
String |
"" |
会话 ID |
|
certFingerprint |
String |
"" |
服务器证书指纹 |
|
relayEndpoints |
List<AoqRelayEndpoint> |
空 |
Relay 接入点列表 |
|
workspaceIdHash |
String |
"" |
工作空间 ID Hash |
|
publishTracks |
List<AoqTrackParam> |
空 |
本端发布轨道列表 |
|
subscribeTracks |
List<AoqTrackParam> |
空 |
本端订阅轨道列表 |
统计信息类型
AoqNetworkStats
|
字段 |
类型 |
说明 |
|
sendBitrate |
int |
发送码率(bps) |
|
sendBytes |
long |
累计发送字节数 |
|
recvBitrate |
int |
接收码率(bps) |
|
recvBytes |
long |
累计接收字节数 |
|
loss |
int |
丢包率(0-100) |
|
rtt |
int |
往返延迟(ms) |
枚举类型
AoqErrorCode
|
枚举值 |
值 |
说明 |
|
AoqErrorCodeOK |
0 |
成功 |
|
AoqErrorCodeParamInvalid |
1 |
参数非法 |
|
AoqErrorCodeStateInvalid |
2 |
状态非法 |
|
AoqErrorCodeUnSupport |
3 |
不支持 |
|
AoqErrorCodeAudio |
100 |
音频通用错误 |
|
AoqErrorCodeAudioExternalBufferFull |
110 |
外部音频缓冲区满 |
|
AoqErrorCodeAudioDevice |
120 |
音频设备通用错误 |
|
AoqErrorCodeAudioDeviceRecordingAuthFailed |
121 |
录音权限未获取 |
|
AoqErrorCodeAudioDeviceRecordingOccupied |
122 |
录音设备被占用 |
|
AoqErrorCodeAudioDeviceRecordingBackgroundStart |
123 |
后台启动录音失败 |
|
AoqErrorCodeAudioDeviceRecordingStartFail |
124 |
录音启动失败 |
|
AoqErrorCodeAudioDevicePlayoutOccupied |
125 |
播放设备被占用 |
|
AoqErrorCodeAudioDevicePlayoutBackgroundStart |
126 |
后台启动播放失败 |
|
AoqErrorCodeAudioDevicePlayoutStartFail |
127 |
播放启动失败 |
|
AoqErrorCodeAudioDeviceEarpieceRequiresVoipMode |
128 |
听筒需要 VoIP 模式 |
|
AoqErrorCodeVideo |
200 |
视频通用错误 |
|
AoqErrorCodeVideoExternalBufferFull |
210 |
外部视频缓冲区满 |
|
AoqErrorCodeVideoExternalCaptureNotEnabled |
211 |
外部视频采集未启用 |
|
AoqErrorCodeVideoExternalEncoderNotEnabled |
212 |
外部视频编码未启用 |
|
AoqErrorCodeVideoDevice |
220 |
视频设备通用错误 |
|
AoqErrorCodeVideoDeviceCameraOpenFail |
221 |
摄像头打开失败 |
|
AoqErrorCodeVideoDeviceCameraAuthFailed |
222 |
摄像头权限未获取 |
|
AoqErrorCodeVideoDeviceCameraOccupied |
223 |
摄像头被占用 |
|
AoqErrorCodeVideoDeviceCameraRunningError |
224 |
摄像头运行异常 |
|
AoqErrorCodeVideoCodec |
230 |
视频编解码通用错误 |
|
AoqErrorCodeVideoCodecEncoderInitFail |
231 |
视频编码器初始化失败 |
|
AoqErrorCodeVideoRender |
240 |
视频渲染通用错误 |
|
AoqErrorCodeVideoRenderCreateFail |
241 |
视频渲染创建失败 |
|
AoqErrorCodeVideoRenderDrawError |
242 |
视频渲染绘制错误 |
AoqWarningCode
|
枚举值 |
值 |
说明 |
|
AoqWCOK |
0 |
无警告 |
|
AoqWCAudio |
100 |
音频通用警告 |
|
AoqWCAudioHowling |
101 |
音频啸叫检测 |
|
AoqWCAudioDevice |
120 |
音频设备通用警告 |
|
AoqWCAudioDeviceMicEnumerateError |
121 |
麦克风枚举错误 |
|
AoqWCAudioDeviceMicStartTimeout |
122 |
麦克风启动超时 |
|
AoqWCAudioDeviceRecordingError |
123 |
录音过程错误 |
|
AoqWCAudioDeviceSpeakerEnumerateError |
124 |
扬声器枚举错误 |
|
AoqWCAudioDeviceSpeakerStartTimeout |
125 |
扬声器启动超时 |
|
AoqWCAudioDevicePlayoutError |
126 |
播放过程错误 |
|
AoqWCVideo |
200 |
视频通用警告 |
|
AoqWCVideoCameraEnumerateError |
201 |
摄像头枚举错误 |
|
AoqWCVideoEncoderSwitched |
202 |
视频编码器已切换 |
|
AoqWCVideoRenderDowngrade |
203 |
视频渲染降级 |
AoqTrackType
|
枚举值 |
值 |
说明 |
|
AoqTrackTypeAudio |
0 |
音频轨道 |
|
AoqTrackTypeVideo |
1 |
视频轨道 |
|
AoqTrackTypeData |
2 |
数据消息轨道 |
AoqEncoderType
|
枚举值 |
值 |
说明 |
|
AoqEncoderTypeUnknown |
0 |
未知格式 |
|
AoqEncoderTypeAudioPCM |
1 |
音频 PCM |
|
AoqEncoderTypeAudioOpus |
2 |
音频 Opus |
|
AoqEncoderTypeVideoH264 |
3 |
视频 H.264 |
|
AoqEncoderTypeVideoJpeg |
4 |
视频 JPEG |
|
AoqEncoderTypeDataText |
5 |
数据文本 |
AoqConnectionStatus
|
枚举值 |
值 |
说明 |
|
AoqConnectionStatusDisconnected |
0 |
未连接 |
|
AoqConnectionStatusConnecting |
1 |
连接中 |
|
AoqConnectionStatusConnected |
2 |
已连接 |
|
AoqConnectionStatusFailed |
3 |
连接失败 |
音频类型
AoqAudioCaptureConfig
|
字段 |
类型 |
默认值 |
说明 |
|
isExternal |
boolean |
false |
是否为外部采集模式 |
|
isVoipMode |
boolean |
false |
是否启用 VoIP 模式(影响设备路由,如听筒) |
|
channel |
int |
1 |
声道数(默认单声道) |
AoqAudioPlaybackConfig
|
字段 |
类型 |
默认值 |
说明 |
|
isVoipMode |
boolean |
false |
是否启用 VoIP 模式(硬件 AEC),移动端有效 |
|
isDefaultSpeaker |
boolean |
true |
是否默认扬声器,移动端有效 |
|
isExternal |
boolean |
false |
是否为外部播放模式 |
|
channel |
int |
1 |
声道数(默认单声道) |
AoqAudioCodecConfig
|
字段 |
类型 |
默认值 |
说明 |
|
trackType |
AoqTrackType |
Audio |
轨道类型 |
|
codecType |
AoqEncoderType |
AudioPCM |
编码格式 |
|
sampleRate |
int |
48000 |
采样率(Hz) |
|
channel |
int |
1 |
声道数 |
|
bitrate |
int |
32000 |
比特率(bps) |
视频类型
AoqVideoCaptureConfig
|
字段 |
类型 |
默认值 |
说明 |
|
width |
int |
1280 |
采集宽度(像素),isExternal=true 时无效 |
|
height |
int |
720 |
采集高度(像素),isExternal=true 时无效 |
|
fps |
int |
15 |
采集帧率,isExternal=true 时无效 |
|
isExternal |
boolean |
false |
是否外部采集,true 时不打开摄像头 |
|
cameraDirection |
AoqCameraDirection |
Front |
摄像头方向,isExternal=true 时无效 |
AoqVideoCodecConfig
|
字段 |
类型 |
默认值 |
说明 |
|
trackType |
AoqTrackType |
Video |
轨道类型 |
|
codecType |
AoqEncoderType |
VideoH264 |
编码格式 |
|
width |
int |
720 |
编码宽度(像素) |
|
height |
int |
1280 |
编码高度(像素) |
|
fps |
int |
5 |
编码帧率 |
|
bitrate |
int |
500000 |
目标比特率(bps) |
|
minBitrate |
int |
128000 |
最小比特率(bps) |
|
keyframeInterval |
int |
2 |
关键帧间隔(秒) |
|
mirrorMode |
AoqMirrorMode |
Disabled |
镜像模式 |
|
orientationMode |
AoqOrientationMode |
Auto |
视频方向模式 |
|
isExternal |
boolean |
false |
true 时 SDK 不做二次编码,由 pushExternalVideoEncodedFrame 直推 |
AoqVideoPixelFormat
|
枚举值 |
值 |
说明 |
|
AoqVideoPixelFormatUnknown |
0 |
未知格式 |
|
AoqVideoPixelFormatI420 |
1 |
I420(YUV 三平面格式) |
|
AoqVideoPixelFormatNV12 |
2 |
NV12(YUV 半平面格式) |
|
AoqVideoPixelFormatNV21 |
3 |
NV21(YUV 半平面格式) |
|
AoqVideoPixelFormatBGRA |
4 |
BGRA(32 位) |
|
AoqVideoPixelFormatRGBA |
5 |
RGBA(32 位) |
|
AoqVideoPixelFormatTextureOES |
7 |
外部 OES 纹理 |
|
AoqVideoPixelFormatTexture2D |
8 |
普通 2D 纹理 |
外部音频流类型
AoqAudioExternalStreamConfig
|
字段 |
类型 |
默认值 |
说明 |
|
trackType |
AoqTrackType |
Audio |
音频轨道类型 |
|
codecType |
AoqEncoderType |
AudioPCM |
音频流格式 |
|
channels |
int |
1 |
声道数 |
|
sampleRate |
int |
48000 |
采样率(Hz) |
|
playoutVolume |
int |
100 |
播放音量 [0-100] |
|
publishVolume |
int |
100 |
推流音量 [0-100] |
|
maxBufferDuration |
int |
1000 |
最大缓冲时长(毫秒) |
|
enable3A |
boolean |
false |
是否对输入 PCM 进行 3A 处理 |
AoqAudioStreamDirection
|
枚举值 |
值 |
说明 |
|
AoqAudioStreamPublish |
0 |
发布流(推流) |
|
AoqAudioStreamPlayout |
1 |
播放流(拉流) |
数据消息类型
AoqDataMsg
|
字段 |
类型 |
默认值 |
说明 |
|
data |
byte[] |
new byte[0] |
消息数据(字节数组) |