このページは SDK 2.0.0 に対応します。メイク / リシェイプ列挙: パラメータ列挙。
正しいフレームタイプを選ぶ
processImage: の前に FBImageFrame.type を設定します。エンジンメソッドに独立した処理モード引数はありません。
FBFrameTypeVideo(1): カメラプレビュー、ライブ配信、通話。遅延が低い。FBFrameTypeImage(0): 静止画。効果が高い。
大きな静止画(プレビューと書き出し)
高解像度の静止画では、スライダーのたびに原寸をprocessImage: に渡さないでください。縮小したあとに原画を捨てないでください。
写真を開いたら完全な UIImage を残し、プレビュー用フレームを 1 枚作ります(長辺は約 1280–1440、createWithUIImage:)。パラメータ調整はプレビュー(FBFrameTypeImage)、書き出しは同じ setter で全サイズをもう一度処理します。出力サイズは入力と同じです。カメラプレビューはキャプチャ解像度 + FBFrameTypeVideo のままです。
パラメータ範囲
- 美肌 / メイク / フィルター強度:
[0.0, 1.0]。0はその項目をオフにします。 - リシェイプ(
setReshape:intensity:):[-1.0, 1.0]。0はオフ。正負は逆方向です。
1 つのエンジン、1 つのシリアルキュー
createEngineWithConfig: が返すのはインスタンスであり、プロセス単位のシングルトンではありません。セッションごとにエンジンを 1 つ保持し、シリアルキュー上で呼び出します(externalContext = YES の場合は GL スレッド)。
メモリ
- ARC を使い、使い終わった
FBImageFrameはnilにします。 - カメラがすでに NV12 / BGRA の場合、毎フレーム RGBA へ変換しないでください。
- フィルターとステッカーのテクスチャは、次の
processImage:(GL スレッド)で作成されます。毎フレームsetFilter:/setSticker:せず、強度はsetFilterIntensity:で変えます。 clearFilter、clearSticker、clearVirtualBackground、clearChromaKeyを使い、別エンジンを作らないでください。
外部 OpenGL ES
アプリがすでに GL コンテキストを持っている場合:config.externalContext = YESを設定します。- その GL スレッドでエンジンを作成します。
createWithTexture:width:height:stride:でテクスチャをラップします。- 出力は
[output texture]を使います。
getStats で監視
独自タイマーより FBEngineStats を優先してください。
avgProcessTimeMs は約 33 ms 未満が望ましいです。高い場合は解像度を下げ、FBFrameTypeVideo を使うか、不要なメイク / ステッカーをオフにします。
ライフサイクル
エンジンは ViewController(またはセッションオブジェクト)の strong プロパティで保持します。セッション終了時はdealloc で nil にします。viewWillDisappear / applicationDidEnterBackground でキャプチャを止め、processImage: の呼び出しを止めます。専用の pause API はありません。
FBEngineCallbacks の block では __weak を使い、循環参照を避けます。
iOS キャプチャ
- プレビューは多くが NV12 または BGRA です。
createWithNV12:.../createWithBGRA:...を使います。 - フロントカメラ: フレームに
setMirror:@"horizontal"(ピクセルを先に反転する必要がある場合はmirror:)。 - カメラ権限:
Info.plistのNSCameraUsageDescription。フォトライブラリ:NSPhotoLibraryUsageDescription。
テスト
- テストアプリの Bundle ID をバインドし、実際の
appId/appKeyまたはlicenseTokenを使います。プレースホルダ文字列は認証イベント1/101を引き起こします。 - 静止画(
FBFrameTypeImage+createWithUIImage:)とリアルタイム(FBFrameTypeVideo)の両方をカバーします。 - setter が
FBErrorCode_Successを返すことをアサートします。

