Exemple de code iOS pour le partage d'écran

Vue d'ensemble

Ce guide explique comment utiliser le SDK iOS pour publier une vidéo de partage d'écran, en utilisant l'écran de l'appareil comme source de la vidéo du flux.

Mise en place du projet

Le code de cette section se trouve dans la section partage d'écran de la branche apprentissage-opentok-ios repoSi vous ne l'avez pas encore fait, vous devrez donc cloner le repo dans un répertoire local - Ceci peut être fait en utilisant la ligne de commande:

git clone https://github.com/opentok/learning-opentok-ios.git

Ensuite, vérifiez la branche :

git checkout screen-sharing

Cette branche vous montre comment capturer l'écran (une UIView) à l'aide d'un capteur vidéo personnalisé. Ouvrez le projet dans XCode pour le suivre.

Important : Veuillez noter que votre ID de l'application est votre Clé API.

Explorer le code

Cet exemple utilise la fonction initCapture, releaseCapture, startCapture, stopCaptureet isCaptureStarted de la classe OTVideoKit pour gérer les fonctions de capture de l'application.

La classe ViewController crée une session, instancie les abonnés et met en place l'éditeur.

La classe OTKBasicVideoCapturer crée une image, réalise une capture d'écran, marque l'image avec un horodatage et l'enregistre dans une instance de consumer.

L'éditeur accède au consommateur pour obtenir la trame.

Les initCapture est utilisée pour initialiser la capture et définit la valeur du format de pixel d'un objet OTVideoFrame. Dans cet exemple, elle est définie sur ARGB.

Les releaseCapture efface la mémoire tampon :

Les startCapture crée un thread séparé et appelle la méthode produceFrame pour lancer des captures d'écran :

Les produceFrame méthode :

  • Définit le cadre des images capturées
  • Crée un horodatage pour marquer une image capturée.
  • Effectue une capture d'écran
  • Convertit la capture d'écran en un format lisible
  • Marquer la capture d'écran d'un horodatage
  • Calcule la taille de l'image
  • Définit la consumeFrame avec l'image
  • S'appelle lui-même 15 fois par seconde une fois que la capture a commencé

Le cadre des images capturées est défini en tant qu'objet OTVideoFrame. Les propriétés de OTVideoFrame définissent les plans, l'horodatage, l'orientation et le format d'une image.

Un horodatage est créé pour marquer l'image. Chaque image est marquée d'un horodatage afin que l'éditeur et l'abonné puissent créer la même chronologie et référencer les images dans le même ordre.

La méthode screenshot est appelée pour obtenir une image de l'écran.

La méthode fillPixelBufferFromCGImage convertit les données d'une image CGI en un CVPixelBuffer.

L'image est marquée d'un horodatage et le taux de capture en images par seconde ainsi que le délai entre les captures sont définis.

Le nombre d'octets dans une seule ligne est multiplié par la hauteur de l'image pour obtenir la taille de l'image. Remarque : le tableau à élément unique et le nombre d'octets par ligne sont basés sur une spécification à 4 octets et à un seul plan d'une image RVB.

L'image est enregistrée dans une instance de consommateur. L'éditeur accède aux images capturées par l'intermédiaire de l'instance du consommateur.

La mémoire tampon des pixels est effacée et une file d'attente prioritaire en arrière-plan (distincte de la file d'attente utilisée par l'interface utilisateur) est utilisée pour capturer les images. Si la capture d'image est en cours, la fonction produceFrame s'appelle elle-même 15 fois par seconde.

Les screenshot prend une capture d'écran et renvoie une image. Cette méthode est appelée par la fonction produceFrame méthode.