跳转到主要内容
AOQ SDK 功能

视频常用功能介绍

AOQ SDK 视频采集、预览、编码配置

AOQ Client SDK 提供了完整的视频能力,覆盖视频采集、渲染显示、编码配置、帧数据回调、外部视频输入等核心场景。本文档基于 Android(Java)、iOS(Objective-C)、Ohos(ArkTS)三个平台的公开 API,对视频常用功能进行统一介绍。

1. 视频采集

1.1 功能说明

视频采集用于打开设备摄像头,将实时视频帧数据送入 SDK 编码推流管线。SDK 支持两种采集模式:
  • 内部采集(默认):SDK 自动管理摄像头设备的打开、帧采集和关闭,支持前后置摄像头切换。
  • 外部采集:由应用自行管理摄像头或其他视频源,采集到的帧数据通过 pushExternalVideoCapturedFrame 接口输入 SDK。

1.2 采集配置参数

参数类型默认值说明
widthint1280采集宽度(像素),外部采集时无效
heightint720采集高度(像素),外部采集时无效
fpsint15采集帧率,外部采集时由送帧节奏决定
isExternalboolfalse是否使用外部采集模式
cameraDirectionAoqCameraDirectionFront(0)摄像头方向,外部采集时无效

1.3 摄像头方向枚举

枚举值数值说明
AoqCameraDirectionFront0前置摄像头
AoqCameraDirectionBack1后置摄像头

1.4 API 对照

功能AndroidiOSOhos
开启采集startVideoCapture(config)startVideoCapture:config:startVideoCapture(config)
关闭采集stopVideoCapture()stopVideoCapturestopVideoCapture()
切换摄像头switchCamera(direction)switchCamera:switchCamera(direction)

1.5 使用示例

  • Android
  • iOS
  • Ohos
AoqVideoCaptureConfig config = new AoqVideoCaptureConfig();
config.width = 1280;
config.height = 720;
config.fps = 15;
config.cameraDirection = AoqCameraDirection.AoqCameraDirectionFront;
engine.startVideoCapture(config);

2. 视频渲染

2.1 功能说明

视频渲染用于将本地采集或远端接收的视频帧数据显示到屏幕上。SDK 支持设置本地预览窗口和远端渲染窗口,通过 trackType 区分视频流(Video)和屏幕共享流(Screen)。

2.2 渲染模式

枚举值数值说明
AoqRenderModeAuto0自动模式
AoqRenderModeStretch1拉伸平铺,画面可能变形
AoqRenderModeFill2填充黑边,画面完整显示
AoqRenderModeCrop3裁剪模式,画面内容可能丢失

2.3 画布配置

参数类型默认值说明
view平台视图null渲染视图(Android: SurfaceView/TextureView, iOS: UIView, Ohos: XComponent)
renderModeAoqRenderModeAuto(0)渲染显示模式

2.4 API 对照

功能AndroidiOSOhos
设置本地预览setLocalView(trackType, canvas)setLocalView:trackType:canvas:setLocalView(trackType, canvas)
设置远端渲染setRemoteView(trackType, canvas)setRemoteView:trackType:canvas:setRemoteView(trackType, canvas)
平台差异:Android 使用 SurfaceView 或 TextureView 作为渲染容器;iOS 使用 UIView(内部通过 AoqRenderView 封装,支持 Metal 加速);Ohos 使用 XComponent(通过 AoqXComponentController 管理 native 渲染视图)。

3. 视频编码配置

3.1 功能说明

设置视频编码参数,包括编码格式、分辨率、帧率、码率、关键帧间隔、镜像和方向等。通过 trackType 区分视频轨道和屏幕共享轨道的编码配置。

3.2 编码配置参数

参数类型默认值说明
trackTypeAoqTrackTypeVideo(1)轨道类型:Video
codecTypeAoqEncoderTypeVideoH264(3)编码格式
widthint720编码宽度
heightint1280编码高度
fpsint5编码帧率
bitrateint500000目标码率(bps)
minBitrateint128000最小码率(bps)
keyframeIntervalint2关键帧间隔(秒)
mirrorModeAoqMirrorModeDisabled(0)镜像模式
orientationModeAoqOrientationModeAuto(0)方向模式
isExternalboolfalse外部编码模式(true 时由应用推送已编码帧)

3.3 编码格式枚举

枚举值数值说明
AoqEncoderTypeVideoH2643H.264 编码
AoqEncoderTypeVideoJpeg4JPEG 编码(用于外部编码帧)

3.4 镜像模式

枚举值数值说明
AoqMirrorModeDisabled0禁用镜像
AoqMirrorModeEnabled1启用镜像

3.5 方向模式

枚举值数值说明
AoqOrientationModeAuto0自动方向
AoqOrientationModePortrait1竖屏方向
AoqOrientationModeLandscape2横屏方向

3.6 API 对照

功能AndroidiOSOhos
设置编码参数setVideoEncoderConfig(config)setVideoEncoderConfig:setVideoEncoderConfig(config)

4. 外部视频帧输入

4.1 功能说明

外部视频帧输入允许应用将自定义的视频帧数据推送到 SDK,用于外部采集或外部编码场景。支持两种推送方式:
  • 推送原始帧:将未编码的像素数据(I420/NV12/NV21/BGRA/RGBA 等格式)推送给 SDK,由 SDK 进行编码。
  • 推送已编码帧:将已编码的数据(如 JPEG)直推给 SDK,SDK 不做二次编码,直接打包发送。
通过 trackType 路由,AoqTrackTypeVideo 对应视频采集的外部帧,AoqTrackTypeScreen 对应屏幕共享的外部帧。

4.2 像素格式枚举

枚举值数值说明平台支持
AoqVideoPixelFormatI4201I420 三平面全平台
AoqVideoPixelFormatNV122NV12 双平面全平台
AoqVideoPixelFormatNV213NV21 双平面全平台
AoqVideoPixelFormatBGRA4BGRA 打包全平台
AoqVideoPixelFormatRGBA5RGBA 打包全平台
AoqVideoPixelFormatCVPixelBuffer6Apple 零拷贝仅 iOS
AoqVideoPixelFormatTextureOES7OES 纹理仅 Android
AoqVideoPixelFormatTexture2D82D 纹理仅 Android

4.3 原始视频帧数据结构 (AoqVideoFrame)

字段类型说明
formatAoqVideoPixelFormat像素格式
widthint宽度(像素)
heightint高度(像素)
databyte[] / ArrayBuffer打包格式数据(NV12/NV21/BGRA/RGBA)
dataY / dataU / dataVbyte[] / ArrayBufferI420 三平面数据
strideY / strideU / strideVintI420 三平面步长
textureIdint纹理 ID(Android TextureOES/Texture2D 时有效)
transformMatrixfloat[16]4x4 纹理变换矩阵(Android)
eglContextEGLContext共享 EGL 上下文(Android)
pixelBufferCVPixelBufferRefApple 零拷贝(iOS)
timeStamplong时间戳(ms),0 时 SDK 用本地时钟补

4.4 已编码视频帧数据结构 (AoqVideoEncodedFrame)

字段类型默认值说明
codecAoqVideoCodecTypeJPEG(0)编码格式
databyte[] / ArrayBuffer-编码后数据
widthint-宽度(像素)
heightint-高度(像素)
timeStamplong0时间戳(ms)

4.5 API 对照

功能AndroidiOSOhos
推送原始帧pushExternalVideoCapturedFrame(trackType, frame)pushExternalVideoCapturedFrame:frame:pushExternalVideoCapturedFrame(trackType, frame)
推送已编码帧pushExternalVideoEncodedFrame(trackType, frame)pushExternalVideoEncodedFrame:frame:pushExternalVideoEncodedFrame(trackType, frame)

5. 视频帧数据回调

5.1 功能说明

视频帧回调允许开发者在视频管线的不同位置获取原始帧数据,用于视频分析、自定义处理、录制等场景。支持只读和读写两种模式,读写模式下可修改帧数据并写回 SDK。

5.2 支持的数据源位置

数据源枚举值说明
Captured0采集后的视频数据(前处理前)
PreEncode1编码前的视频数据(前处理后)
Remote2远端解码后、渲染前的视频数据

5.3 回调配置参数

参数类型默认值说明
formatAoqVideoPixelFormatI420(1)期望回调的像素格式
alignmentAoqVideoObserverAlignmentDefault(0)宽度对齐策略
modeAoqVideoObserverModeReadOnly(0)只读(0)/读写(1) 模式
mirrorAppliedboolfalse是否对回调数据应用镜像

5.4 宽度对齐枚举

枚举值数值说明
AoqVideoObserverAlignmentDefault0默认对齐
AoqVideoObserverAlignmentEven12 字节对齐
AoqVideoObserverAlignment424 字节对齐
AoqVideoObserverAlignment838 字节对齐
AoqVideoObserverAlignment16416 字节对齐

5.5 使用步骤

  1. 注册观察者:调用 setVideoFrameObserver 设置视频帧回调监听器
  2. 启用数据源:调用 enableVideoFrameObserver 选择需要监听的数据源位置,开启回调
  3. 处理回调数据:在回调函数中获取帧数据(仅回调期间有效,异步使用需自行拷贝)

5.6 API 对照

功能AndroidiOSOhos
注册观察者setVideoFrameObserver(listener)setVideoFrameObserver:setVideoFrameObserver(observer)
启用回调enableVideoFrameObserver(enabled, source, config)enableVideoFrameObserver:videoSource:config:enableVideoFrameObserver(enabled, source, config)

5.7 回调方法

回调AndroidiOSOhos
采集后数据onCapturedVideoFrame(frame)onCapturedVideoFrame:onCapturedVideoFrame(frame)
编码前数据onPreEncodeVideoFrame(trackType, frame)onPreEncodeVideoFrame:frame:onPreEncodeVideoFrame(trackType, frame)
远端数据onRemoteVideoFrame(trackType, frame)onRemoteVideoFrame:frame:onRemoteVideoFrame(trackType, frame)
回调方法返回 true/YES 表示数据已修改、需写回 SDK(仅 ReadWrite 模式且 I420 格式时生效)。

7. 媒体流发送控制

7.1 功能说明

控制本地媒体流的发送开关,通过 trackType 路由到不同轨道(Audio/Video/Screen)。停用发送后,采集和编码继续运行,但数据不会发送到远端。

7.2 API 对照

功能AndroidiOSOhos
控制流发送enableSendMediaStream(trackType, enable)enableSendMediaStream:enable:enableSendMediaStream(trackType, enable)

7.3 轨道类型枚举

枚举值数值说明
AoqTrackTypeAudio0音频轨道
AoqTrackTypeVideo1视频轨道
AoqTrackTypeData2数据轨道

8. 视频设备状态监控

8.1 功能说明

SDK 自动监测视频采集设备(摄像头)的状态变化,并通过 onVideoDeviceStateChanged 回调通知应用层。

8.2 设备状态码

状态码说明
AoqVideoDeviceNone0初始状态
AoqVideoDeviceCaptureStarting1采集启动中
AoqVideoDeviceCaptureStarted2采集已启动
AoqVideoDeviceCaptureStopping3采集停止中
AoqVideoDeviceCaptureStopped4采集已停止
AoqVideoDeviceCaptureFail5采集失败

8.3 回调对照

回调AndroidiOSOhos
设备状态变化onVideoDeviceStateChanged(state)onVideoDeviceStateChanged:onVideoDeviceStateChanged(state)

9. 视频错误码与警告码

9.1 视频错误码

错误码说明
AoqErrorCodeVideo200通用视频错误
VideoExternalBufferFull210视频外部缓冲区已满
VideoDevice220视频设备通用错误
CameraOpenFail221摄像头打开失败
CameraAuthFailed222摄像头权限被拒绝
CameraOccupied223摄像头被占用
CameraRunningError224摄像头运行错误
VideoCodec230视频编解码通用错误
EncoderInitFail231编码器初始化失败
VideoRender240视频渲染通用错误
RenderCreateFail241渲染器创建失败
RenderDrawError242渲染绘制错误
Screen300屏幕共享通用错误
Android 额外错误码:ScreenPermissionDenied(310) 屏幕共享权限被拒绝、ScreenForegroundServiceFailed(311) 前台服务启动失败。

9.2 视频警告码

警告码说明
AoqWCVideo200通用视频警告
CameraEnumerateError201摄像头枚举错误
EncoderSwitched202编码器切换警告
RenderDowngrade203渲染降级警告

附录:完整视频 API 方法列表

分类方法名说明
采集控制startVideoCapture打开视频采集设备
采集控制stopVideoCapture关闭视频采集设备
采集控制switchCamera切换前后置摄像头
渲染控制setLocalView设置本地预览窗口
渲染控制setRemoteView设置远端渲染窗口
编解码setVideoEncoderConfig设置视频编码参数
外部输入pushExternalVideoCapturedFrame推送原始视频帧
外部输入pushExternalVideoEncodedFrame推送已编码视频帧
屏幕共享startScreenCapture启动屏幕采集
屏幕共享stopScreenCapture停止屏幕采集
流控制enableSendMediaStream控制媒体流发送
帧回调setVideoFrameObserver注册视频帧观察者
帧回调enableVideoFrameObserver启用/禁用视频帧回调