1
votes

Utilisez ReplayKit pour enregistrer n'importe quelle application à l'écran

J'essaie de créer une application iPhone qui enregistre non seulement l'écran de l'application, mais si elle est mise en arrière-plan, elle enregistre tout sur l'écran, y compris les autres applications. C'est ainsi que fonctionne l'enregistrement depuis "Control Center". La différence est que je veux accéder à la vidéo immédiatement sans intervention de l'utilisateur, avec le consentement de l'utilisateur bien sûr.

J'ai implémenté du code à l'aide de ReplayKit2 sur iOS 12 qui utilise une extension de téléchargement de diffusion intégrée. Je n'ai trouvé aucun exemple en ligne qui fonctionne comme ça.

J'ai posté le code sur Bitbucket: https://bitbucket.org/breelig/replaykitbroadcasttofile / src / master /

La question similaire que j'ai trouvée sur SO est: ReplayKit arrête l'enregistrement d'écran en mode arrière-plan de l'application ou en dehors de l'application?

Mise à jour

Basé sur les bonnes réponses de @KaneCheshire et @AndreyA. ci-dessous et d'autres sources aléatoires, j'ai pu développer une solution qui fonctionne. Veuillez consulter le code dans mon lien BitBucket ci-dessus.


3 commentaires

Pourquoi les votes contre cela? Semble inutile sans aucune direction quant à pourquoi.


le lien bitbucket ci-dessus ne fonctionne pas - seriez-vous en mesure de partager le code d'une manière différente?


Ouais, le Bitbucket ne fonctionne pas, je ne vois pas le code. Pourriez-vous fournir une adresse github


3 Réponses :


2
votes

À partir de la documentation :

Les applications installées sur l'appareil d'un utilisateur peuvent partager la fonction d'enregistrement, avec chaque app ayant sa propre instance de RPScreenRecorder. Votre application peut enregistrer l'audio et la vidéo à l'intérieur de l'application , ainsi que les commentaires des utilisateurs par le micro

La seule autre façon d’enregistrer l’écran consiste à utiliser un Extension de téléchargement de diffusion , qui oblige l'utilisateur à l'initier via le centre de contrôle.


3 commentaires

Merci @KaneCheshire. J'utilise une extension de téléchargement de diffusion intégrée à mon application. L'application hôte charge l'extension, l'utilisateur accepte la demande d'enregistrement de l'écran et l'extension prend en charge le traitement des échantillons vidéo.


Je l'ai compris. Je dois démarrer l'enregistrement d'écran à partir du bouton "Enregistrement d'écran" du Control Center. Pour choisir mon extension de téléchargement de diffusion, je dois appuyer sur le bouton «Enregistrement d'écran» et le maintenir enfoncé jusqu'à ce qu'une liste d'extensions de diffusion apparaisse.


Ouais désolé, j'aurais pu être plus clair. Cependant, j'ai l'impression que c'est le travail d'Apple de rendre leur interface utilisateur un peu plus évidente!



1
votes

J'ai rencontré à peu près le même problème que vous et il manque absolument tout type de guide ou de documentation. La façon dont j'ai résolu ce problème à moi-même est de définir nil pour mes extensions préférées, ce qui oblige RPSystemBroadcastPickerView à les afficher toutes, y compris la capture vidéo de l'écran du système:

override func viewDidLoad() {
    super.viewDidLoad()

    let broadcastPicker = RPSystemBroadcastPickerView(frame: CGRect(x: 100, y: 100, width: 80, height: 80))
    broadcastPicker.preferredExtension = nil

    view.addSubview(broadcastPicker)
}

J'ai également trouvé une chose qui J'ai trouvé utile - cette bibliothèque Twilio et son exemple - https://github.com/twilio/video-quickstart-swift/tree/master/ReplayKitExample - Ces types ont fait un travail décent dans le domaine de la capture vidéo / audio et nous pouvons essayer d'utiliser leur expérience.


1 commentaires

Très intéressant. J'ai essayé cela, mais j'ai défini l'option favoriteExtension sur l'ID de paquet de mon extension. self.pickerView! .preferredExtension = "com.breelig.ReplayKitBroadcastToFile.BroadcastLocal" Cela envoie la vidéo à mon extension de diffusion mais il y a un bogue dans mon code qui enregistre la vidéo, ce qui la rend corrompue. Je publierai le résultat si je peux le comprendre.



0
votes

Vous pouvez trouver votre extension préférée ici:

image

Lorsque vous ajoutez pickerView.preferredExtension exactement l'identifiant du bundle, votre application sera affichée dans la liste des applications d'enregistrement. J'espère que cela vous aidera!


0 commentaires