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

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

MediaProjection トークンの処理方法

MediaProjection API アプリが 1 回限りのアクセスを提供する MediaProjection トークンを取得できるようにします 画面上のコンテンツや音声をキャプチャできます。Android OS がユーザーに 権限を宣言する必要があります。

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

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

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

動画を撮影

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

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

Codelab アプリなしで Android デバイスの管理 スクリーンショットを禁止する方法を示しています。

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

Android 10 で AudioPlaybackCapture API が導入されました。この API 他のアプリで再生されている音声をアプリがコピーできるようにします。この 機能はスクリーン キャプチャのアナログですが、音声のみを目的としています。主なユースケースは 。

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

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

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

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

別のアプリから音声を取り込むには、アプリで AudioRecord オブジェクト 追加 AudioPlaybackCaptureConfiguration 追加できます。手順:

  1. AudioPlaybackCaptureConfiguration.Builder.build() を呼び出す 構築するための AudioPlaybackCaptureConfiguration
  2. 以下を呼び出して、構成を AudioRecord に渡します。 setAudioPlaybackCaptureConfig

音声キャプチャの制御

アプリは、記録できるコンテンツの種類や、他に記録できるコンテンツの種類、 再生を録画できます。

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

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

なお、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 システムのみ システムのみ キャプチャなし