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。
參數 | 類型 | 說明 |
|---|---|---|
config | AoqCreateConfig | 引擎建立配置 |
listener | AoqEngineEventListener | 引擎事件回調監聽(interface,所有回調均為可選) |
context | common.Context | UIAbility/Page 的 Context,用於 aki+ACPM 初始化 |
destroy
銷毀引擎單例,釋放所有資源。調用後需重新 createEngine 才能繼續使用。
getVersion
擷取 SDK 目前的版本號。
connect
串連 Relay 伺服器。串連參數由業務方 AppServer 通過 /api/v1/allocate 分配後下發給用戶端。
參數 | 類型 | 說明 |
|---|---|---|
config | AoqConnectConfig | 串連配置,包含 Token、SID、Relay 存取點列表等 |
disconnect
斷開與伺服器的串連,釋放串連相關資源。音視頻採集/播放裝置不會自動停止。
音訊裝置管理
startAudioCapture
開啟音頻採集裝置(麥克風)。
參數 | 類型 | 說明 |
|---|---|---|
config | AoqAudioCaptureConfig | 採集配置 |
stopAudioCapture
關閉音頻採集裝置。
muteAudioCapture
靜音或取消靜音音頻採集。
參數 | 類型 | 說明 |
|---|---|---|
mute | boolean | true 為靜音;false 為取消靜音 |
startAudioPlayer
開始音頻渲染(擴音器/耳機播放遠端音頻)。
參數 | 類型 | 說明 |
|---|---|---|
config | AoqAudioPlaybackConfig | 播放配置 |
stopAudioPlayer
停止音頻渲染。
pauseAudioPlayer
暫停音頻渲染,可指定淡出時間長度實現平滑過渡。
參數 | 類型 | 說明 |
|---|---|---|
fadeMs | number | 淡出時間長度(毫秒);0 表示立即停止 |
resumeAudioPlayer
恢複音頻渲染,可指定淡入時間長度實現平滑過渡。
參數 | 類型 | 說明 |
|---|---|---|
fadeMs | number | 淡入時間長度(毫秒);0 表示立即恢複 |
interruptAudioPlayer
打斷本輪語音通話。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | 目標軌道類型,通常傳 AoqTrackTypeAudio |
fadeMs | number | 淡出時間長度(毫秒) |
enableSpeakerphone
切換音訊輸出路由到擴音器或耳機。
參數 | 類型 | 說明 |
|---|---|---|
enable | boolean | true 使用擴音器;false 使用耳機 |
isSpeakerphoneEnabled
查詢當前是否使用擴音器輸出。
音頻編碼配置
setAudioEncoderConfig
設定音頻編碼參數。
setAudioDecoderConfig
設定音頻解碼參數。
視頻裝置管理
startVideoCapture
開啟視頻採集裝置(網路攝影機)。當 config.isExternal = true 時不開啟網路攝影機,由調用方通過 pushExternalVideoCapturedFrame 喂幀。
stopVideoCapture
關閉視頻採集裝置。
switchCamera
切換前後置網路攝影機。
參數 | 類型 | 說明 |
|---|---|---|
direction | AoqCameraDirection | AoqCameraDirectionFront 或 AoqCameraDirectionBack |
setLocalView
設定或移除本地視頻渲染視窗。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo |
canvas | AoqVideoCanvas | null | 渲染畫布配置;傳 null 或 canvas.view 為 null 表示移除渲染視窗 |
setRemoteView
設定或移除遠端視頻渲染視窗。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo |
canvas | AoqVideoCanvas | null | 渲染畫布配置;傳 null 或 canvas.view 為 null 表示移除渲染視窗 |
視頻編碼與外部輸入
setVideoEncoderConfig
設定視頻編碼參數,按 config.trackType 路由到對應軌道。
pushExternalVideoCapturedFrame
推送外部採集視訊框架。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo |
frame | AoqVideoFrame | 視訊框架資料 |
pushExternalVideoEncodedFrame
推送外部已編碼視訊框架。SDK 不做二次編碼,直接打包發送。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo |
frame | AoqVideoEncodedFrame | 已編碼幀資料 |
媒體流發送控制
enableSendMediaStream
控制本地媒體流的發送,按 trackType 路由到對應軌道。
參數 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | AoqTrackTypeAudio / AoqTrackTypeVideo |
enable | boolean | true 啟用發送;false 停用發送 |
音頻檔案播放
startAudioFile
開始推流播放本地音頻檔案。音頻檔案播放會混音到推流和本地播放中。
參數 | 類型 | 說明 |
|---|---|---|
fileId | string | 音頻檔案唯一標識,由調用方指定 |
config | AoqAudioFileMixConfig | 播放配置 |
stopAudioFile / pauseAudioFile / resumeAudioFile
getAudioFileDuration / getAudioFileCurrentPosition
setAudioFilePositionMillis
setAudioFileVolume / getAudioFileVolume
外部音頻流
addAudioExternalStream
新增一條外部音頻流。
pushAudioExternalStreamData
輸入外部音頻 PCM 資料。若緩衝區滿返回 AoqECAudioExternalBufferFull(110)。
setAudioExternalStreamVolume / getAudioExternalStreamVolume
clearAudioExternalStreamBuffer
清空外部音頻流緩衝。無傳回值,非同步執行。
參數 | 類型 | 說明 |
|---|---|---|
fadeoutMs | number | -1 預設淡出;0 立即清空;>0 保留指定毫秒後淡出 |
removeAudioExternalStream
即時訊息
sendDataMsg
發送即時資料訊息,通過 MoQT Data 通道傳輸。
音訊框架回調
setAudioFrameObserver
設定音訊框架資料回調監聽。先註冊監聽,再 enableAudioFrameObserver 開啟回調。
enableAudioFrameObserver
視訊框架回調
setVideoFrameObserver
enableVideoFrameObserver
AoqEngineEventListener 回調
所有回調均為可選屬性(?)。
IAudioFrameObserver
IVideoFrameObserver
資料類型與枚舉
通用類型
AoqCreateConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
workDir | string | "" | SDK 工作目錄 |
enableDumpAudio | boolean | false | 是否開啟音頻未經處理資料 dump(調試用) |
extras | string | "" | 擴充參數字串 |
AoqConnectConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
token | string | "" | 串連鑒權 Token |
sid | string | "" | 會話 ID |
certFingerprint | string | "" | 伺服器憑證指紋 |
relayEndpoints | AoqRelayEndpoint[] | [] | Relay 存取點列表 |
workspaceIdHash | string | "" | 工作空間 ID Hash |
publishTracks | AoqTrackParam[] | [] | 本端計劃發布的軌道列表 |
subscribeTracks | AoqTrackParam[] | [] | 本端計劃訂閱的軌道列表 |
AoqRelayEndpoint
欄位 | 類型 | 說明 |
|---|---|---|
endpoint | string | Relay 伺服器網域名稱或 IP |
port | number | Relay 伺服器連接埠 |
AoqTrackParam
欄位 | 類型 | 說明 |
|---|---|---|
trackType | AoqTrackType | 軌道類型 |
AoqErrorCode
枚舉值 | 值 | 說明 |
|---|---|---|
AoqECOK | 0 | 成功 |
AoqECParamInvalid | 1 | 參數非法 |
AoqECStateInvalid | 2 | 狀態非法 |
AoqECUnSupport | 3 | 不支援 |
AoqECAudio | 100 | 音頻通用錯誤 |
AoqECAudioExternalBufferFull | 110 | 外部音頻緩衝區滿 |
AoqECAudioDevice | 120 | 音訊裝置通用錯誤 |
AoqECAudioDeviceRecordingAuthFailed | 121 | 錄音許可權未擷取 |
AoqECAudioDeviceRecordingOccupied | 122 | 錄音裝置被佔用 |
AoqECAudioDeviceRecordingBackgroundStart | 123 | 後台啟動錄音失敗 |
AoqECAudioDeviceRecordingStartFail | 124 | 錄音啟動失敗 |
AoqECAudioDevicePlayoutOccupied | 125 | 播放裝置被佔用 |
AoqECAudioDevicePlayoutBackgroundStart | 126 | 後台啟動播放失敗 |
AoqECAudioDevicePlayoutStartFail | 127 | 播放啟動失敗 |
AoqECAudioDeviceEarpieceRequiresVoipMode | 128 | 耳機模式需要啟用 VoIP 模式 |
AoqECVideo | 200 | 視頻通用錯誤 |
AoqECVideoExternalBufferFull | 210 | 外部視頻緩衝區滿 |
AoqECVideoExternalCaptureNotEnabled | 211 | 外部視頻採集未啟用 |
AoqECVideoExternalEncoderNotEnabled | 212 | 外部視頻編碼器未啟用 |
AoqECVideoDevice | 220 | 視頻裝置通用錯誤 |
AoqECVideoDeviceCameraOpenFail | 221 | 網路攝影機開啟失敗 |
AoqECVideoDeviceCameraAuthFailed | 222 | 網路攝影機許可權未擷取 |
AoqECVideoDeviceCameraOccupied | 223 | 網路攝影機被佔用 |
AoqECVideoDeviceCameraRunningError | 224 | 網路攝影機運行異常 |
AoqECVideoCodec | 230 | 視頻編解碼通用錯誤 |
AoqECVideoCodecEncoderInitFail | 231 | 視頻編碼器初始化失敗 |
AoqECVideoRender | 240 | 視頻渲染通用錯誤 |
AoqECVideoRenderCreateFail | 241 | 視頻渲染建立失敗 |
AoqECVideoRenderDrawError | 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 | 資料訊息軌道 |
AoqConnectionStatus
枚舉值 | 值 | 說明 |
|---|---|---|
AoqConnectionStatusDisconnected | 0 | 未串連 |
AoqConnectionStatusConnecting | 1 | 串連中 |
AoqConnectionStatusConnected | 2 | 已串連 |
AoqConnectionStatusFailed | 3 | 串連失敗 |
AoqEncoderType / AoqMirrorMode / AoqOrientationMode
同原文檔,無變化。
音訊類型
AoqAudioCaptureConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
isExternal | boolean | false | true 使用外部音頻輸入 |
isVoipMode | boolean | false | true 啟用 VoIP 模式(硬體 AEC) |
channel | number | 1 | 聲道數,支援 1/2 |
AoqAudioPlaybackConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
isVoipMode | boolean | false | true 啟用 VoIP 模式(硬體 AEC),採集/播放參數先到為準 |
isDefaultSpeaker | boolean | true | true 預設擴音器;false 預設耳機 |
isExternal | boolean | false | true 使用外部音訊輸出 |
channel | number | 1 | 聲道數,支援 1/2 |
AoqAudioCodecConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
trackType | AoqTrackType | AoqTrackTypeAudio | 目標軌道 |
codecType | AoqEncoderType | AoqEncoderTypeAudioPCM | 編碼格式 |
sampleRate | number | 48000 | 採樣率(Hz) |
channel | number | 1 | 聲道數 |
bitrate | number | 32000 | 碼率(bps) |
視頻類型
AoqVideoCaptureConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
width | number | 1280 | 採集寬度;isExternal=true 時無效 |
height | number | 720 | 採集高度 |
fps | number | 15 | 採集幀率 |
isExternal | boolean | false | true 不開啟網路攝影機,由 pushExternalVideoCapturedFrame 喂幀 |
cameraDirection | AoqCameraDirection | Front | 網路攝影機方向 |
AoqVideoCodecConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo | 目標軌道 |
codecType | AoqEncoderType | AoqEncoderTypeVideoH264 | 編碼格式 |
width | number | 720 | 編碼寬度 |
height | number | 1280 | 編碼高度 |
fps | number | 15 | 幀率 |
bitrate | number | 500 | 碼率(kbps) |
minBitrate | number | 128 | 最小碼率(kbps) |
keyframeInterval | number | 2 | 主要畫面格間隔(秒) |
mirrorMode | AoqMirrorMode | Disabled | 鏡像模式 |
orientationMode | AoqOrientationMode | Auto | 視頻方向 |
isExternal | boolean | false | true 時 SDK 不做二次編碼 |
AoqVideoCanvas
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
view | Object | null | null | AoqXComponentController 執行個體;傳 null 表示移除渲染綁定 |
renderMode | AoqRenderMode | AoqRenderModeAuto | 顯示模式 |
AoqVideoPixelFormat
枚舉值 | 值 | 說明 |
|---|---|---|
AoqVideoPixelFormatUnknown | 0 | 未知 |
AoqVideoPixelFormatI420 | 1 | I420 |
AoqVideoPixelFormatNV12 | 2 | NV12 |
AoqVideoPixelFormatNV21 | 3 | NV21 |
AoqVideoPixelFormatBGRA | 4 | BGRA |
AoqVideoPixelFormatRGBA | 5 | RGBA |
AoqVideoFrame
欄位 | 類型 | 說明 |
|---|---|---|
format | AoqVideoPixelFormat | 像素格式 |
width | number | 寬度(像素) |
height | number | 高度(像素) |
dataPtr | ArrayBuffer | Uint8Array | null | 打包格式資料 |
dataSize | number | 打包資料位元組數 |
dataY / dataU / dataV | ArrayBuffer | Uint8Array | null | I420 平面 |
strideY / strideU / strideV | number | 平面 stride |
timeStamp | number | 時間戳記(ms);0 時 SDK 用本地時鐘補 |
AoqVideoEncodedFrame
欄位 | 類型 | 說明 |
|---|---|---|
codec | AoqVideoCodecType | 編碼格式 (AoqVideoCodecTypeJPEG=0) |
data | ArrayBuffer | Uint8Array | 編碼後資料 |
width | number | 寬度 |
height | number | 高度 |
timeStamp | number | 時間戳記(ms) |
音頻檔案與外部流類型
AoqAudioFileMixConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
fileName | string | "" | 檔案名稱(含路徑) |
cycles | number | -1 | 迴圈次數,-1 無限迴圈 |
startPosMs | number | 0 | 起始播放位置(ms) |
publishVolume | number | 100 | 推流音量 [0,100] |
playoutVolume | number | 100 | 本地播放音量 [0,100] |
AoqAudioExternalStreamConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
trackType | AoqTrackType | AoqTrackTypeAudio | 軌道類型 |
codecType | AoqEncoderType | AoqEncoderTypeAudioPCM | 音頻格式 |
channels | number | 1 | 聲道數 |
sampleRate | number | 48000 | 採樣率(Hz) |
playoutVolume | number | 100 | 播放音量 [0,100] |
publishVolume | number | 100 | 推流音量 [0,100] |
maxBufferDuration | number | 1000 | 最大緩衝(ms) |
enable3A | boolean | false | 輸入 PCM 做 3A 處理 |
AoqAudioFrameData
欄位 | 類型 | 說明 |
|---|---|---|
dataPtr | ArrayBuffer | Uint8Array | null | 音頻 PCM 裸資料 |
dataSize | number | PCM 位元組數 |
numOfSamples | number | 採樣點數(單聲道) |
bytesPerSample | number | 每採樣點位元組數 |
numOfChannels | number | 聲道數 |
samplesPerSec | number | 每秒採樣點數 |
pushSequence | number | PCM 輸入輪次 |
timeStamp | number | 時間戳記 |
autoGenMute | boolean | true 表示 SDK 產生的靜音資料 |
Observer 配置類型
AoqAudioObserverConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
sampleRate | number | 48000 | 回調採樣率 |
channels | number | 1 | 回調聲道數 |
mode | AoqAudioObserverMode | ReadOnly | 讀寫入模式 |
AoqVideoObserverConfig
欄位 | 類型 | 預設值 | 說明 |
|---|---|---|---|
format | AoqVideoPixelFormat | I420 | 回調像素格式 |
alignment | AoqVideoObserverAlignment | Default | 寬度對齊 |
mode | AoqVideoObserverMode | ReadOnly | 讀寫入模式 |
mirrorApplied | boolean | false | 是否應用鏡像 |
統計資料類型
AoqStats
欄位 | 類型 | 說明 |
|---|---|---|
audioPublishStats | AoqAudioPublishStats[] | 音頻推流統計 |
videoPublishStats | AoqVideoPublishStats[] | 視頻推流統計 |
dataMsgPublishStats | AoqDataMsgPublishStats[] | 資料訊息推流統計 |
audioSubscribeStats | AoqAudioSubscribeStats[] | 音頻拉流統計 |
videoSubscribeStats | AoqVideoSubscribeStats[] | 視頻拉流統計 |
dataMsgSubscribeStats | AoqDataMsgSubscribeStats[] | 資料訊息拉流統計 |
networkStats | AoqNetworkStats | 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 版本的主要差異
類別 | Android | OHOS |
|---|---|---|
實現語言 | Java | ArkTS(.ets),NAPI 橋接 C++ |
傳回值類型 | int / long / boolean | number / boolean |
createEngine 傳回值 | @NonNull AoqClientEngine | AoqClientEngine | null |
createEngine context | android.content.Context | common.Context (UIAbility/Page) |
listener 形式 | abstract class,預設空實現 | TS interface,所有回調 optional (?) |
frame observer 形式 | interface + default 方法 | TS interface,所有回調 optional (?) |
AoqCreateConfig | 包含 isBTScoMode | 不含 isBTScoMode |
AoqAudioPlaybackConfig | 無 isVoipMode | 含 isVoipMode,採集/播放參數先到為準 |
onAudioDeviceFocusChanged | 提供 | 不提供(無音頻焦時間點事件抽象) |
視頻渲染 view | View(SurfaceView/TextureView) | AoqXComponentController(繼承 XComponentController) |
Pixel Format 枚舉 | 包含 TextureOES(7) / Texture2D(8) | 不包含紋理格式 |
視訊框架附加欄位 | textureId / transformMatrix / eglContext | 無這些欄位 |
幀資料容器 | byte[] / ByteBuffer | ArrayBuffer / Uint8Array |
視頻編碼碼率單位 | bps(預設 500000/128000) | kbps(預設 500/128) |
AoqTrackType | 含 AoqTrackTypeScreen(3) | 不含 AoqTrackTypeScreen,螢幕採集暫未開放 |
螢幕採集 API | startScreenCapture / stopScreenCapture | 暫未提供 |
Observer ReadWrite | I420 支援寫回 | 當前等效 ReadOnly,P2 實現真回寫 |
Observer 重註冊安全 | 依賴 SDK 內部 | UAF 防護墓地模式 |
裝置監測能力 | Java 側隱含 | AoqDeviceMonitor(內部模組)自動啟動 |
枚舉命名空間 | AoqErrorCodeXxx | AoqECXxx (如 AoqECOK、AoqECParamInvalid) |
主要設計要點
- AoqXComponentController:繼承自 XComponentController,重寫 onSurfaceCreated/Changed/Destroyed。業務需建立後傳入 XComponent,並在 setLocalView/setRemoteView 時作為 canvas.view。
- NAPI 架構:facade (AoqClientEngine.ets) -> 實現層 (AoqClientEngineImpl.ets) -> NAPI (libaoq_client_sdk.so)。配置在實現層被拍平為多個參數。
- 裝置監測(內部):AoqDeviceMonitor 在 createEngine 後自動啟動,下沉網路狀態與 App 前後台狀態到 C++ 引擎。
- Observer UAF 防護:重註冊時採用 "cpp 切舊引用 -> 舊 obs push 入墓地 -> 佔位指新 obs" 三步順序。
- 幀負載語義:音視訊框架回調中的 Uint8Array 是 native 拷貝,P1 不支援寫回,P2 計劃零拷貝。