動画と音声の再生のキャプチャ

アプリは、別のアプリから再生されている動画や音声を記録できます。そのような アプリは MediaProjection トークン 確認します。このページではその方法について説明します。また、デバイス管理者が画面のスナップショットを録画する機能を無効にする方法と、オーディオ アプリが他のアプリが再生するコンテンツを録画できないようにする方法についても説明します。

MediaProjection トークンを処理する方法

MediaProjection API を使用すると、アプリは MediaProjection トークンを取得できます。このトークンにより、画面のコンテンツや音声をキャプチャするための 1 回限りのアクセス権が付与されます。Android OS は、アプリにトークンを付与する前にユーザーに権限を求めます。

OS は、アクティブな MediaProjection トークンをクイック設定 UI に表示し、ユーザーはトークンへのアクセス権をいつでも取り消すことができます。この場合、 セッションに関連付けられた仮想ディスプレイや音声ストリームの受信が停止します。 ストリーミングできますアプリは適切に応答する必要があります。適切に応答しないと、処理が続行されます サイレント モードや黒い動画ストリームを録画できます。

トークンの損失を処理するには、MediaProjection にコールバックを登録します。 使用してインスタンスを registerCallback メソッドが呼び出され、 onStop メソッドが呼び出されます。

詳しくは、メディア プロジェクションをご覧ください。

動画を撮影

詳しくは、 ScreenCapture サンプルアプリ Media Projection API を使用してデバイスの SurfaceView に表示できます。

DevicePolicyManager を使用できます。 画面の録画はできません企業アカウント(Android for Work)の場合、 管理者は、仕事用プロファイルによるアシスタント データの収集を無効にできます 使用して setScreenCaptureDisabled メソッドを呼び出します。

アプリを使用しない Android デバイスの管理の Codelab では、スクリーンショットを禁止する方法について説明しています。

音声再生をキャプチャする

AudioPlaybackCapture API は Android 10 で導入されました。この API は、他のアプリで再生されている音声をコピーする機能をアプリに提供します。この機能はアナログの画面キャプチャですが、音声用です。主なユースケースは 。

AudioPlaybackCapture API は、音声を出力するアプリのレイテンシには 表示されます。

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

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

  • アプリは、 RECORD_AUDIO 付与します。
  • アプリによって表示されるプロンプトが MediaProjectionManager.createScreenCaptureIntent() ユーザーが承認する必要があります
  • キャプチャ アプリと再生アプリが同じユーザー プロファイルに含まれている必要があります。

別のアプリから音声をキャプチャするには、アプリで AudioRecord オブジェクトを作成して、AudioPlaybackCaptureConfiguration を追加する必要があります。手順:

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

音声キャプチャの制御

アプリは、録画できるコンテンツの種類と、独自の再生を録画できる他の種類のアプリを制御できます。

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

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

なお、addMatchingUsage() メソッドと excludeUsage() メソッドは使用できません。 説明します。どちらか一方のみを選択する必要があります。同様に、addMatchingUid()excludeUid() を同時に使用することはできません。

他のアプリによるキャプチャを制限する

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

使用方法

音声を生成するプレーヤーは、用途を設定する必要があります。 送信先: USAGE_MEDIAUSAGE_GAME、または USAGE_UNKNOWN を選択します。

キャプチャ ポリシー

プレーヤーのキャプチャ ポリシーが AudioAttributes.ALLOW_CAPTURE_BY_ALL である必要があります。これにより、他のアプリが再生をキャプチャできるようになります。これはさまざまな方法で設定できます。

これらの前提条件が満たされている場合は、プレーヤーで生成された音声をキャプチャできます。

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

前述したキャプチャの許可に関する保護が適用されるのはアプリのみです。Android システム コンポーネントはデフォルトで再生をキャプチャできます。これらのコンポーネントの多くは、Android ベンダーによってカスタマイズされ、機能をサポートします。 サポートするように設計されていますそのため、Google Chat で システムが再生をキャプチャできるようにします。システムにアプリの再生をキャプチャされないようにする場合は、キャプチャ ポリシーを ALLOW_CAPTURE_BY_NONE に設定してください。

実行時におけるポリシーの設定

アプリの実行中に AudioManager.setAllowedCapturePolicy() を呼び出してキャプチャ ポリシーを変更できます。MediaPlayer または AudioTrack が再生中の場合 メソッドを呼び出すとき、音声に影響はありません。いったん閉じて再度開く必要があります プレーヤーまたはトラックでポリシーの変更が有効になるように設定します。

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

キャプチャ ポリシーは複数の場所で指定できるため、有効なポリシーがどのように決定されるかを理解することが重要です。最も制限の厳しいキャプチャ ポリシーが常に適用されます。たとえば、 マニフェストに setAllowedCapturePolicy="false" が含まれていると、非システム ファイルが一切許可されなくなります。 アプリが音声をキャプチャする(AudioManager#setAllowedCapturePolicy が設定されていても) 宛先: ALLOW_CAPTURE_BY_ALL同様に AudioManager#setAllowedCapturePolicyALLOW_CAPTURE_BY_ALL に設定され、 マニフェストでは setAllowedCapturePolicy="true" が設定されていますが、メディア プレーヤーの AudioAttributes は以下でビルドされました: AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)、その後 システム以外のアプリではこのメディア プレーヤーをキャプチャできません。

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

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