Capturer la lecture vidéo et audio

Une application peut enregistrer la vidéo ou l'audio lus à partir d'une autre application. Ces applications doivent gérer correctement le jeton MediaProjection. Cette page explique comment procéder. Il montre également comment un administrateur d'appareil peut désactiver la possibilité d'enregistrer des captures d'écran et comment une application audio peut empêcher d'autres applications d'enregistrer le contenu qu'elle lit.

Gérer un jeton MediaProjection

L'API MediaProjection permet aux applications d'acquérir un jeton MediaProjection qui leur donne un accès unique pour capturer le contenu de l'écran ou l'audio. L'OS Android demande à l'utilisateur son autorisation avant d'accorder le jeton à votre application.

L'OS affiche les jetons MediaProjection actifs dans l'interface utilisateur des Réglages rapides. permet aux utilisateurs de retirer l'accès à un jeton à tout moment. Dans ce cas, des écrans virtuels ou des flux audio associés à la session cessent de recevoir des flux multimédias. Votre application doit répondre de manière appropriée, sinon elle continuera d'enregistrer un silence audio ou un flux vidéo noir.

Pour gérer la perte d'un jeton, enregistrez un rappel sur le MediaProjection. à l'aide de la méthode registerCallback , puis arrêtez l'enregistrement lorsque onStop est appelée.

Pour en savoir plus, consultez la section Projection multimédia.

Enregistrer une vidéo

Consultez le Application exemple ScreenCapture pour apprendre à utiliser l'API Media Projection pour capturer l'activité à l'écran en temps réel et l'afficher sur une SurfaceView.

Vous pouvez utiliser le DevicePolicyManager pour empêcher l'enregistrement de l'écran. Pour les comptes d'entreprise (Android for Work), l'administrateur peut désactiver la collecte des données de l'assistant pour le profil professionnel à l'aide de la méthode setScreenCaptureDisabled.

L'atelier de programmation Gérer des appareils Android sans application montre comment interdire les captures d'écran.

Enregistrer la lecture audio

L'API AudioPlaybackCapture a été introduite dans Android 10. Cette API permet aux applications de copier l'audio lu par d'autres applications. Ce est l'équivalent de la capture d'écran, mais pour l'audio. Le cas d'utilisation principal pour les applications de streaming qui souhaitent enregistrer le son des jeux.

Notez que l'API AudioPlaybackCapture n'affecte pas la latence de l'application dont le contenu audio est en cours de capture.

Créer une application de capture

Pour des raisons de sécurité et de confidentialité, la capture vidéo impose certaines limites. Pour pouvoir capturer de l'audio, une application doit répondre aux exigences suivantes :

Pour enregistrer du contenu audio à partir d'une autre application, celle-ci doit créer un Objet AudioRecord et ajoutez AudioPlaybackCaptureConfiguration avec lui. Procédez comme suit :

  1. Appelez AudioPlaybackCaptureConfiguration.Builder.build() pour créer un AudioPlaybackCaptureConfiguration.
  2. Transmettez la configuration à AudioRecord en appelant setAudioPlaybackCaptureConfig

Contrôler la capture audio

Votre application peut contrôler les types de contenus qu'elle peut enregistrer et les autres d'applications peuvent enregistrer leur propre lecture.

Limiter la capture par contenu audio

Une application peut limiter les contenus audio qu'elle peut capturer à l'aide des méthodes suivantes :

Notez que vous ne pouvez pas utiliser les méthodes addMatchingUsage() et excludeUsage() ensemble. Vous devez choisir l'une ou l'autre. De même, vous ne pouvez pas utiliser addMatchingUid() et excludeUid(). en même temps.

Limiter la capture par d'autres applications

Vous pouvez configurer une application pour empêcher d'autres applications de capturer son contenu audio. Le contenu audio provenant d'une application ne peut être enregistré que si celle-ci répond aux exigences suivantes:

Utilisation

Le lecteur qui produit le contenu audio doit définir son utilisation. à USAGE_MEDIA, USAGE_GAME ou USAGE_UNKNOWN

Règle de capture

La stratégie de capture du lecteur doit être AudioAttributes.ALLOW_CAPTURE_BY_ALL, ce qui permet à d'autres applications de capturer la lecture. Pour ce faire, vous pouvez procéder de plusieurs manières :

Si ces conditions préalables sont remplies, tout son produit par le lecteur peut être capturé.

Désactiver la capture du système

Les protections permettant la capture décrites ci-dessus ne s'appliquent qu'aux applications. Android les composants système peuvent capturer la lecture par défaut. Bon nombre de ces composants sont personnalisés par les fournisseurs Android et proposent des fonctionnalités de prise en charge comme l'accessibilité et le sous-titrage. C'est pourquoi nous vous recommandons de permettre au système de capturer la lecture des applications. Dans les rares cas où vous ne souhaitez pas que le système capture la lecture de votre application, définissez la stratégie de capture sur ALLOW_CAPTURE_BY_NONE.

Définir une règle au moment de l'exécution

Vous pouvez appeler AudioManager.setAllowedCapturePolicy() pour modifier la stratégie de capture pendant l'exécution d'une application. Si un MediaPlayer ou un AudioTrack est en cours de lecture lorsque vous appelez la méthode, l'audio n'est pas affecté. Vous devez fermer et rouvrir pour que la modification de la règle prenne effet.

Règle = fichier manifeste + AudioManager + AudioAttributes

La règle de capture pouvant être spécifiée à plusieurs endroits, il est important pour comprendre comment la règle en vigueur est déterminée. La règle de capture la plus restrictive est toujours appliquée. Par exemple, une application dont le fichier manifeste inclut setAllowedCapturePolicy="false" n'autorisera jamais applis pour enregistrer le son, même si AudioManager#setAllowedCapturePolicy est défini à ALLOW_CAPTURE_BY_ALL. De même, si le AudioManager#setAllowedCapturePolicy est défini sur ALLOW_CAPTURE_BY_ALL, et le fichier manifeste définit setAllowedCapturePolicy="true", mais la fonction AudioAttributes ont été construits avec AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), puis ce lecteur multimédia ne pourra pas être capturé par des applications autres que le système.

Le tableau ci-dessous récapitule l'effet de l'attribut du fichier manifeste et de la stratégie en vigueur :

allowAudioPlaybackCapture AUTORISER_TOUT_CAPTURE_PAR_TOUT AUTORISER_CAPTURE_PAR_SYSTÈME AUTORISER_CAPTURE_BY_NONE
vrai n'importe quelle application système uniquement aucune capture
faux système uniquement système uniquement aucune capture