AOQ Client SDK は、ビデオキャプチャ、レンダリング、コーデック設定、フレームデータコールバック、外部ビデオ入力を含む包括的なビデオ機能を提供します。このドキュメントでは、Android (Java)、iOS (Objective-C)、HarmonyOS (ArkTS) に共通するビデオ機能を紹介します。
1. ビデオキャプチャ
1.1 概要
ビデオキャプチャは、デバイスのカメラを起動し、リアルタイムのビデオフレームを SDK のエンコーディングパイプラインに供給します。SDK は 2 つのキャプチャモードをサポートしています。
- 内部キャプチャ (デフォルト):SDK がカメラの起動、フレームのキャプチャ、終了を自動的に管理します。前面カメラと背面カメラの切り替えをサポートしています。
- 外部キャプチャ:アプリケーションがカメラまたは他のビデオソースを管理します。キャプチャされたフレームは
pushExternalVideoCapturedFrameを介して SDK に供給されます。
1.2 キャプチャ設定パラメーター
パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
width | int | 1280 | キャプチャの幅 (ピクセル)。外部キャプチャモードでは使用されません。 |
height | int | 720 | キャプチャの高さ (ピクセル)。外部キャプチャモードでは使用されません。 |
fps | int | 15 | キャプチャのフレームレート。外部キャプチャモードでは、フレームレートはフレームがプッシュされる速度によって決まります。 |
isExternal | bool | false | 外部キャプチャモードを使用するかどうか。 |
cameraDirection | AoqCameraDirection | Front (0) | カメラの向き。外部キャプチャモードでは使用されません。 |
1.3 カメラの向きの列挙型
列挙値 | 数値 | 説明 |
|---|---|---|
AoqCameraDirectionFront | 0 | 前面カメラ |
AoqCameraDirectionBack | 1 | 背面カメラ |
1.4 API リファレンス
関数 | Android | iOS | HarmonyOS |
|---|---|---|---|
キャプチャの開始 | startVideoCapture(config) | startVideoCapture: | startVideoCapture(config) |
キャプチャの停止 | stopVideoCapture() | stopVideoCapture | stopVideoCapture() |
カメラの切り替え | switchCamera(direction) | switchCamera: | switchCamera(direction) |
1.5 例
AndroidAoqVideoCaptureConfig config = new AoqVideoCaptureConfig();
config.width = 1280;
config.height = 720;
config.fps = 15;
config.cameraDirection = AoqCameraDirection.AoqCameraDirectionFront;
engine.startVideoCapture(config);
iOS
AoqVideoCaptureConfig *config = [[AoqVideoCaptureConfig alloc] init];
config.width = 1280;
config.height = 720;
config.fps = 15;
config.cameraDirection = AoqCameraDirectionFront;
[engine startVideoCapture:config];
HarmonyOS
let config: AoqVideoCaptureConfig = {
width: 1280,
height: 720,
fps: 15,
cameraDirection: AoqCameraDirection.AoqCameraDirectionFront
};
engine.startVideoCapture(config);
2. ビデオレンダリング
2.1 概要
ビデオレンダリングは、ローカルでキャプチャした、またはリモートで受信したビデオフレームを画面に表示します。SDK は、ローカルプレビューウィンドウとリモートレンダリングウィンドウの設定をサポートしています。trackType を使用して、ビデオストリーム (Video) と画面共有ストリーム (Screen) を区別します。
2.2 レンダリングモード
Enum 値 | 数値 | 説明 |
|---|---|---|
AoqRenderModeAuto | 0 | 自動モード |
AoqRenderModeStretch | 1 | ストレッチフィル。画像が変形する場合があります。 |
AoqRenderModeFill | 2 | フィット (レターボックス)。画像全体が表示されます。 |
AoqRenderModeCrop | 3 | クロップモード。画像の一部が切り取られる場合があります。 |
2.3 Canvas 設定
パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
view | Platform view | null | レンダリングビュー。Android:SurfaceView または TextureView。iOS:UIView。HarmonyOS:XComponent。 |
renderMode | AoqRenderMode | Auto (0) | レンダリング表示モード |
2.4 API リファレンス
関数 | Android | iOS | HarmonyOS |
|---|---|---|---|
ローカルプレビューの設定 | setLocalView(trackType, canvas) | setLocalView:trackType:canvas: | setLocalView(trackType, canvas) |
リモートビューの設定 | setRemoteView(uid, trackType, canvas) | setRemoteView:uid:trackType:canvas: | setRemoteView(uid, trackType, canvas) |
注記プラットフォームによる違い:Android は、レンダリングコンテナとして SurfaceView または TextureView を使用します。iOS は UIView (AoqRenderView で内部的にラップされ、Metal によるアクセラレーションが使用されます) を使用します。HarmonyOS は XComponent (ネイティブレンダリング用に AoqXComponentController で管理されます) を使用します。
3. ビデオコーデック設定
3.1 概要
エンコード形式、解像度、フレームレート、ビットレート、キーフレーム間隔、ミラーリング、向きなどのビデオエンコーディングパラメーターを設定します。trackType を使用して、ビデオトラックと画面共有トラックに異なるエンコーディング設定を適用します。
3.2 エンコード設定パラメーター
パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
trackType | AoqTrackType | AoqTrackTypeVideo | トラックタイプ |
codecType | AoqEncoderType | AoqEncoderTypeVideoH264 | エンコード形式 |
width | int | 720 | エンコード幅 |
height | int | 1280 | エンコード高さ |
fps | int | 5 | エンコードフレームレート |
bitrate | int | 500000 | ターゲットビットレート (bps) |
minBitrate | int | 128000 | 最小ビットレート (bps) |
keyframeInterval | int | 2 | キーフレーム間隔 (秒) |
mirrorMode | AoqMirrorMode | AoqMirrorModeDisabled | ミラーモード |
orientationMode | AoqOrientationMode | AoqOrientationModeAuto | 向きモード |
isExternal | bool | false | 外部エンコードモード。true の場合、アプリケーションはエンコード済みのフレームをプッシュします。 |
3.3 エンコード形式の列挙型
列挙値 | 数値 | 説明 |
|---|---|---|
AoqEncoderTypeVideoH264 | 3 | H.264 エンコーディング |
AoqEncoderTypeVideoJpeg | 4 | JPEG エンコーディング (エンコード済みの外部フレーム用) |
3.4 ミラーモード
列挙値 | 数値 | 説明 |
|---|---|---|
AoqMirrorModeDisabled | 0 | ミラーリング無効 |
AoqMirrorModeEnabled | 1 | ミラーリング有効 |
3.5 向きモード
列挙値 | 数値 | 説明 |
|---|---|---|
AoqOrientationModeAuto | 0 | 自動 |
AoqOrientationModePortrait | 1 | 縦向き |
AoqOrientationModeLandscape | 2 | 横向き |
3.6 関連 API
関数 | Android | iOS | HarmonyOS |
|---|---|---|---|
エンコード設定の指定 | setVideoEncoderConfig (config) | setVideoEncoderConfig: | setVideoEncoderConfig (config) |
4. 外部ビデオフレーム入力
4.1 概要
外部ビデオフレーム入力を使用すると、アプリケーションはカスタムビデオフレームデータを SDK にプッシュし、外部キャプチャまたは外部エンコードのシナリオに対応できます。2 つのプッシュ方法に対応しています:
- RAW フレームのプッシュ:エンコードされていないピクセルデータ (I420、NV12、NV21、BGRA、RGBA などの形式) を SDK にプッシュします。SDK はデータをエンコードします。
- エンコード済みフレームのプッシュ:エンコード済みのデータ (例:JPEG) を SDK に直接プッシュします。SDK は再エンコードせずにパッケージ化して送信します。
ルーティングは trackType によって制御されます。AoqTrackTypeVideo はビデオキャプチャトラックにルーティングされ、AoqTrackTypeScreen は画面共有トラックにルーティングされます。
4.2 ピクセル形式の列挙型
列挙値 | 数値 | 説明 | 対応プラットフォーム |
|---|---|---|---|
AoqVideoPixelFormatI420 | 1 | I420 トライプレーナ | すべてのプラットフォーム |
AoqVideoPixelFormatNV12 | 2 | NV12 バイプレーナ | すべてのプラットフォーム |
AoqVideoPixelFormatNV21 | 3 | NV21 バイプレーナ | すべてのプラットフォーム |
AoqVideoPixelFormatBGRA | 4 | BGRA パック | すべてのプラットフォーム |
AoqVideoPixelFormatRGBA | 5 | RGBA パック | すべてのプラットフォーム |
AoqVideoPixelFormatCVPixelBuffer | 6 | Apple ゼロコピー | iOS のみ |
AoqVideoPixelFormatTextureOES | 7 | OES テクスチャ | Android のみ |
AoqVideoPixelFormatTexture2D | 8 | 2D テクスチャ | Android のみ |
4.3 RAW ビデオフレームのデータ構造 (AoqVideoFrame)
フィールド | タイプ | 説明 |
|---|---|---|
format | AoqVideoPixelFormat | ピクセル形式 |
width | int | 幅 (ピクセル単位) |
height | int | 高さ (ピクセル単位) |
data | byte[] / ArrayBuffer | パック形式のデータ (NV12/NV21/BGRA/RGBA) |
dataY / dataU / dataV | byte[] / ArrayBuffer | I420 トライプレーナデータ |
strideY / strideU / strideV | int | I420 トライプレーナのストライド |
textureId | int | テクスチャ ID (Android の TextureOES/Texture2D で有効) |
transformMatrix | float[16] | 4×4 テクスチャ変換行列 (Android) |
eglContext | EGLContext | 共有 EGL コンテキスト (Android) |
pixelBuffer | CVPixelBufferRef | Apple ゼロコピー (iOS) |
timeStamp | long | タイムスタンプ (ミリ秒単位)。0 の場合、SDK はローカルクロックを使用します。 |
4.4 エンコード済みビデオフレームのデータ構造 (AoqVideoEncodedFrame)
フィールド | タイプ | デフォルト | 説明 |
|---|---|---|---|
codec | AoqVideoCodecType | JPEG (0) | エンコーディング形式 |
data | byte[] / ArrayBuffer | - | エンコード済みデータ |
width | int | - | 幅 (ピクセル単位) |
height | int | - | 高さ (ピクセル単位) |
timeStamp | long | 0 | タイムスタンプ (ミリ秒単位)。0 の場合、SDK はローカルクロックを使用します。 |
4.5 API リファレンス
関数 | Android | iOS | HarmonyOS |
|---|---|---|---|
RAW フレームのプッシュ | pushExternalVideoCapturedFrame(trackType, frame) | pushExternalVideoCapturedFrame:frame: | pushExternalVideoCapturedFrame(trackType, frame) |
エンコード済みフレームのプッシュ | pushExternalVideoEncodedFrame(trackType, frame) | pushExternalVideoEncodedFrame:frame: | pushExternalVideoEncodedFrame(trackType, frame) |
5. ビデオフレームコールバック
5.1 概要
ビデオフレームコールバックを使用すると、ビデオパイプラインの異なるポイントで RAW フレームデータを取得し、ビデオ分析、カスタム処理、録画などのシナリオで使用できます。読み取り専用モードと読み書きモードの両方をサポートしています。読み書きモードでは、フレームデータを変更して SDK に書き戻すことができます。
5.2 対応データソース位置
データソース | 列挙値 | 説明 |
|---|---|---|
Captured | 0 | キャプチャ後、前処理前のビデオデータ |
PreEncode | 1 | エンコーディング前、前処理後のビデオデータ |
Remote | 2 | デコーディング後、レンダリング前のリモートビデオデータ |
5.3 コールバック設定パラメーター
パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
format | AoqVideoPixelFormat | I420 (1) | コールバックデータのピクセルフォーマット |
alignment | AoqVideoObserverAlignment | Default (0) | 幅アラインメントポリシー |
mode | AoqVideoObserverMode | ReadOnly (0) | 読み取り専用 (0) または読み書き (1) モード |
mirrorApplied | bool | false | コールバックデータにミラーリングを適用するかどうか |
5.4 幅アラインメント列挙値
列挙値 | 数値 | 説明 |
|---|---|---|
AoqVideoObserverAlignmentDefault | 0 | デフォルトアラインメント |
AoqVideoObserverAlignmentEven | 1 | 2 バイトアラインメント |
AoqVideoObserverAlignment4 | 2 | 4 バイトアラインメント |
AoqVideoObserverAlignment8 | 3 | 8 バイトアラインメント |
AoqVideoObserverAlignment16 | 4 | 16 バイトアラインメント |
5.5 使用手順
- オブザーバーを登録:
setVideoFrameObserverを呼び出して、ビデオフレームコールバックリスナーを設定します。 - データソースを有効化:
enableVideoFrameObserverを呼び出して、データソース 位置を選択し、コールバックを開始します。 - コールバックデータを処理: コールバック内でフレームデータを取得します。フレームデータはコールバック中のみ有効です。非同期に使用する場合はコピーしてください。
5.6 API リファレンス
機能 | Android | iOS | HarmonyOS |
|---|---|---|---|
オブザーバーを登録 | setVideoFrameObserver(listener) | setVideoFrameObserver: | setVideoFrameObserver(observer) |
コールバックを有効化 | enableVideoFrameObserver(enabled, source, config) | enableVideoFrameObserver:videoSource:config: | enableVideoFrameObserver(enabled, source, config) |
5.7 コールバックメソッド
コールバック | Android | iOS | HarmonyOS |
|---|---|---|---|
キャプチャデータ | onCapturedVideoFrame(frame) | onCapturedVideoFrame: | onCapturedVideoFrame(frame) |
エンコード前データ | onPreEncodeVideoFrame(trackType, frame) | onPreEncodeVideoFrame:frame: | onPreEncodeVideoFrame(trackType, frame) |
リモートデータ | onRemoteVideoFrame(trackType, frame) | onRemoteVideoFrame:frame: | onRemoteVideoFrame(trackType, frame) |
注記コールバックから true または YES を返すと、データが変更されたものとして SDK に書き戻されます。この動作は、I420 形式の読み書きモードでのみ適用されます。
7. メディアストリームの送信制御
7.1 概要
ローカルメディアストリームの送信を制御します。trackType を使用して、特定のトラック (オーディオ、ビデオ、またはデータ) を対象とします。送信が無効の場合、キャプチャとエンコーディングは継続しますが、データはリモートエンドには送信されません。
7.2 API リファレンス
関数 | Android | iOS | HarmonyOS |
|---|---|---|---|
ストリーム送信の制御 | enableSendMediaStream(trackType, enable) | enableSendMediaStream:enable: | enableSendMediaStream(trackType, enable) |
7.3 トラックタイプの列挙型
列挙値 | 数値 | 説明 |
|---|---|---|
AoqTrackTypeAudio | 0 | オーディオトラック |
AoqTrackTypeVideo | 1 | ビデオトラック |
AoqTrackTypeData | 2 | データトラック |
8. ビデオデバイス状態のモニタリング
8.1 概要
SDK は自動的にカメラの状態変化をモニタリングし、onVideoDeviceStateChanged コールバックを介してアプリケーション層に通知します。
8.2 デバイス状態コード
状態コード | 値 | 説明 |
|---|---|---|
AoqVideoDeviceNone | 0 | 初期状態 |
AoqVideoDeviceCaptureStarting | 1 | キャプチャ開始中 |
AoqVideoDeviceCaptureStarted | 2 | キャプチャ開始済み |
AoqVideoDeviceCaptureStopping | 3 | キャプチャ停止中 |
AoqVideoDeviceCaptureStopped | 4 | キャプチャ停止済み |
AoqVideoDeviceCaptureFail | 5 | キャプチャ失敗 |
8.3 コールバックリファレンス
コールバック | Android | iOS | HarmonyOS |
|---|---|---|---|
デバイス状態の変更 | onVideoDeviceStateChanged(state) | onVideoDeviceStateChanged: | onVideoDeviceStateChanged(state) |
9. ビデオのエラーコードと警告コード
9.1 ビデオのエラーコード
エラーコード | 値 | 説明 |
|---|---|---|
AoqErrorCodeVideo | 200 | 全般的なビデオエラー |
VideoExternalBufferFull | 210 | ビデオ外部バッファーが満杯 |
VideoDevice | 220 | 全般的なビデオデバイスのエラー |
CameraOpenFail | 221 | カメラのオープンに失敗 |
CameraAuthFailed | 222 | カメラの権限が拒否されました |
CameraOccupied | 223 | カメラは他のプロセスで使用中です |
CameraRunningError | 224 | カメラの実行時エラー |
VideoCodec | 230 | 全般的なビデオコーデックのエラー |
EncoderInitFail | 231 | エンコーダーの初期化に失敗 |
VideoRender | 240 | 全般的なビデオレンダリングのエラー |
RenderCreateFail | 241 | レンダラーの作成に失敗 |
RenderDrawError | 242 | レンダリングの描画エラー |
Screen | 300 | 全般的な画面共有のエラー |
注記Android の追加エラーコード: ScreenPermissionDenied(310) — 画面共有の権限が拒否されました。 ScreenForegroundServiceFailed(311) — フォアグラウンド サービス の開始に失敗しました。
9.2 ビデオの警告コード
警告コード | 値 | 説明 |
|---|---|---|
AoqWCVideo | 200 | 全般的なビデオの警告 |
CameraEnumerateError | 201 | カメラの列挙エラー |
EncoderSwitched | 202 | エンコーダーの切り替え警告 |
RenderDowngrade | 203 | レンダラーのダウングレード警告 |
付録:ビデオ API メソッド一覧
カテゴリ | メソッド | 説明 |
|---|---|---|
キャプチャコントロール | startVideoCapture | ビデオキャプチャデバイスを開きます |
キャプチャコントロール | stopVideoCapture | ビデオキャプチャデバイスを閉じます |
キャプチャコントロール | switchCamera | 前面カメラと背面カメラを切り替えます |
レンダリングコントロール | setLocalView | ローカルプレビューウィンドウを設定します |
レンダリングコントロール | setRemoteView | リモートレンダリングウィンドウを設定します |
コーデック | setVideoEncoderConfig | ビデオエンコーディングパラメーターを設定します |
外部入力 | pushExternalVideoCapturedFrame | RAW ビデオフレームをプッシュします |
外部入力 | pushExternalVideoEncodedFrame | エンコード済みビデオフレームをプッシュします |
画面共有 | startScreenCapture | 画面キャプチャを開始します |
画面共有 | stopScreenCapture | 画面キャプチャを停止します |
ストリームコントロール | enableSendMediaStream | メディアストリームの送信を制御します |
フレームコールバック | setVideoFrameObserver | ビデオフレームオブザーバーを登録します |
フレームコールバック | enableVideoFrameObserver | ビデオフレームコールバックを有効化または無効化します |