IVS Broadcast SDK: カスタム画像ソース | Low-Latency Streaming - Amazon IVS

IVS Broadcast SDK: カスタム画像ソース | Low-Latency Streaming

このガイドは、ブロードキャストセッション (AndroidiOS) のセットアップ方法とミキサー API の使用方法に既に精通していることを前提としています。

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

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

Android

ブロードキャストセッションを作成したら、画像入力ソースを作成します。

SurfaceSource surfaceSource = broadcastSession.createImageInputSource();

このメソッドは、標準の Android Surface に基づく画像ソースである SurfaceSource を返します。ブロードキャストセッションに自動的にアタッチされるため、後で attachDevice(...) メソッドを使用する必要はありません。ただし、SurfaceSource はスロットにバインドする必要があります。これについては、後で説明します。SurfaceSource のサイズを変更したり、回転したりできます。ImagePreviewView を作成して、その内容のプレビューを表示することもできます。

基盤の Surface を取得します。

Surface surface = surfaceSource.getInputSurface();

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

最後に、SurfaceSource は、ブロードキャストセッションによってストリーミングされるためには、Mixer.Slot にバインドされる必要があります。

broadcastSession.getMixer().bind(surfaceSource, "customSlot");

Android サンプルコードには、さまざまな方法でカスタム画像ソースを使用するいくつかの例があります。

  • 半透明の透かしが MixerActivity に追加されます。

  • MP4 ファイルは MixerActivity でループされます。

  • CameraManager ユーティリティクラスは、CustomActivity の Camera2 メソッドを使用してデバイスのカメラのカスタム管理を行います。これは、単純なセピアフィルターを適用します。この例は、カメラを管理し、ブロードキャストセッションのカスタム SurfaceSource をカメラキャプチャリクエストに渡す方法を示しているため、特に役立ちます。他の外部ライブラリを使用する場合は、ブロードキャストセッションによって提供される Android Surface に出力するようにライブラリを設定する方法に関するドキュメントに従ってください。

iOS

ブロードキャストセッションを作成したら、画像入力ソースを作成します。

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

このメソッドは、アプリケーションが手動で CMSampleBuffers を送信できるようにする画像ソースである IVSCustomImageSource を返します。サポートされているピクセル形式については、「iOS ブロードキャスト SDK リファレンス」を参照してください。最新バージョンへのリンクは、最新のブロードキャスト SDK リリースの「Amazon IVS リリースノート」にあります。ソースはブロードキャストセッションに自動的にアタッチされないため、ソースがストリーミングされる前に、画像ソースをセッションにアタッチし、スロットにバインドする必要があります。

broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)

カスタムソースがアタッチされてバインドされた後、アプリケーションはカスタムソースに直接 CMSampleBuffers を送信できます。onComplete コールバックを使用して開始することもできます。

カスタムソースに送信されたサンプルは、ブロードキャストセッションでストリーミングされます。

customSource.onSampleBuffer(sampleBuffer)

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

静的画像については、カスタム画像ソースのスロットバインディングが変更された場合、またはソースがデタッチされてブロードキャストセッションに再アタッチされた場合、最初のサンプルの後、アプリケーションはサンプルを再送信する必要があります。例えば、スロットをミキサーから削除してから、そのミキサーにスロットを追加する場合は、サンプルを再送信する必要があります。

iOS サンプルアプリケーションには、さまざまな方法でカスタム画像ソースを使用するいくつかの例があります。

  • 半透明の透かしが MixerViewController に追加されます。

  • MP4 ファイルは MixerViewController でループされます。

  • デバイスのカメラによる CIFilter 実装は、CustomSourcesViewController に追加されました。これにより、アプリケーションは Amazon IVS Broadcast SDK とは独立してデバイスのカメラを管理できます。AVCaptureSession を使用してデバイスのカメラから画像をキャプチャし、CIFilter 実装を使用して画像を処理し、ライブストリーミング用に CMSampleBufferscustomSource に送信します。