擷取影片和音訊播放

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

如何處理 MediaProjection 權杖

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

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

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

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

錄影

詳情請參閱 「螢幕畫面擷取」範例應用程式 瞭解如何使用 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. 透過呼叫,將設定傳遞至 AudioRecord setAudioPlaybackCaptureConfig

控管音訊擷取

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

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

應用程式可以運用這些限制,限制能擷取的音訊 方法:

請注意,您無法使用 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#setAllowedCapturePolicyALLOW_CAPTURE_BY_ALL。同樣地, AudioManager#setAllowedCapturePolicy 已設為 ALLOW_CAPTURE_BY_ALL,且 資訊清單設定了 setAllowedCapturePolicy="true",但媒體播放器的 AudioAttributes是以 AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM),然後 非系統應用程式不支援這個媒體播放器。

下表摘要列出資訊清單屬性和 有效政策:

允許音訊播放擷取 ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true 任何應用程式 僅限系統 不擷取
false 僅限系統 僅限系統 不擷取