擷取影片和音訊播放

應用程式可以錄製從其他應用程式播放的影片或音訊。這些 應用程式必須處理 MediaProjection 權杖 正確。本頁將說明相關做法。以及裝置管理員可以如何停用這個模組 錄製任何螢幕畫面快照,以及音訊應用程式可如何防止 幹擾其他應用程式的播放過程。

如何處理 MediaProjection 權杖

MediaProjection API 可讓應用程式取得 MediaProjection 權杖,供應用程式取得一次性存取權 擷取螢幕畫面內容或音訊Android 作業系統會要求使用者 授予應用程式權限。

作業系統會在快速設定 UI 中顯示有效的 MediaProjection 權杖,並允許使用者隨時撤銷權杖存取權。發生這種情況時 與工作階段相關聯的虛擬螢幕或音訊串流會停止接收 媒體串流。您的應用程式必須妥善回應,否則會繼續 錄製無聲音訊或影片串流。

如要處理權杖遺失的問題,請在 MediaProjection 上註冊回呼 使用 registerCallback 方法,並在偵測到 onStop 方法。

詳情請參閱「媒體投影」。

錄影

請參閱 ScreenCapture 範例應用程式,瞭解如何使用 Media Projection API 即時擷取裝置螢幕畫面,並在 SurfaceView 上顯示。

您可以使用 DevicePolicyManager 。如果是公司帳戶 (Android for Work),請參閱 管理員可以停用工作資料夾的 Google 助理資料收集功能 方法是使用 setScreenCaptureDisabled 方法。

不使用應用程式管理 Android 裝置程式碼研究室說明如何禁止螢幕截圖。

擷取音訊播放

Android 10 導入了 AudioPlaybackCapture API。這個 API 可讓應用程式複製其他應用程式播放的音訊。這項功能類似螢幕截圖,但適用於音訊。主要用途是 ,以擷取遊戲播放的音訊。

請注意,AudioPlaybackCapture API 不會影響音訊所屬應用程式的延遲時間 如畫面所示

建構擷取應用程式

基於安全和隱私考量,播放擷取功能會有一些限制。 應用程式必須符合下列條件,才能擷取音訊:

如要從其他應用程式擷取音訊,您的應用程式必須建構 AudioRecord 物件 並新增 AudioPlaybackCaptureConfiguration 先前提過 執行個體對於分配到的外部 IP 位址一無所知請按照下列步驟操作:

  1. 呼叫 AudioPlaybackCaptureConfiguration.Builder.build() 以建構 AudioPlaybackCaptureConfiguration
  2. 呼叫 setAudioPlaybackCaptureConfig,將設定傳遞至 AudioRecord

控制音訊擷取

應用程式可控管應用程式可錄製的內容類型,以及可錄製的內容 各種類型的應用程式可以錄製自己的播放

依據音訊內容限制擷取的內容

應用程式可以使用下列方法限制可擷取的音訊:

請注意,您無法使用 addMatchingUsage()excludeUsage() 方法 。只能選擇其中一項。同樣地,您無法同時使用 addMatchingUid()excludeUid()

限制其他應用程式擷取內容

您可以設定應用程式,防止其他應用程式擷取其音訊。只有在應用程式符合下列條件時,系統才能擷取應用程式產生的音訊:

用量

產生音訊的播放器必須設定音訊用途USAGE_MEDIA分享: USAGE_GAME,或 USAGE_UNKNOWN

擷取政策

玩家的拍攝政策必須 AudioAttributes.ALLOW_CAPTURE_BY_ALL、 允許其他應用程式擷取播放內容做法如下:

如果符合這些必要條件,系統就可以擷取播放器產生的任何音訊。

停用系統擷取

上述允許擷取的保護措施僅適用於應用程式。根據預設,Android 系統元件可以擷取播放內容。這些元件有許多是由 Android 供應商自訂及支援功能 例如無障礙功能和字幕因此我們建議 允許系統擷取其播放內容在極少數情況下,如果您不希望系統擷取應用程式的播放內容,請將擷取政策設為 ALLOW_CAPTURE_BY_NONE

在執行階段設定政策

您可以呼叫 AudioManager.setAllowedCapturePolicy() 來變更擷取時間 政策。如果您在呼叫方法時播放 MediaPlayer 或 AudioTrack,音訊不會受到影響。請務必先關閉再重新開啟 政策變更生效的播放器或追蹤位置。

政策 = 資訊清單 + AudioManager + AudioAttributes

由於您可在多個位置指定擷取政策,因此請務必 瞭解決定有效政策的方式 系統一律會套用限制最嚴格的擷取政策。舉例來說,如果應用程式的資訊清單包含 setAllowedCapturePolicy="false",即使 AudioManager#setAllowedCapturePolicy 設為 ALLOW_CAPTURE_BY_ALL,該應用程式也不會允許非系統應用程式擷取音訊。同樣地, AudioManager#setAllowedCapturePolicy 已設為 ALLOW_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 僅限系統 僅限系統 未擷取