跳转到主要内容
SDK简介

Linux C++ SDK

AOQ Client SDK Linux C++ API 参考

本文介绍 AOQ Client SDK Linux 版的 C++ 接口、回调和数据类型。

接口目录

引擎生命周期

接口简介
createEngine创建引擎实例(静态方法,单例)
destroy销毁引擎实例(静态方法)
getVersion获取 SDK 版本号(静态方法)
connect连接 Relay 服务器
disconnect断开服务器连接

音频设备管理

接口简介
startAudioCapture打开音频采集设备(Linux 空实现)
stopAudioCapture关闭音频采集设备(Linux 无效果)
muteAudioCapture静音或取消静音音频采集
startAudioPlayer开始音频渲染(Linux 空实现)
stopAudioPlayer停止音频渲染(Linux 无效果)
pauseAudioPlayer暂停音频渲染,支持淡出
resumeAudioPlayer恢复音频渲染,支持淡入
interruptAudioPlayer打断本轮音频播放

音频编解码配置

接口简介
setAudioEncoderConfig设置音频编码参数
setAudioDecoderConfig设置音频解码参数

视频设备管理

接口简介
startVideoCapture打开视频采集设备(Linux 仅支持外部采集模式)
stopVideoCapture关闭视频采集设备
setLocalView设置或移除本地视频渲染窗口(Linux 无渲染实现)
setRemoteView设置或移除远端视频渲染窗口(Linux 无渲染实现)

视频编解码与外部输入

接口简介
setVideoEncoderConfig设置视频编码参数
setVideoDecoderConfig设置视频解码参数(订阅侧 codec 提议)
pushExternalVideoCapturedFrame推送外部采集视频帧
pushExternalVideoEncodedFrame推送外部已编码视频帧

媒体流发送控制

接口简介
enableSendMediaStream控制本地媒体流的发送开关

音频文件播放

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

外部音频流

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

实时消息

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

音频帧回调

接口简介
setAudioFrameObserver注册音频帧数据监听器(纯虚)
enableAudioFrameObserver开启或关闭指定位置的音频帧回调(纯虚)

本地音量提示

接口简介
enableLocalAudioVolumeIndication开启或关闭本地采集音量提示回调

视频帧回调

接口简介
setVideoFrameObserver注册视频帧数据监听器(纯虚)
enableVideoFrameObserver开启或关闭指定位置的视频帧回调(纯虚)

AoqEngineEventListener 回调

回调简介
onError引擎错误回调
onWarning引擎警告回调
onConnectionStatusChange连接状态变化回调
onStats引擎统计信息回调
onAudioDeviceStateChanged音频设备操作状态变化回调
onAudioDeviceRouteChanged音频输出路由变化回调(Linux 不触发)
onAudioFileState音频文件播放状态回调
onLocalAudioVolumeIndication本地采集音量提示回调
onVideoDeviceStateChanged视频设备操作状态变化回调
onDataMsg收到实时数据消息回调

帧数据监听接口

接口简介
IAudioFrameObserver音频帧数据监听接口(4 个纯虚回调)
IVideoFrameObserver视频帧数据监听接口(3 个纯虚回调)

接口详情

引擎生命周期

createEngine 创建引擎实例。SDK 内部以全局单例方式持有引擎,重复调用会返回已创建的实例。
static AoqClientEngine* createEngine(const AoqCreateConfig& config,
                                    AoqEngineEventListener* listener);
参数类型说明
configAoqCreateConfig引擎创建配置
listenerAoqEngineEventListener*引擎事件回调监听器,由调用方继承实现
返回值:引擎实例指针;失败返回 nullptr。listener 生命周期需长于引擎。 destroy 销毁引擎实例,释放所有资源。
static int destroy();
返回值:0 表示成功;非 0 表示失败。 getVersion 获取 SDK 当前版本号。
static const char* getVersion();
返回值:版本号字符串,字符串由 SDK 持有。 connect 连接 Relay 服务器。业务 AppServer 应根据所用协议获取临时 AOQ 连接参数并下发给客户端,具体操作请参见 Token 鉴权。
virtual int connect(const AoqConnectConfig& config);
参数类型说明
configAoqConnectConfig连接配置,包含 Token、SID、Relay 接入点数组、推拉流 track 数组等
返回值:0 表示成功(异步执行);非 0 表示失败。连接结果由 onConnectionStatusChange 通知。
relayEndpoints/publishTracks/subscribeTracks 均为「C 风格数组指针 + 长度」,内存由调用方持有,仅需在 connect 调用期间有效。
disconnect 断开与服务器的连接,释放连接相关资源。
virtual int disconnect();
返回值:0 表示成功;非 0 表示失败。

音频设备管理

virtual int startAudioCapture(const AoqAudioCaptureConfig& config);
virtual int stopAudioCapture();
virtual int muteAudioCapture(bool mute);
virtual int startAudioPlayer(const AoqAudioPlaybackConfig& config);
virtual int stopAudioPlayer();
virtual int pauseAudioPlayer(int fadeMs);
virtual int resumeAudioPlayer(int fadeMs);
virtual int interruptAudioPlayer(AoqTrackType trackType, int fadeMs);
参数类型说明
configAoqAudioCaptureConfig / AoqAudioPlaybackConfig采集 / 播放配置
mutebooltrue 静音,false 取消静音
fadeMsint淡出 / 淡入时长(毫秒),0 表示立即执行
trackTypeAoqTrackType轨道类型
Linux 重要约束startAudioCapture/startAudioPlayer 在 Linux 构建下为空实现(直接返回 0,不打开任何声卡设备),stopAudioCapture/stopAudioPlayer 因内部状态未置位同样无实际效果。Linux 上音频输入请使用外部音频流(2.8),音频输出请使用音频帧回调(2.10)自行播放。详见 4.3。

音频编解码配置

virtual int setAudioEncoderConfig(const AoqAudioCodecConfig& config);
virtual int setAudioDecoderConfig(const AoqAudioCodecConfig& config);
建议在 connect() 之前调用。采样率与模式的非法组合会在 connect 时通过 onError 回调 AoqECParamInvalid

视频设备管理

virtual int startVideoCapture(const AoqVideoCaptureConfig& config);
virtual int stopVideoCapture();
virtual int setLocalView(AoqTrackType trackType, const AoqVideoCanvas& canvas);
virtual int setRemoteView(AoqTrackType trackType, const AoqVideoCanvas& canvas);
参数类型说明
configAoqVideoCaptureConfig视频采集配置
trackTypeAoqTrackType视频轨道类型
canvasAoqVideoCanvas渲染画布;canvas.view == nullptr 表示解绑
Linux 重要约束:Linux 摄像头采集为占位实现,不会产出帧,请使用 startVideoCapture({.isExternal = true}) + pushExternalVideoCapturedFrame 送帧;setLocalView/setRemoteView 在 Linux 无渲染后端(AoqVideoCanvas.view 仅支持 Apple NSView* / Windows HWND / Android 渲染视图),预览请通过视频帧回调(2.12)自行渲染。详见 4.3。

视频编解码与外部输入

virtual int setVideoEncoderConfig(const AoqVideoCodecConfig& config);
virtual int setVideoDecoderConfig(const AoqVideoCodecConfig& config);
virtual int pushExternalVideoCapturedFrame(AoqTrackType trackType, const AoqVideoFrame& frame);
virtual int pushExternalVideoEncodedFrame(AoqTrackType trackType, const AoqVideoEncodedFrame& frame);
参数类型说明
configAoqVideoCodecConfig编解码配置,按 config.trackType 路由
trackTypeAoqTrackType路由目标,取 AoqTrackTypeVideo
frameAoqVideoFrame / AoqVideoEncodedFrame裸帧 / 已编码帧数据
注意:
  • setVideoDecoderConfig 为订阅侧 codec 提议,需在 connect 之前调用;解码时仅 trackType/codecType/width/height/fps/bitrate 生效。
  • pushExternalVideoCapturedFrame 需先 startVideoCapture(isExternal=true);未启动外部采集时返回 AoqECVideoExternalCaptureNotEnabled(211),格式不支持时返回 AoqECParamInvalid,缓冲区满时返回 AoqECVideoExternalBufferFull(210)
  • pushExternalVideoEncodedFrame 需先 setVideoEncoderConfig(isExternal=true),SDK 不做二次编码直接打包发送,当前仅支持 JPEG。
  • frame.timeStamp0 时由 SDK 使用本地时间补齐。

媒体流发送控制

virtual int enableSendMediaStream(AoqTrackType trackType, bool enable);
控制本地某路媒体流是否发送,trackTypeAoqTrackTypeAudio/AoqTrackTypeVideo。返回 0 表示调用已下发(异步执行)。建议初始化后先关闭发送,待 onConnectionStatusChange 上报 AoqConnectionStatusConnected 后再开启。

音频文件播放

virtual int startAudioFile(const char* fileId, const AoqAudioFileMixConfig& config);
virtual int stopAudioFile(const char* fileId);
virtual int pauseAudioFile(const char* fileId);
virtual int resumeAudioFile(const char* fileId);
virtual int64_t getAudioFileDuration(const char* fileId);
virtual int64_t getAudioFileCurrentPosition(const char* fileId);
virtual int setAudioFilePositionMillis(const char* fileId, int64_t positionMillis);
virtual int setAudioFileVolume(const char* fileId, AoqAudioStreamDirection type, int volume);
virtual int getAudioFileVolume(const char* fileId, AoqAudioStreamDirection type);
参数类型说明
fileIdconst char*音频文件 Id,业务层需保证全局唯一
configAoqAudioFileMixConfig文件混音配置
positionMillisint64_t目标播放位置(毫秒)
typeAoqAudioStreamDirection推流音量或本地播放音量
volumeint音量,取值范围 0-100
返回值说明:
  • getAudioFileDuration/getAudioFileCurrentPosition>=0 为毫秒值;<0 失败,绝对值为 -AoqErrorCode
  • getAudioFileVolume0-100 为音量值;<0 失败,绝对值为 -AoqErrorCode
播放状态变化通过 onAudioFileState 回调上报。文件混音走推流链路,不依赖本地声卡,因此在 Linux 上可用于将本地文件作为音频源推送。

外部音频流

virtual int addAudioExternalStream(const char* streamId, const AoqAudioExternalStreamConfig& config);
virtual int pushAudioExternalStreamData(const char* streamId, AoqAudioFrameData& data);
virtual int setAudioExternalStreamVolume(const char* streamId, AoqAudioStreamDirection type, int vol);
virtual int getAudioExternalStreamVolume(const char* streamId, AoqAudioStreamDirection type);
virtual void clearAudioExternalStreamBuffer(const char* streamId, int fadeoutMs);
virtual int removeAudioExternalStream(const char* streamId);
参数类型说明
streamIdconst char*外部音频流 Id,业务层需保证全局唯一
configAoqAudioExternalStreamConfig外部音频流配置
dataAoqAudioFrameData外部音频裸数据(PCM),非 const 引用
typeAoqAudioStreamDirection推流音量或本地播放音量
volint音量,取值范围 0-100
fadeoutMsint淡出时长;-1 用 SDK 默认淡出,0 全部清空无淡出,>0 保留指定毫秒淡出
注意:
  • pushAudioExternalStreamData 返回 AoqECAudioExternalBufferFull(110) 表示 SDK 内部缓冲区已满,建议等待 20ms 后重新送当前数据帧
  • 最佳实践:实时采集场景一次 Push 10ms 数据、有数据就 Push;文件源场景一次 Push 40ms 数据、间隔 30ms 送一次,并处理 AoqECAudioExternalBufferFull 返回。
  • getAudioExternalStreamVolume0-100 为音量值;<0 失败,绝对值为 -AoqErrorCode
  • clearAudioExternalStreamBuffer 返回 void,无返回值。
  • data.pushSequence 用于 SDK 消费完成通知(PCM 输入轮次)。
Linux 上无真实采集设备,本组接口是音频上行的主链路

实时消息

virtual int sendDataMsg(const AoqDataMsg& msg);
发送实时数据消息。msg.data 指向调用方持有的内存,仅需在调用期间有效。对端消息通过 onDataMsg 回调。

音频帧回调

virtual int setAudioFrameObserver(IAudioFrameObserver* observer) = 0;
virtual int enableAudioFrameObserver(bool enabled, AoqAudioSource audioSource,
                                     const AoqAudioObserverConfig& config) = 0;
参数类型说明
observerIAudioFrameObserver*监听器实例;传 nullptr 停止回调
enabledbool是否开启该位置的数据回调
audioSourceAoqAudioSource音频裸数据源位置
configAoqAudioObserverConfig回调采样率、声道数与读写模式
使用步骤:先 setAudioFrameObserver(observer) 注册监听器,再对需要的位置调 enableAudioFrameObserver。observer 生命周期需覆盖整个回调期间;取消注册后再释放。 读写模式支持情况(见 IAudioFrameObserver 声明):onCapturedAudioFrame/onProcessCapturedAudioFrame/onPlaybackAudioFrame 支持读写,onPublishAudioFrame 仅支持只读。
Linux 上 setAudioFrameObserver 内部走异步投递(PostTask 到控制线程)完成注册,因此调用返回后回调可能略后生效;释放 observer 前请留足安全间隔或保持对象存活

本地音量提示

virtual int enableLocalAudioVolumeIndication(const AoqAudioVolumeIndicationConfig& config);
开启/关闭本地采集音量提示。config.interval <= 0 时关闭回调;开启后按 config.interval 周期触发 onLocalAudioVolumeIndication。需在 startAudioCapture 之后调用才有音量数据。
Linux 上无设备采集,该回调的音量数据来自推流/播放混音链路(mixer)。

视频帧回调

virtual int setVideoFrameObserver(IVideoFrameObserver* observer) = 0;
virtual int enableVideoFrameObserver(bool enabled, AoqVideoSource videoSource,
                                     const AoqVideoObserverConfig& config) = 0;
参数类型说明
observerIVideoFrameObserver*监听器实例;传 nullptr 停止回调
enabledbool是否开启该位置的数据回调
videoSourceAoqVideoSource视频帧回调数据源(管线位置)
configAoqVideoObserverConfig期望像素格式、对齐策略、读写模式、镜像
回调返回 true 表示数据已修改需写回 SDK(仅 I420 / CVPixelBuffer 生效,Linux 下即仅 I420);返回 false 为只读。
Linux 无内置渲染,本组回调是获取远端视频画面的唯一途径AoqVideoSourceRemote)。

AoqEngineEventListener 回调

AoqEngineEventListener 是 SDK 所有异步事件通知的统一出口,由调用方继承实现并在 createEngine 时传入。
与 Android 的关键差异:该类所有回调均为纯虚函数= 0),无默认空实现,Linux 下必须完整实现下列 10 个方法,否则派生类无法实例化。回调可能在 SDK 内部线程触发。
class AOQ_API AoqEngineEventListener {
public:
  AoqEngineEventListener();
  virtual ~AoqEngineEventListener();
  virtual void onError(int code, const char* message) = 0;
  virtual void onWarning(int code, const char* message) = 0;
  virtual void onConnectionStatusChange(AoqConnectionStatus status) = 0;
  virtual void onStats(const AoqStats& stats) = 0;
  virtual void onAudioDeviceStateChanged(const AoqAudioDeviceState& state) = 0;
  virtual void onAudioDeviceRouteChanged(int routeType) = 0;
  virtual void onAudioFileState(const AoqAudioFileState& state) = 0;
  virtual void onLocalAudioVolumeIndication(const AoqAudioVolume& volume) = 0;
  virtual void onVideoDeviceStateChanged(const AoqVideoDeviceState& state) = 0;
  virtual void onDataMsg(const AoqDataMsg& msg) = 0;
};
onError 引擎错误回调。code 对应 AoqErrorCode 枚举值(见 3.3),message 仅回调期间有效。 onWarning 引擎警告回调。code 对应 AoqWarningCode 枚举值(见 3.3)。 onConnectionStatusChange 连接状态变化回调。状态流转:Disconnected -> Connecting -> Connected / Failed -> Disconnected。 onStats 引擎统计信息回调。SDK 周期性上报音视频推拉流及网络统计数据,可用于实时监测通话质量、网络状态、诊断音视频问题。
参数类型说明
statsAoqStats包含音频 / 视频 / 数据消息的推拉流统计及网络统计
AoqStats 内部为「数组指针 + 计数」结构,指针仅回调期间有效,异步使用需自行拷贝。
onAudioDeviceStateChanged 音频设备采集 / 播放操作状态变化回调。state.reasonAoqErrorCode 数值。 onAudioDeviceRouteChanged 音频输出路由变化回调。routeType 对应 AoqAudioDeviceRouteType 枚举值(见 3.4)。
Linux 不会触发:Linux 构建未包含平台设备监听器(AOQ_HAS_NATIVE_DEVICE_MONITOR 仅在 Windows / macOS 定义),且服务端音频设备不产生路由事件;仍需实现此方法(纯虚),但可空实现。
onAudioFileState 音频文件播放状态回调。state.fileId 仅回调期间有效。 onLocalAudioVolumeIndication 本地采集音量提示回调,需调用 enableLocalAudioVolumeIndication 开启。 onVideoDeviceStateChanged 视频设备采集操作状态变化回调。state.reasonAoqErrorCode 数值。 onDataMsg 收到实时数据消息回调。msg.data 仅保证回调期间有效,如需异步使用请自行拷贝。

帧数据监听接口

IAudioFrameObserver 音频数据监听接口。请不要在回调中做任何耗时操作,否则可能导致声音异常。全部为纯虚函数,需完整实现。
class AOQ_API IAudioFrameObserver {
public:
  virtual ~IAudioFrameObserver() {}
  virtual void onCapturedAudioFrame(const AoqAudioFrameData& data) = 0;
  virtual void onProcessCapturedAudioFrame(const AoqAudioFrameData& data) = 0;
  virtual void onPublishAudioFrame(AoqTrackType trackType, const AoqAudioFrameData& data) = 0;
  virtual void onPlaybackAudioFrame(const AoqAudioFrameData& data) = 0;
};
回调开启方式(audioSource)读写模式
onCapturedAudioFrameAoqAudioSourceCaptured支持读写
onProcessCapturedAudioFrameAoqAudioSourceProcessCaptured支持读写
onPublishAudioFrameAoqAudioSourcePublish(需 connect 成功)仅只读
onPlaybackAudioFrameAoqAudioSourcePlayback支持读写
以上回调均支持通过 AoqAudioObserverConfig 设置采样率与声道数。
Linux 上 onPlaybackAudioFrame 是取远端下行 PCM 的主链路;onProcessCapturedAudioFrame(3A 后数据)因 Linux 未编译 3A 模块,数据与采集原始数据无实质差异,详见 4.3。
IVideoFrameObserver 视频数据监听接口。请不要在回调中做任何耗时操作,否则可能导致画面卡顿。全部为纯虚函数。
class AOQ_API IVideoFrameObserver {
public:
  virtual ~IVideoFrameObserver() {}
  virtual bool onCapturedVideoFrame(AoqVideoFrame& frame) = 0;
  virtual bool onPreEncodeVideoFrame(AoqTrackType trackType, AoqVideoFrame& frame) = 0;
  virtual bool onRemoteVideoFrame(AoqTrackType trackType, AoqVideoFrame& frame) = 0;
};
回调开启方式(videoSource)说明
onCapturedVideoFrameAoqVideoSourceCaptured本地采集后裸数据(前处理前)
onPreEncodeVideoFrameAoqVideoSourcePreEncode本地编码前裸数据(前处理后)
onRemoteVideoFrameAoqVideoSourceRemote远端解码后、渲染前裸数据
返回值:true 表示数据已修改、需写回 SDK(仅 I420 / CVPixelBuffer 生效);false 表示只读。frame 中的指针仅回调期间有效,异步使用需自行拷贝。

数据类型与枚举

全部类型定义于 AoqClientEngine.h,命名空间 AoqClientSdk。结构体均为 POD 并带默认值,直接声明即可获得表中默认值。标注「移动端专有」的字段在 Linux 下被条件编译屏蔽,不存在于结构体中

通用类型

AoqCreateConfig
字段类型默认值说明
workDirconst char*nullptrSDK 工作目录(日志与临时文件)
enableDumpAudioboolfalse是否开启音频数据保存(调试用)
extrasconst char*nullptr扩展参数(JSON 字符串)
字符串字段至少需保持到 createEngine 返回后,引擎内部按需拷贝。Android 的 isBTScoMode 为移动端专有,Linux 无此字段。
AoqConnectConfig
字段类型默认值说明
tokenconst char*nullptr连接鉴权 Token
sidconst char*nullptr会话 ID
certFingerprintconst char*nullptr服务器证书指纹
workspaceIdHashconst char*nullptr工作空间 ID Hash
relayEndpointsconst AoqRelayEndpoint*nullptrRelay 接入点数组首地址
relayEndpointsCountsize_t0Relay 接入点个数
publishTracksconst AoqTrackParam*nullptr推流 track 属性数组首地址
publishTracksCountsize_t0推流 track 个数
subscribeTracksconst AoqTrackParam*nullptr拉流 track 属性数组首地址
subscribeTracksCountsize_t0拉流 track 个数
AoqRelayEndpoint
字段类型默认值说明
route_indexint-1路由序号
endpointconst char*nullptrRelay 服务器域名或 IP
portint0Relay 服务器端口
注意字段名为下划线风格 route_index,与其余字段的 camelCase 不同。
AoqTrackParam
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio轨道类型
trackModeAoqTrackModeAoqTrackModeSegment流式 / 非流式模式,仅对音频下行生效
AoqDataMsg
字段类型默认值说明
dataconst uint8_t*nullptr消息内容,指向调用方持有的内存
dataSizesize_t0字节数
回调中使用时仅保证回调期间有效,如需异步使用请自行拷贝。

统计信息类型

AoqStats 引擎统计信息汇总,通过 onStats 周期性上报。采用「数组指针 + 计数」结构,所有指针默认 nullptr、计数默认 0
字段类型说明
audioPublishStatsconst AoqAudioPublishStats*音频推流统计数组
audioPublishStatsCountunsigned int音频推流统计个数
videoPublishStatsconst AoqVideoPublishStats*视频推流统计数组
videoPublishStatsCountunsigned int视频推流统计个数
dataMsgPublishStatsconst AoqDataMsgPublishStats*数据消息推流统计数组
dataMsgPublishStatsCountunsigned int数据消息推流统计个数
audioSubscribeStatsconst AoqAudioSubscribeStats*音频拉流统计数组
audioSubscribeStatsCountunsigned int音频拉流统计个数
videoSubscribeStatsconst AoqVideoSubscribeStats*视频拉流统计数组
videoSubscribeStatsCountunsigned int视频拉流统计个数
dataMsgSubscribeStatsconst AoqDataMsgSubscribeStats*数据消息拉流统计数组
dataMsgSubscribeStatsCountunsigned int数据消息拉流统计个数
networkStatsconst AoqNetworkStats*网络统计信息
AoqAudioPublishStats
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio轨道类型
bitrateunsigned int0码率(bps)
bytesuint64_t0累计发送字节数
encodeVolumeunsigned int0推流编码音量
AoqAudioSubscribeStats
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio轨道类型
bitrateunsigned int0码率(bps)
bytesuint64_t0累计接收字节数
playVolumeunsigned int0播放音量
AoqVideoPublishStats
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeVideo轨道类型
bitrateunsigned int0码率(bps)
bytesuint64_t0累计发送字节数
encodeFpsunsigned int0编码帧率
AoqVideoSubscribeStats
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeVideo轨道类型
bitrateunsigned int0码率(bps)
bytesuint64_t0累计接收字节数
decodeFpsunsigned int0解码帧率
renderFpsunsigned int0渲染帧率
AoqDataMsgPublishStats / AoqDataMsgSubscribeStats
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeData轨道类型
bitrateunsigned int0码率(bps)
bytesuint64_t0累计发送 / 接收字节数
AoqNetworkStats
字段类型默认值说明
sendBitrateunsigned int0发送码率(bps)
sendBytesuint64_t0累计发送字节数
recvBitrateunsigned int0接收码率(bps)
recvBytesuint64_t0累计接收字节数
lossunsigned int0丢包率(0-100)
rttunsigned int0往返延迟(ms)

枚举类型

AoqTrackType
枚举值说明
AoqTrackTypeAudio0音频轨道
AoqTrackTypeVideo1视频轨道
AoqTrackTypeData2数据消息轨道
AoqTrackMode
枚举值说明
AoqTrackModeSegment0分段:数据按语义片段(如一句话)打包送达
AoqTrackModeStream1流式:数据持续、连续地送达
AoqEncoderType
枚举值说明
AoqEncoderTypeUnknown0未知格式
AoqEncoderTypeAudioPCM1音频 PCM
AoqEncoderTypeAudioOpus2音频 Opus(插件化;Linux 已静态内置,开箱可用)
AoqEncoderTypeVideoH2643视频 H.264
AoqEncoderTypeVideoJpeg4视频 JPEG
AoqEncoderTypeDataText5数据文本
AoqConnectionStatus
枚举值说明
AoqConnectionStatusDisconnected0未连接
AoqConnectionStatusConnecting1连接中
AoqConnectionStatusConnected2已连接
AoqConnectionStatusFailed3连接失败
AoqErrorCode
命名注意:C++ 头中枚举字面量为 AoqEC* 缩写形式(与 Android 的 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视频渲染降级
AoqMirrorMode
枚举值说明
AoqMirrorModeDisabled0关闭镜像
AoqMirrorModeEnabled1开启镜像
AoqOrientationMode
枚举值说明
AoqOrientationModeAuto0自动适应
AoqOrientationModePortrait1竖屏
AoqOrientationModeLandscape2横屏
AoqRenderMode
枚举值说明
AoqRenderModeAuto0自适应模式
AoqRenderModeStretch1拉伸模式
AoqRenderModeFill2填充模式
AoqRenderModeCrop3裁剪模式
仅作为 AoqVideoCanvas.renderMode 使用;Linux 无渲染实现,该枚举实际不生效。
AoqAudioStreamDirection
枚举值说明
AoqAudioStreamPublish0推流音频
AoqAudioStreamPlayout1播放音频
AoqAudioExternalStreamToggle
枚举值说明
AoqAudioExternalStreamToggleNormal0恢复正常
AoqAudioExternalStreamTogglePause1暂停
该枚举已在头中声明,但当前没有任何对外接口使用它,属预留定义。

音频类型

AoqAudioCaptureConfig
字段类型默认值说明
isExternalboolfalse是否外部采集
channelint1音频采集通道数,支持 1 / 2
isVoipMode 为移动端专有字段,Linux 下不存在。
AoqAudioPlaybackConfig
字段类型默认值说明
isExternalboolfalse是否外部播放
channelint1音频播放通道数,支持 1 / 2
isVoipMode/isDefaultSpeaker 为移动端专有字段,Linux 下不存在。
AoqAudioCodecConfig
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio轨道类型
codecTypeAoqEncoderTypeAoqEncoderTypeAudioPCM编码类型
sampleRateint48000采样率(Hz)
channelint1声道数,支持 1 / 2
bitrateint32000码率(bps)
采样率约束(摘自头文件注释):
  • 编码:Opus 支持 8 / 16 / 48K,PCM 支持 8 / 16 / 32 / 48K;
  • 解码:额外支持 24K,但24K 仅限 Segment 模式(Stream 模式不支持 24K);
  • 非法组合在 connect 时通过 onError 回调 AoqECParamInvalid
AoqAudioDeviceRouteType
枚举值说明
AoqAudioDeviceRouteDefault0默认路由
AoqAudioDeviceRouteHeadset1耳机
AoqAudioDeviceRouteEarpiece2听筒
AoqAudioDeviceRouteHeadsetNoMic3无麦耳机
AoqAudioDeviceRouteSpeakerPhone4内置扬声器
AoqAudioDeviceRouteUsb5USB 音频设备
AoqAudioDeviceRouteBluetooth6蓝牙
AoqAudioDeviceRouteBluetoothA2dp7蓝牙 A2DP
仅作为 onAudioDeviceRouteChangedrouteType 取值参照;Linux 不会触发该回调。
AoqAudioDeviceStateCode
枚举值说明
AoqAudioDeviceNone0无状态
AoqAudioDeviceRecordStarting1采集启动中
AoqAudioDeviceRecordStarted2采集已启动
AoqAudioDeviceRecordStopping3采集停止中
AoqAudioDeviceRecordStopped4采集已停止
AoqAudioDeviceRecordFail5采集失败
AoqAudioDevicePlayStarting6播放启动中
AoqAudioDevicePlayStarted7播放已启动
AoqAudioDevicePlayStopping8播放停止中
AoqAudioDevicePlayStopped9播放已停止
AoqAudioDevicePlayFail10播放失败
AoqAudioDeviceState
字段类型默认值说明
stateAoqAudioDeviceStateCodeAoqAudioDeviceNone设备操作状态
reasonint0错误原因代码(参考 AoqErrorCode)
AoqAudioFrameData 音频裸数据(既用于外部送流 pushAudioExternalStreamData,也用于 IAudioFrameObserver 回调)。
字段类型默认值说明
dataPtrvoid*0音频 PCM 数据指针
numOfSamplesint0采样点数(单个声道)
bytesPerSampleint0每个采样点的字节数
numOfChannelsint0声道数
samplesPerSecint0每秒采样点数(采样率)
pushSequenceint0PCM 输入轮次(用于送流消费完成通知)
timeStampint64_t0时间戳
dataSizeint0数据长度(字节)
autoGenMuteboolfalse仅回调时有效;true 表示 SDK 生成的静音数据
AoqAudioSource
枚举值说明
AoqAudioSourceCaptured0采集的音频数据
AoqAudioSourceProcessCaptured13A 后的音频数据
AoqAudioSourcePublish2推流的音频数据(需 connect 成功)
AoqAudioSourcePlayback3播放的音频数据
AoqAudioSourceMax4占位,不要使用
AoqAudioObserverMode
枚举值说明
AoqAudioObserverModeReadOnly0只读模式
AoqAudioObserverModeReadWrite1读写模式
AoqAudioObserverConfig
字段类型默认值说明
sampleRateint48000回调音频采样率(Hz),与源不一致时重采样
channelsint1回调音频声道数,支持 1 / 2,受限拉流 Codec 参数
modeAoqAudioObserverModeAoqAudioObserverModeReadOnly回调模式
采样率支持:8 / 12 / 16 / 24 / 32 / 44.1 / 48 / 64 / 88.2 / 96 / 176.4 / 192K。 AoqAudioVolumeIndicationConfig
字段类型默认值说明
intervalint0回调间隔(毫秒);小于等于 0 表示关闭回调,大于 0 且小于 10 时按 10 处理
smoothint3音量平滑系数,取值越大越平滑,取值范围 0-10
AoqAudioVolume
字段类型默认值说明
volumeint0平滑后的瞬时音量,取值范围 0-255

音频文件与外部音频流类型

AoqAudioFileMixConfig
字段类型默认值说明
fileNameconst char*nullptr文件名(含路径)
cyclesint-1循环次数,-1 表示无限循环
startPosMslong0起始播放位置(毫秒)
publishVolumeint100推流音量,取值范围 0-100
playoutVolumeint100播放音量,取值范围 0-100
fileId 不在配置体内,作为 startAudioFile 的独立入参传入。
AoqAudioFileStateCode
枚举值说明
AoqAudioFileNone0无状态
AoqAudioFileStarted1开始播放
AoqAudioFileStopped2停止播放
AoqAudioFilePaused3暂停播放
AoqAudioFileResumed4恢复播放
AoqAudioFileEnded5播放完毕
AoqAudioFileBuffering6正在缓冲
AoqAudioFileBufferingEnd7缓冲结束
AoqAudioFileFailed8播放失败
AoqAudioFileErrorCode
枚举值说明
AoqAudioFileNoError0没有错误
AoqAudioFileOpenFailed1打开文件失败
AoqAudioFileDecodeFailed2解码文件失败
AoqAudioFileState
字段类型默认值说明
fileIdconst char*nullptr文件 ID,仅回调期间有效
stateCodeAoqAudioFileStateCodeAoqAudioFileNone文件状态码
errorCodeAoqAudioFileErrorCodeAoqAudioFileNoError文件错误码
AoqAudioExternalStreamConfig
字段类型默认值说明
trackTypeAoqTrackTypeAoqTrackTypeAudio音频轨道类型
codecTypeAoqEncoderTypeAoqEncoderTypeAudioPCM音频流格式,支持 PCM
channelsint1声道数,受限推流音频 Codec(支持 1 / 2,超过的声道忽略)
sampleRateint48000采样率(Hz)
playoutVolumeint100播放音量,取值范围 0-100
publishVolumeint100推流音量,取值范围 0-100
maxBufferDurationint600000最大缓冲时长(毫秒,即 10 分钟),取值范围 100 以上;超过时 Push 失败
enable3Aboolfalse对输入 PCM 做 3A 处理(Linux 不生效,见 4.3)
采样率支持:8 / 12 / 16 / 24 / 32 / 44.1 / 48 / 64 / 88.2 / 96 / 176.4 / 192K。
streamId 不在配置体内,作为 addAudioExternalStream 的独立入参传入。

视频类型

AoqVideoCanvas
字段类型默认值说明
viewvoid*nullptr平台原生视图句柄的不透明指针;传 nullptr 表示解绑
renderModeAoqRenderModeAoqRenderModeAuto渲染填充模式
view 的平台含义:Apple 为 NSView*,Windows 为 HWND,Android 为 SDK 内部渲染视图适配对象。调用方需保证 view 生命周期长于 setLocalView/setRemoteView 设置期间。
Linux 无对应平台实现,该结构在 Linux 上无实际用途。
AoqVideoCaptureConfig
字段类型默认值说明
widthint1280采集宽度(像素),isExternal=true 时无效
heightint720采集高度(像素),isExternal=true 时无效
fpsint15采集帧率,isExternal=true 时无效(节奏由送帧决定)
isExternalboolfalse是否外部采集;true 时不打开摄像头,由 pushExternalVideoCapturedFrame 喂帧
cameraDirection 为移动端专有字段,桌面端(含 Linux)不存在。Linux 上建议始终置 isExternal = true
AoqVideoCodecConfig 编码与解码共用同一结构。用于解码时仅 trackType/codecType/width/height/fps/bitrate 生效(作为订阅提议参与协商);minBitrate/keyframeInterval/mirrorMode/orientationMode/isExternal 仅编码使用。
字段类型默认值说明
isExternalboolfalse外部编码模式;true 时由客户推送已编码帧,SDK 不做采集和编码
trackTypeAoqTrackTypeAoqTrackTypeVideo轨道类型
codecTypeAoqEncoderTypeAoqEncoderTypeVideoH264编码类型
widthint540分辨率宽(像素)
heightint960分辨率高(像素)
fpsint5帧率
bitrateint500000起始码率(bps)
minBitrateint128000最小码率(bps)
keyframeIntervalint2关键帧间隔(秒)
mirrorModeAoqMirrorModeAoqMirrorModeDisabled镜像模式
orientationModeAoqOrientationModeAoqOrientationModeAuto方向模式
AoqVideoPixelFormat
枚举值说明Linux 可用
AoqVideoPixelFormatUnknown0未知格式-
AoqVideoPixelFormatI4201I420(YUV 三平面)可用
AoqVideoPixelFormatNV122NV12(YUV 半平面)可用
AoqVideoPixelFormatNV213NV21(YUV 半平面)可用
AoqVideoPixelFormatBGRA4BGRA(32 位)可用
AoqVideoPixelFormatRGBA5RGBA(32 位)可用
AoqVideoPixelFormatCVPixelBuffer6仅 Apple 平台有效不可用
AoqVideoPixelFormatTextureOES7Android 外部 OES 纹理不可用
AoqVideoPixelFormatTexture2D8Android 普通 2D 纹理不可用
枚举值 6/7/8 在头文件中仍可见(未被条件编译屏蔽),但 Linux 上无对应平台能力,传入会被当作不支持的格式处理。
AoqVideoFrame 外部视频裸帧(既用于 pushExternalVideoCapturedFrame,也用于 IVideoFrameObserver 回调)。
字段类型默认值说明
formatAoqVideoPixelFormatAoqVideoPixelFormatUnknown像素格式
widthint0宽度(像素)
heightint0高度(像素)
dataPtrvoid*0打包格式数据(NV12 / NV21 / BGRA / RGBA)
dataSizeint0打包数据字节数
dataYvoid*0I420 Y 平面
dataUvoid*0I420 U 平面
dataVvoid*0I420 V 平面
strideYint0Y 平面行跨度
strideUint0U 平面行跨度
strideVint0V 平面行跨度
nativePixelBuffervoid*0Apple 零拷贝用(CVPixelBufferRef),Linux 不使用
textureIdint0Android 纹理 ID,Linux 不使用
transformMatrixfloat 数组(16 元素)全 0纹理变换矩阵(行优先 4x4),Linux 不使用
timeStampint64_t0时间戳(毫秒);0 时 SDK 用本地时间补齐
AoqVideoCodecType
枚举值说明
AoqVideoCodecTypeJPEG0JPEG 编码
AoqVideoEncodedFrame 外部已编码视频帧。调用方自行完成编码,SDK 不做二次编码,直接打包发送。
字段类型默认值说明
codecAoqVideoCodecTypeAoqVideoCodecTypeJPEG编码格式
datavoid*nullptr编码后数据指针
dataSizeint0编码后数据字节数
widthint0宽度(像素)
heightint0高度(像素)
timeStampint64_t0时间戳(毫秒);0 时 SDK 用本地时间补齐
AoqVideoDeviceStateCode
枚举值说明
AoqVideoDeviceNone0无状态
AoqVideoDeviceCaptureStarting1摄像头正在启动
AoqVideoDeviceCaptureStarted2摄像头已启动
AoqVideoDeviceCaptureStopping3摄像头正在停止
AoqVideoDeviceCaptureStopped4摄像头已停止
AoqVideoDeviceCaptureFail5摄像头启动失败(权限拒绝、设备不可用等)
AoqVideoDeviceState
字段类型默认值说明
stateAoqVideoDeviceStateCodeAoqVideoDeviceNone设备采集操作状态
reasonint0错误原因代码(参考 AoqErrorCode)
AoqVideoSource
枚举值说明
AoqVideoSourceCaptured0采集后的视频数据(前处理前)
AoqVideoSourcePreEncode1编码前的视频数据(前处理后)
AoqVideoSourceRemote2远端解码后、渲染前的视频数据
AoqVideoSourceMax3占位,不要使用
AoqVideoObserverMode
枚举值说明
AoqVideoObserverModeReadOnly0只读模式
AoqVideoObserverModeReadWrite1读写模式(仅 I420 / CVPixelBuffer 支持)
AoqVideoObserverAlignment
枚举值说明
AoqVideoObserverAlignmentDefault0默认对齐
AoqVideoObserverAlignmentEven1偶数对齐
AoqVideoObserverAlignment424 字节对齐
AoqVideoObserverAlignment838 字节对齐
AoqVideoObserverAlignment16416 字节对齐
AoqVideoObserverConfig
字段类型默认值说明
formatAoqVideoPixelFormatAoqVideoPixelFormatI420期望回调像素格式
alignmentAoqVideoObserverAlignmentAoqVideoObserverAlignmentDefault宽度对齐策略
modeAoqVideoObserverModeAoqVideoObserverModeReadOnly回调模式,仅 I420 / CVPixelBuffer 支持 ReadWrite
mirrorAppliedboolfalse是否对回调数据应用镜像