跳转到主要内容
AOQ SDK 参考

HarmonyOS SDK

AOQ HarmonyOS SDK API 参考

AOQ Client SDK HarmonyOS (OHOS) 端 API 参考,平台语言为 ArkTS (.ets),通过 NAPI 桥接 C++ 引擎。

目录

引擎生命周期

接口简介
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控制本地媒体流的发送开关

音频文件播放

接口简介
startAudioFile开始推流播放本地音频文件
stopAudioFile停止音频文件播放
pauseAudioFile暂停音频文件播放
resumeAudioFile恢复音频文件播放
getAudioFileDuration获取音频文件总时长
getAudioFileCurrentPosition获取音频文件当前播放位置
setAudioFilePositionMillis设置音频文件播放位置(seek)
setAudioFileVolume设置音频文件音量
getAudioFileVolume获取音频文件当前音量

外部音频流

接口简介
addAudioExternalStream新增一条外部音频流
removeAudioExternalStream移除外部音频流
pushAudioExternalStreamData输入外部音频 PCM 数据
setAudioExternalStreamVolume设置外部音频流音量
getAudioExternalStreamVolume获取外部音频流音量
clearAudioExternalStreamBuffer清空外部音频流缓存

实时消息

接口简介
sendDataMsg发送实时数据消息

音频帧回调

接口简介
setAudioFrameObserver设置音频帧数据回调监听
enableAudioFrameObserver开启或关闭指定位置的音频帧回调

视频帧回调

接口简介
setVideoFrameObserver设置视频帧数据回调监听
enableVideoFrameObserver开启或关闭指定位置的视频帧回调

AoqEngineEventListener 回调

回调简介
onError引擎错误回调
onWarning引擎警告回调
onConnectionStatusChange连接状态变化回调
onStats统计数据回调
onAudioDeviceStateChanged音频设备操作状态变化回调
onAudioDeviceRouteChanged音频输出路由变化回调
onAudioDeviceInterrupted音频设备中断回调
onVideoDeviceStateChanged视频设备操作状态变化回调
onAudioFileState音频文件播放状态回调
onDataMsg收到实时数据消息回调
IAudioFrameObserver音频帧数据观察者接口
IVideoFrameObserver视频帧数据观察者接口

接口详情

引擎生命周期

createEngine

创建引擎实例。SDK 内部以全局单例方式持有引擎,重复调用会返回已创建的实例。native 创建失败时返回 null。
static createEngine(config: AoqCreateConfig, listener: AoqEngineEventListener, context: common.Context): AoqClientEngine | null
参数类型说明
configAoqCreateConfig引擎创建配置
listenerAoqEngineEventListener引擎事件回调监听(interface,所有回调均为可选)
contextcommon.ContextUIAbility/Page 的 Context,用于 aki+ACPM 初始化
返回值AoqClientEngine | null(native 创建失败时返回 null) 注意事项:与 Android 不同,OHOS 端创建失败会返回 null,调用方需判空处理。context 必须是有效的 UIAbility 或 Page Context。

destroy

销毁引擎单例,释放所有资源。调用后需重新 createEngine 才能继续使用。
static destroy(): number
返回值:0 表示成功;非 0 表示失败

getVersion

获取 SDK 当前版本号。
static getVersion(): string
返回值:版本号字符串,如 "1.0.0"

connect

连接 Relay 服务器。连接参数由业务方 AppServer 通过 /api/v1/allocate 分配后下发给客户端。
connect(config: AoqConnectConfig): number
参数类型说明
configAoqConnectConfig连接配置,包含 Token、SID、Relay 接入点列表等
返回值:0 表示调用已下发(异步执行);非 0 表示参数校验失败 注意事项:连接状态变化通过 onConnectionStatusChange 异步通知。建议在 connect 前调用 enableSendMediaStream(false)

disconnect

断开与服务器的连接,释放连接相关资源。音视频采集/播放设备不会自动停止。
disconnect(): number
返回值:0 表示调用已下发(异步执行);非 0 表示失败

音频设备管理

startAudioCapture

打开音频采集设备(麦克风)。
startAudioCapture(config: AoqAudioCaptureConfig): number
参数类型说明
configAoqAudioCaptureConfig采集配置
返回值:0 表示成功;非 0 表示失败

stopAudioCapture

关闭音频采集设备。
stopAudioCapture(): number

muteAudioCapture

静音或取消静音音频采集。
muteAudioCapture(mute: boolean): number
参数类型说明
mutebooleantrue 为静音;false 为取消静音

startAudioPlayer

开始音频渲染(扬声器/听筒播放远端音频)。
startAudioPlayer(config: AoqAudioPlaybackConfig): number
参数类型说明
configAoqAudioPlaybackConfig播放配置

stopAudioPlayer

停止音频渲染。
stopAudioPlayer(): number

pauseAudioPlayer

暂停音频渲染,可指定淡出时长实现平滑过渡。
pauseAudioPlayer(fadeMs: number): number
参数类型说明
fadeMsnumber淡出时长(毫秒);0 表示立即停止

resumeAudioPlayer

恢复音频渲染,可指定淡入时长实现平滑过渡。
resumeAudioPlayer(fadeMs: number): number
参数类型说明
fadeMsnumber淡入时长(毫秒);0 表示立即恢复

interruptAudioPlayer

打断本轮音频通话。
interruptAudioPlayer(trackType: AoqTrackType, fadeMs: number): number
参数类型说明
trackTypeAoqTrackType目标轨道类型,通常传 AoqTrackTypeAudio
fadeMsnumber淡出时长(毫秒)

enableSpeakerphone

切换音频输出路由到扬声器或听筒。
enableSpeakerphone(enable: boolean): number
参数类型说明
enablebooleantrue 使用扬声器;false 使用听筒

isSpeakerphoneEnabled

查询当前是否使用扬声器输出。
isSpeakerphoneEnabled(): boolean
返回值:true 表示当前为扬声器模式;false 表示听筒模式

音频编码配置

setAudioEncoderConfig

设置音频编码参数。
setAudioEncoderConfig(config: AoqAudioCodecConfig): number

setAudioDecoderConfig

设置音频解码参数。
setAudioDecoderConfig(config: AoqAudioCodecConfig): number

视频设备管理

startVideoCapture

打开视频采集设备(摄像头)。当 config.isExternal = true 时不打开摄像头,由调用方通过 pushExternalVideoCapturedFrame 喂帧。
startVideoCapture(config: AoqVideoCaptureConfig): number

stopVideoCapture

关闭视频采集设备。
stopVideoCapture(): number

switchCamera

切换前后置摄像头。
switchCamera(direction: AoqCameraDirection): number
参数类型说明
directionAoqCameraDirectionAoqCameraDirectionFront 或 AoqCameraDirectionBack

setLocalView

设置或移除本地视频渲染窗口。
setLocalView(trackType: AoqTrackType, canvas: AoqVideoCanvas | null): number
参数类型说明
trackTypeAoqTrackTypeAoqTrackTypeVideo
canvasAoqVideoCanvas | null渲染画布配置;传 null 或 canvas.view 为 null 表示移除渲染窗口
注意:OHOS 上必须在 XComponent.onLoad 回调之后调用,canvas.view 应传入 AoqXComponentController 实例。

setRemoteView

设置或移除远端视频渲染窗口。
setRemoteView(trackType: AoqTrackType, canvas: AoqVideoCanvas | null): number
参数类型说明
trackTypeAoqTrackTypeAoqTrackTypeVideo
canvasAoqVideoCanvas | null渲染画布配置;传 null 或 canvas.view 为 null 表示移除渲染窗口

视频编码与外部输入

setVideoEncoderConfig

设置视频编码参数,按 config.trackType 路由到对应轨道。
setVideoEncoderConfig(config: AoqVideoCodecConfig): number

pushExternalVideoCapturedFrame

推送外部采集视频帧。
pushExternalVideoCapturedFrame(trackType: AoqTrackType, frame: AoqVideoFrame): number
参数类型说明
trackTypeAoqTrackTypeAoqTrackTypeVideo
frameAoqVideoFrame视频帧数据
路由规则:仅在 startVideoCapture(isExternal=true) 后消费。支持格式:NV12 / NV21 / BGRA / RGBA / I420。 若缓冲区满,会返回错误码 AoqECVideoExternalBufferFull(210),调用方需 sleep 后重试,禁止 busy loop。

pushExternalVideoEncodedFrame

推送外部已编码视频帧。SDK 不做二次编码,直接打包发送。
pushExternalVideoEncodedFrame(trackType: AoqTrackType, frame: AoqVideoEncodedFrame): number
参数类型说明
trackTypeAoqTrackTypeAoqTrackTypeVideo
frameAoqVideoEncodedFrame已编码帧数据
路由规则:仅在 setVideoEncoderConfig(isExternal=true) 配置后才消费。

媒体流发送控制

enableSendMediaStream

控制本地媒体流的发送,按 trackType 路由到对应轨道。
enableSendMediaStream(trackType: AoqTrackType, enable: boolean): number
参数类型说明
trackTypeAoqTrackTypeAoqTrackTypeAudio / AoqTrackTypeVideo
enablebooleantrue 启用发送;false 停用发送
使用建议:初始化后先调用 enableSendMediaStream(trackType, false),待 connect 成功且会话握手完成(收到 onConnectionStatusChange(AoqConnectionStatusConnected))后再开启发送。

音频文件播放

startAudioFile

开始推流播放本地音频文件。音频文件播放会混音到推流和本地播放中。
startAudioFile(fileId: string, config: AoqAudioFileMixConfig): number
参数类型说明
fileIdstring音频文件唯一标识,由调用方指定
configAoqAudioFileMixConfig播放配置

stopAudioFile / pauseAudioFile / resumeAudioFile

stopAudioFile(fileId: string): number
pauseAudioFile(fileId: string): number
resumeAudioFile(fileId: string): number

getAudioFileDuration / getAudioFileCurrentPosition

getAudioFileDuration(fileId: string): number      // 返回总时长(ms);负值表示失败
getAudioFileCurrentPosition(fileId: string): number // 返回当前位置(ms);负值表示失败

setAudioFilePositionMillis

setAudioFilePositionMillis(fileId: string, positionMillis: number): number

setAudioFileVolume / getAudioFileVolume

setAudioFileVolume(fileId: string, type: AoqAudioStreamDirection, volume: number): number
getAudioFileVolume(fileId: string, type: AoqAudioStreamDirection): number // 返回 [0,100];负值表示失败

外部音频流

addAudioExternalStream

新增一条外部音频流。
addAudioExternalStream(streamId: string, config: AoqAudioExternalStreamConfig): number

pushAudioExternalStreamData

输入外部音频 PCM 数据。若缓冲区满返回 AoqECAudioExternalBufferFull(110)。
pushAudioExternalStreamData(streamId: string, data: AoqAudioFrameData): number

setAudioExternalStreamVolume / getAudioExternalStreamVolume

setAudioExternalStreamVolume(streamId: string, type: AoqAudioStreamDirection, vol: number): number
getAudioExternalStreamVolume(streamId: string, type: AoqAudioStreamDirection): number

clearAudioExternalStreamBuffer

清空外部音频流缓存。无返回值,异步执行。
clearAudioExternalStreamBuffer(streamId: string, fadeoutMs: number): void
参数类型说明
fadeoutMsnumber-1 默认淡出;0 立即清空;>0 保留指定毫秒后淡出

removeAudioExternalStream

removeAudioExternalStream(streamId: string): number

实时消息

sendDataMsg

发送实时数据消息,通过 MoQT Data 通道传输。
sendDataMsg(msg: AoqDataMsg): number

音频帧回调

setAudioFrameObserver

设置音频帧数据回调监听。先注册监听,再 enableAudioFrameObserver 开启回调。
setAudioFrameObserver(observer: IAudioFrameObserver | null): number

enableAudioFrameObserver

enableAudioFrameObserver(enabled: boolean, audioSource: AoqAudioSource, config: AoqAudioObserverConfig): number

视频帧回调

setVideoFrameObserver

setVideoFrameObserver(observer: IVideoFrameObserver | null): number

enableVideoFrameObserver

enableVideoFrameObserver(enabled: boolean, videoSource: AoqVideoSource, config: AoqVideoObserverConfig): number

AoqEngineEventListener 回调

所有回调均为可选属性(?)。
export interface AoqEngineEventListener {
  onError?: (code: number, message: string) => void;
  onWarning?: (code: number, message: string) => void;
  onConnectionStatusChange?: (status: AoqConnectionStatus) => void;
  onStats?: (stats: AoqStats) => void;
  onAudioDeviceStateChanged?: (state: AoqAudioDeviceState) => void;
  onAudioDeviceRouteChanged?: (routeType: number) => void;
  onAudioDeviceInterrupted?: (interrupt: boolean) => void;
  onVideoDeviceStateChanged?: (state: AoqVideoDeviceState) => void;
  onAudioFileState?: (state: AoqAudioFileState) => void;
  onDataMsg?: (msg: AoqDataMsg) => void;
}

IAudioFrameObserver

export interface IAudioFrameObserver {
  onCapturedAudioFrame?: (frame: AoqAudioFrameData) => void;
  onProcessCapturedAudioFrame?: (frame: AoqAudioFrameData) => void;
  onPublishAudioFrame?: (trackType: AoqTrackType, frame: AoqAudioFrameData) => void;
  onPlaybackAudioFrame?: (frame: AoqAudioFrameData) => void;
}
frame.dataPtr 是 native 内存的 Uint8Array 拷贝,当前 ReadOnly(修改不写回 SDK)。

IVideoFrameObserver

export interface IVideoFrameObserver {
  onCapturedVideoFrame?: (frame: AoqVideoFrame) => boolean;
  onPreEncodeVideoFrame?: (trackType: AoqTrackType, frame: AoqVideoFrame) => boolean;
  onRemoteVideoFrame?: (trackType: AoqTrackType, frame: AoqVideoFrame) => boolean;
}
frame 各 buffer 是 native 内存的 Uint8Array 拷贝,回调期间有效。当前等效 ReadOnly,P2 实现真写回。

数据类型与枚举

通用类型

AoqCreateConfig

字段类型默认值说明
workDirstring""SDK 工作目录
enableDumpAudiobooleanfalse是否开启音频原始数据 dump(调试用)
extrasstring""扩展参数字符串
与 Android 不同:OHOS 无 isBTScoMode 字段。

AoqConnectConfig

字段类型默认值说明
tokenstring""连接鉴权 Token
sidstring""会话 ID
certFingerprintstring""服务器证书指纹
relayEndpointsAoqRelayEndpoint[][]Relay 接入点列表
workspaceIdHashstring""工作空间 ID Hash
publishTracksAoqTrackParam[][]本端计划发布的轨道列表
subscribeTracksAoqTrackParam[][]本端计划订阅的轨道列表

AoqRelayEndpoint

字段类型说明
endpointstringRelay 服务器域名或 IP
portnumberRelay 服务器端口

AoqTrackParam

字段类型说明
trackTypeAoqTrackType轨道类型

AoqErrorCode

枚举值说明
AoqECOK0成功
AoqECParamInvalid1参数非法
AoqECStateInvalid2状态非法
AoqECUnSupport3不支持
AoqECAudio100音频通用错误
AoqECAudioExternalBufferFull110外部音频缓冲区满
AoqECAudioDevice120音频设备通用错误
AoqECAudioDeviceRecordingAuthFailed121录音权限未获取
AoqECAudioDeviceRecordingOccupied122录音设备被占用
AoqECAudioDeviceRecordingBackgroundStart123后台启动录音失败
AoqECAudioDeviceRecordingStartFail124录音启动失败
AoqECAudioDevicePlayoutOccupied125播放设备被占用
AoqECAudioDevicePlayoutBackgroundStart126后台启动播放失败
AoqECAudioDevicePlayoutStartFail127播放启动失败
AoqECAudioDeviceEarpieceRequiresVoipMode128听筒模式需要启用 VoIP 模式
AoqECVideo200视频通用错误
AoqECVideoExternalBufferFull210外部视频缓冲区满
AoqECVideoExternalCaptureNotEnabled211外部视频采集未启用
AoqECVideoExternalEncoderNotEnabled212外部视频编码器未启用
AoqECVideoDevice220视频设备通用错误
AoqECVideoDeviceCameraOpenFail221摄像头打开失败
AoqECVideoDeviceCameraAuthFailed222摄像头权限未获取
AoqECVideoDeviceCameraOccupied223摄像头被占用
AoqECVideoDeviceCameraRunningError224摄像头运行异常
AoqECVideoCodec230视频编解码通用错误
AoqECVideoCodecEncoderInitFail231视频编码器初始化失败
AoqECVideoRender240视频渲染通用错误
AoqECVideoRenderCreateFail241视频渲染创建失败
AoqECVideoRenderDrawError242视频渲染绘制错误

AoqWarningCode

枚举值说明
AoqWCOK0无警告
AoqWCAudio100音频通用警告
AoqWCAudioHowling101音频啸叫检测
AoqWCAudioDevice120音频设备通用警告
AoqWCAudioDeviceMicEnumerateError121麦克风枚举错误
AoqWCAudioDeviceMicStartTimeout122麦克风启动超时
AoqWCAudioDeviceRecordingError123录音过程错误
AoqWCAudioDeviceSpeakerEnumerateError124扬声器枚举错误
AoqWCAudioDeviceSpeakerStartTimeout125扬声器启动超时
AoqWCAudioDevicePlayoutError126播放过程错误
AoqWCVideo200视频通用警告
AoqWCVideoCameraEnumerateError201摄像头枚举错误
AoqWCVideoEncoderSwitched202视频编码器已切换
AoqWCVideoRenderDowngrade203视频渲染降级

AoqTrackType

枚举值说明
AoqTrackTypeAudio0音频轨道
AoqTrackTypeVideo1视频轨道
AoqTrackTypeData2数据消息轨道
与 Android 不同:OHOS 当前不包含 AoqTrackTypeScreen(3),屏幕采集功能暂未对外开放。

AoqConnectionStatus

枚举值说明
AoqConnectionStatusDisconnected0未连接
AoqConnectionStatusConnecting1连接中
AoqConnectionStatusConnected2已连接
AoqConnectionStatusFailed3连接失败

AoqEncoderType / AoqMirrorMode / AoqOrientationMode

同原文档,无变化。

音频类型

AoqAudioCaptureConfig

字段类型默认值说明
isExternalbooleanfalsetrue 使用外部音频输入
isVoipModebooleanfalsetrue 启用 VoIP 模式(硬件 AEC)
channelnumber1声道数,支持 1/2

AoqAudioPlaybackConfig

字段类型默认值说明
isVoipModebooleanfalsetrue 启用 VoIP 模式(硬件 AEC),采集/播放参数先到为准
isDefaultSpeakerbooleantruetrue 默认扬声器;false 默认听筒
isExternalbooleanfalsetrue 使用外部音频输出
channelnumber1声道数,支持 1/2

AoqAudioCodecConfig

字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio目标轨道
codecTypeAoqEncoderTypeAoqEncoderTypeAudioPCM编码格式
sampleRatenumber48000采样率(Hz)
channelnumber1声道数
bitratenumber32000码率(bps)

视频类型

AoqVideoCaptureConfig

字段类型默认值说明
widthnumber1280采集宽度;isExternal=true 时无效
heightnumber720采集高度
fpsnumber15采集帧率
isExternalbooleanfalsetrue 不打开摄像头,由 pushExternalVideoCapturedFrame 喂帧
cameraDirectionAoqCameraDirectionFront摄像头方向

AoqVideoCodecConfig

字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeVideo目标轨道
codecTypeAoqEncoderTypeAoqEncoderTypeVideoH264编码格式
widthnumber720编码宽度
heightnumber1280编码高度
fpsnumber15帧率
bitratenumber500码率(kbps)
minBitratenumber128最小码率(kbps)
keyframeIntervalnumber2关键帧间隔(秒)
mirrorModeAoqMirrorModeDisabled镜像模式
orientationModeAoqOrientationModeAuto视频方向
isExternalbooleanfalsetrue 时 SDK 不做二次编码
与 Android 不同:OHOS 码率单位为 kbps(默认 500/128),Android 为 bps(默认 500000/128000)。

AoqVideoCanvas

字段类型默认值说明
viewObject | nullnullAoqXComponentController 实例;传 null 表示移除渲染绑定
renderModeAoqRenderModeAoqRenderModeAuto显示模式

AoqVideoPixelFormat

枚举值说明
AoqVideoPixelFormatUnknown0未知
AoqVideoPixelFormatI4201I420
AoqVideoPixelFormatNV122NV12
AoqVideoPixelFormatNV213NV21
AoqVideoPixelFormatBGRA4BGRA
AoqVideoPixelFormatRGBA5RGBA
OHOS 不支持 TextureOES/Texture2D。

AoqVideoFrame

字段类型说明
formatAoqVideoPixelFormat像素格式
widthnumber宽度(像素)
heightnumber高度(像素)
dataPtrArrayBuffer | Uint8Array | null打包格式数据
dataSizenumber打包数据字节数
dataY / dataU / dataVArrayBuffer | Uint8Array | nullI420 平面
strideY / strideU / strideVnumber平面 stride
timeStampnumber时间戳(ms);0 时 SDK 用本地时钟补

AoqVideoEncodedFrame

字段类型说明
codecAoqVideoCodecType编码格式 (AoqVideoCodecTypeJPEG=0)
dataArrayBuffer | Uint8Array编码后数据
widthnumber宽度
heightnumber高度
timeStampnumber时间戳(ms)

音频文件与外部流类型

AoqAudioFileMixConfig

字段类型默认值说明
fileNamestring""文件名(含路径)
cyclesnumber-1循环次数,-1 无限循环
startPosMsnumber0起始播放位置(ms)
publishVolumenumber100推流音量 [0,100]
playoutVolumenumber100本地播放音量 [0,100]

AoqAudioExternalStreamConfig

字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio轨道类型
codecTypeAoqEncoderTypeAoqEncoderTypeAudioPCM音频格式
channelsnumber1声道数
sampleRatenumber48000采样率(Hz)
playoutVolumenumber100播放音量 [0,100]
publishVolumenumber100推流音量 [0,100]
maxBufferDurationnumber1000最大缓冲(ms)
enable3Abooleanfalse输入 PCM 做 3A 处理

AoqAudioFrameData

字段类型说明
dataPtrArrayBuffer | Uint8Array | null音频 PCM 裸数据
dataSizenumberPCM 字节数
numOfSamplesnumber采样点数(单声道)
bytesPerSamplenumber每采样点字节数
numOfChannelsnumber声道数
samplesPerSecnumber每秒采样点数
pushSequencenumberPCM 输入轮次
timeStampnumber时间戳
autoGenMutebooleantrue 表示 SDK 生成的静音数据

Observer 配置类型

AoqAudioObserverConfig

字段类型默认值说明
sampleRatenumber48000回调采样率
channelsnumber1回调声道数
modeAoqAudioObserverModeReadOnly读写模式

AoqVideoObserverConfig

字段类型默认值说明
formatAoqVideoPixelFormatI420回调像素格式
alignmentAoqVideoObserverAlignmentDefault宽度对齐
modeAoqVideoObserverModeReadOnly读写模式
mirrorAppliedbooleanfalse是否应用镜像

统计数据类型

AoqStats

字段类型说明
audioPublishStatsAoqAudioPublishStats[]音频推流统计
videoPublishStatsAoqVideoPublishStats[]视频推流统计
dataMsgPublishStatsAoqDataMsgPublishStats[]数据消息推流统计
audioSubscribeStatsAoqAudioSubscribeStats[]音频拉流统计
videoSubscribeStatsAoqVideoSubscribeStats[]视频拉流统计
dataMsgSubscribeStatsAoqDataMsgSubscribeStats[]数据消息拉流统计
networkStatsAoqNetworkStats | null网络统计

统计子类型

AoqAudioPublishStats:trackType / bitrate / bytes / encodeVolume AoqVideoPublishStats:trackType / bitrate / bytes / encodeFps AoqAudioSubscribeStats:trackType / bitrate / bytes / playVolume AoqVideoSubscribeStats:trackType / bitrate / bytes / decodeFps / renderFps AoqDataMsgPublishStats / AoqDataMsgSubscribeStats:trackType / bitrate / bytes AoqNetworkStats:sendBitrate / sendBytes / recvBitrate / recvBytes / loss / rtt

与 Android 版本的主要差异

类别AndroidOHOS
实现语言JavaArkTS(.ets),NAPI 桥接 C++
返回值类型int / long / booleannumber / boolean
createEngine 返回值@NonNull AoqClientEngineAoqClientEngine | null
createEngine contextandroid.content.Contextcommon.Context (UIAbility/Page)
listener 形式abstract class,默认空实现TS interface,所有回调 optional (?)
frame observer 形式interface + default 方法TS interface,所有回调 optional (?)
AoqCreateConfig包含 isBTScoMode不含 isBTScoMode
AoqAudioPlaybackConfig无 isVoipMode含 isVoipMode,采集/播放参数先到为准
onAudioDeviceFocusChanged提供不提供(无音频焦点事件抽象)
视频渲染 viewView(SurfaceView/TextureView)AoqXComponentController(继承 XComponentController)
Pixel Format 枚举包含 TextureOES(7) / Texture2D(8)不包含纹理格式
视频帧附加字段textureId / transformMatrix / eglContext无这些字段
帧数据容器byte[] / ByteBufferArrayBuffer / Uint8Array
视频编码码率单位bps(默认 500000/128000)kbps(默认 500/128)
AoqTrackType含 AoqTrackTypeScreen(3)不含 AoqTrackTypeScreen,屏幕采集暂未开放
屏幕采集 APIstartScreenCapture / stopScreenCapture暂未提供
Observer ReadWriteI420 支持写回当前等效 ReadOnly,P2 实现真回写
Observer 重注册安全依赖 SDK 内部UAF 防护墓地模式
设备监测能力Java 侧隐含AoqDeviceMonitor(内部模块)自动启动
枚举命名空间AoqErrorCodeXxxAoqECXxx (如 AoqECOK、AoqECParamInvalid)

主要设计要点

  1. AoqXComponentController:继承自 XComponentController,重写 onSurfaceCreated/Changed/Destroyed。业务需创建后传入 XComponent,并在 setLocalView/setRemoteView 时作为 canvas.view。
  2. NAPI 架构:facade (AoqClientEngine.ets) -> 实现层 (AoqClientEngineImpl.ets) -> NAPI (libaoq_client_sdk.so)。配置在实现层被拍平为多个参数。
  3. 设备监测(内部):AoqDeviceMonitor 在 createEngine 后自动启动,下沉网络状态与 App 前后台状态到 C++ 引擎。
  4. Observer UAF 防护:重注册时采用 "cpp 切旧引用 -> 旧 obs push 入墓地 -> 占位指新 obs" 三步顺序。
  5. 帧负载语义:音视频帧回调中的 Uint8Array 是 native 拷贝,P1 不支持写回,P2 计划零拷贝。