

# IVS Broadcast SDK: カスタムイメージソース \| リアルタイムストリーミング
<a name="broadcast-custom-image-sources"></a>

カスタム画像入力ソースを使用することで、プリセットされたカメラに限定されるのではなく、アプリケーションが独自の画像入力を Broadcast SDK に提供できます。カスタム画像ソースは、半透明の透かしや静的な「be right back」(すぐに戻ります) シーンのようにシンプルにすることや、カメラに加工フィルターを追加するなど、アプリケーションが追加のカスタム処理を実行できるようにすることもできます。

カメラのカスタムコントロールにカスタム画像入力ソースを使用する場合 (カメラアクセスを必要とするビューティーフィルターライブラリを使用するなど)、Broadcast SDK はカメラの管理をしなくなります。代わりに、アプリケーションはカメラのライフサイクルを正しく処理する責任があります。アプリケーションがカメラをどのように管理すべきかについては、プラットフォームの公式ドキュメントを参照してください。

## Android
<a name="custom-image-sources-android"></a>

`DeviceDiscovery` セッションを作成したら、画像入力ソースを作成します。

```
CustomImageSource imageSource = deviceDiscovery.createImageInputSource(new BroadcastConfiguration.Vec2(1280, 720));
```

このメソッドは、標準の Android [Surface](https://developer.android.com/reference/android/view/Surface) に基づく画像ソースである `CustomImageSource` を返します。サブクラス `SurfaceSource` のサイズを変更したり、回転したりできます。`ImagePreviewView` を作成して、その内容のプレビューを表示することもできます。

基盤の `Surface` を取得します。

```
Surface surface = surfaceSource.getInputSurface();
```

この `Surface` は、Camera2、OpenGL ES、その他のライブラリなどの画像プロデューサーの出力バッファとして使用できます。最も簡単なユースケースは、静的なビットマップまたは色を Surface のキャンバスに直接描画することです。ただし、多くのライブラリ (加工フィルターライブラリなど) には、レンダリングする外部 `Surface` をアプリケーションで指定できるメソッドが用意されています。このようなメソッドを使用して、この `Surface` をフィルターライブラリに渡すことができます。これによりライブラリは、ストリーミングするブロードキャストセッションに、処理されたフレームを出力できます。

この `CustomImageSource`は `LocalStageStream` でラップすることができ、`StageStrategy` によって返されて `Stage` に公開されます。

## iOS
<a name="custom-image-sources-ios"></a>

`DeviceDiscovery` セッションを作成したら、画像入力ソースを作成します。

```
let customSource = broadcastSession.createImageSource(withName: "customSourceName")
```

このメソッドは、アプリケーションが手動で `CMSampleBuffers` を送信できるようにする画像ソースである `IVSCustomImageSource` を返します。サポートされているピクセル形式については、「iOS ブロードキャスト SDK リファレンス」を参照してください。最新バージョンへのリンクは、最新のブロードキャスト SDK リリースの「[Amazon IVS リリースノート](release-notes.md)」にあります。

カスタムソースに送信されたサンプルは、次のステージでストリーミングされます。

```
customSource.onSampleBuffer(sampleBuffer)
```

動画のストリーミングには、このメソッドをコールバックで使用します。例えば、カメラを使用している場合、`AVCaptureSession` から新しいサンプルバッファを受信するたびに、アプリケーションはサンプルバッファをカスタム画像ソースに転送できます。必要に応じて、カスタム画像ソースにサンプルを送信する前に、アプリケーションでさらなる処理 (加工フィルターなど) を適用できます。

`IVSCustomImageSource` は `IVSLocalStageStream` でラップすることができ、`IVSStageStrategy` によって返されて `Stage` に公開されます。