Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

再生キャプチャ

AudioPlaybackCapture API は Android 10 で導入されました。この API を実行するアプリには、他のアプリで再生中の音声をコピーする機能が提供されます。この機能はスクリーン キャプチャに似ていますが、音声用の機能です。主に、ゲームで再生中の音声をキャプチャするストリーミング アプリで使用します。

このキャプチャ API は、音声をキャプチャされるアプリの遅延には影響しないことに注意してください。

キャプチャ アプリのビルド

前提条件

セキュリティとプライバシーを考慮して、再生キャプチャにはいくつかの制限があります。音声をキャプチャするには、アプリが次の要件を満たしている必要があります。

  • このアプリには RECORD_AUDIO パーミッションが必要です。
  • アプリは MediaProjectionManager.createScreenCaptureIntent() によって表示されるプロンプトを表示する必要があり、ユーザーはそれを承認する必要があります。
  • キャプチャ アプリと再生アプリは、同じユーザー プロファイル内になければなりません。

音声のキャプチャ

別のアプリから音声をキャプチャするには、アプリが AudioRecord オブジェクトをビルドし、それに AudioPlaybackCaptureConfiguration を追加する必要があります。以下のステップを実行してください。

  1. AudioPlaybackCaptureConfiguration.Builder.build() を呼び出して、AudioPlaybackCaptureConfiguration をビルドします。
  2. setAudioPlaybackCaptureConfig を呼び出して、ビルドした構成を AudioRecord に渡します。

音声コンテンツによるキャプチャの制限

アプリは、以下のメソッドを使用して、キャプチャできる音声を制限することができます。

addMatchingUsage() メソッドと excludeUsage() メソッドをいっしょには使用できないことに注意してください。2 つのうちどちらかを選択する必要があります。同様に、addMatchingUid()excludeUid() を同時に使用することはできません。

再生キャプチャの許可

他のアプリによって音声をキャプチャされないようにアプリを設定することができます。アプリの音声をキャプチャできるのは、そのアプリが次の要件を満たしている場合に限られます。

使用方法

音声を生成するプレーヤーで使用状況USAGE_MEDIAUSAGE_GAME、または USAGE_UNKNOWN に設定されている必要があります。

キャプチャ ポリシー

プレーヤーのキャプチャ ポリシーは AudioAttributes.ALLOW_CAPTURE_BY_ALL である必要があります。これは、他のアプリによる再生のキャプチャを許可します。これはいくつかの方法で行うことができます。

上記の前提条件が満たされている場合、そのプレーヤーが作成した音声はすべてキャプチャすることができます。

システム キャプチャの無効化

上述のキャプチャを許可する保護は、アプリにのみ適用されます。Android システム コンポーネントは、デフォルトで再生をキャプチャできます。システムのコンポーネントの多くは Android ベンダーによってカスタマイズされており、ユーザー補助機能や字幕機能などをサポートしています。そのため、システムによる再生のキャプチャをアプリで許可しておくことをお勧めします。まれなケースとして、アプリの再生をシステムがキャプチャできないようにする場合は、キャプチャ ポリシーを ALLOW_CAPTURE_BY_NONE に設定します。

実行時のポリシー設定

アプリの実行中に、AudioManager.setAllowedCapturePolicy() を呼び出して、キャプチャ ポリシーを変更することができます。このメソッドを呼び出したときに、MediaPlayer または AudioTrack が再生中であっても、音声は影響を受けません。ポリシーの変更を有効にするには、MediaPlayer または AudioTrack を一度閉じて開き直す必要があります。

ポリシー = マニフェスト + AudioManager + AudioAttributes

キャプチャ ポリシーはいくつかの場所で指定できるため、効果的なポリシーを決定する方法を理解しておくことは重要です。最も制限の厳しいキャプチャ ポリシーが常に適用されます。例えば、マニフェストに setAllowedCapturePolicy="false" を含むアプリは、AudioManager#setAllowedCapturePolicyALLOW_CAPTURE_BY_ALL に設定されている場合でも、システム以外のアプリが音声をキャプチャできないようにします。同様に、AudioManager#setAllowedCapturePolicyALLOW_CAPTURE_BY_ALL に設定されており、マニフェストに setAllowedCapturePolicy="true" が設定されていても、メディア プレーヤーの AudioAttributesAudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) でビルドされている場合、このメディア プレーヤーはシステム以外のアプリではキャプチャを行えません。

次の表に、マニフェスト属性の影響と有効なポリシーをまとめました。

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true 任意のアプリ システムのみ キャプチャなし
false システムのみ システムのみ キャプチャなし