Intégrer des vidéos YouTube dans des applications iOS avec la bibliothèque d'aide YouTube

youtube-ios-player-helper est une bibliothèque Open Source qui vous aide à intégrer un lecteur iFrame YouTube dans une application iOS. La bibliothèque crée un WebView et fait le lien entre le code Objective-C de votre application et le code JavaScript du lecteur YouTube, ce qui permet à l'application iOS de contrôler le lecteur YouTube. Cet article décrit la procédure à suivre pour installer la bibliothèque et commencer à l'utiliser depuis votre application iOS.

Installation

Cet article suppose que vous avez créé un projet iOS d'application Single View ciblant la dernière version d'iOS et que vous ajoutez les fichiers suivants lors de la création du projet:

  • Main.storyboard
  • ViewController.h
  • ViewController.m

Vous pouvez installer la bibliothèque via CocoaPods ou en copiant les fichiers source et de bibliothèque depuis la page GitHub du projet.

  • La bibliothèque peut être installée via CocoaPods. Les fichiers source et de bibliothèque sont également disponibles sur la page GitHub du projet et peuvent être copiés dans un projet existant.

Installer la bibliothèque via CocoaPods

Si votre projet utilise CocoaPods, ajoutez la ligne ci-dessous à votre Podfile pour installer la bibliothèque. Sur cette ligne, remplacez x.y.z par la dernière version du pod, qui sera identifiée sur la page GitHub du projet.

pod "youtube-ios-player-helper", "~> x.y.z"

Lorsque l'invite de ligne de commande s'affiche, saisissez pod install pour mettre à jour votre espace de travail avec les dépendances.

Conseil: N'oubliez pas que lorsque vous utilisez CocoaPods, vous devez ouvrir le fichier .xcworkspace dans Xcode, et non le fichier .xcodeproj.

Pour en savoir plus, consultez le tutoriel CocoaPods.

Installer manuellement la bibliothèque

Pour installer la bibliothèque d'aide manuellement, téléchargez la source via le lien de téléchargement de GitHub ou clonez le dépôt. Une fois que vous disposez d'une copie locale du code, procédez comme suit:

  1. Ouvrez l'exemple de projet dans Xcode ou Finder.

  2. Sélectionnez YTPlayerView.h, YTPlayerView.m, puis le dossier Assets. Si vous ouvrez l'espace de travail dans Xcode, ils sont disponibles sous Pods -> Pods de développement -> YouTube-Player-iOS-Helper et Pods -> Pods de développement -> YouTube-Player-iOS-Helper -> Ressources. Dans le Finder, ceux-ci sont disponibles dans le répertoire racine du projet, dans les répertoires Classes et Assets.

  3. Faites glisser ces fichiers et dossiers dans votre projet. Assurez-vous que l'option Copier les éléments dans le dossier du groupe de destination est cochée. Lorsque vous faites glisser le dossier "Assets" (Éléments), assurez-vous que l'option Create Folder References for any added folders (Créer des références de dossiers pour tous les dossiers ajoutés) est cochée.

La bibliothèque devrait maintenant être installée.

Ajoutez un YTPlayerView via Interface Builder ou le story-board

Pour ajouter un YTPlayerView via Interface Builder ou le story-board:

  1. Faites glisser une instance UIView vers votre vue.

  2. Sélectionnez l'inspecteur d'identité et remplacez la classe de la vue par YTPlayerView.

  3. Ouvrez ViewController.h et ajoutez l'en-tête suivant:

    #import “YTPlayerView.h”

    Ajoutez également la propriété suivante:

    @property(nonatomic, strong) IBOutlet YTPlayerView *playerView;
  4. Dans Interface Builder, créez une connexion entre l'élément View que vous avez défini à l'étape précédente et la propriété playerView de votre contrôleur de vue.

  5. Ouvrez maintenant ViewController.m et ajoutez le code suivant à la fin de votre méthode viewDidLoad:

    [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Créez et exécutez votre application. Lorsque la miniature vidéo se charge, appuyez dessus pour lancer le lecteur vidéo en plein écran.

Contrôler la lecture des vidéos

La méthode ViewController::loadWithVideoId: comporte une variante, loadWithVideoId:playerVars:, qui permet aux développeurs de transmettre des variables de lecteur supplémentaires à la vue. Ces variables de lecteur correspondent aux paramètres de lecteur dans l'API Player iFrame. Le paramètre playsinline permet de lire la vidéo directement dans la vue plutôt que de passer en mode plein écran. Lorsqu'une vidéo est intégrée, l'application iOS peut contrôler la lecture de manière programmatique.

Remplacez l'appel loadWithVideoId: par ce code:

NSDictionary *playerVars = @{
  @"playsinline" : @1,
};
[self.playerView loadWithVideoId:@"M7lc1UVf-VE" playerVars:playerVars];

Ouvrez le storyboard ou l'interface. Faites glisser deux boutons sur votre vue, et attribuez-leur les libellés Lecture et Arrêter. Ouvrez ViewController.h et ajoutez les méthodes suivantes, qui seront mappées aux boutons:

- (IBAction)playVideo:(id)sender;
- (IBAction)stopVideo:(id)sender;

Ouvrez maintenant ViewController.m et définissez ces deux fonctions:

- (IBAction)playVideo:(id)sender {
  [self.playerView playVideo];
}

- (IBAction)stopVideo:(id)sender {
  [self.playerView stopVideo];
}

La plupart des fonctions de l'API iFrame Player ont des équivalents en Objective-C, bien que certains noms puissent varier légèrement pour correspondre aux directives de codage Objective-C. Les méthodes de contrôle du volume de la vidéo font l'objet d'exceptions notables, car elles sont contrôlées par le matériel du téléphone ou par des instances UIView conçues à cet effet, comme MPVolumeView.

Ouvrez votre storyboard ou Interface Builder et faites glisser les boutons Play (Lecture) et Stop (Arrêt) aux méthodes playVideo: et stopVideo:.

Maintenant, créez et exécutez l'application. Une fois la miniature chargée, vous devriez pouvoir lire et arrêter la vidéo à l'aide des commandes natives et des commandes du lecteur.

Gérer les rappels des joueurs

Il peut être utile de gérer de manière automatisée les événements de lecture, tels que les changements d'état de la lecture et les erreurs de lecture. Dans l'API JavaScript, cela est effectué avec les écouteurs d'événements. Dans Objective-C,cela se fait avec un délégué.

Le code suivant montre comment mettre à jour la déclaration d'interface dans ViewController.h afin que la classe soit conforme au protocole délégué. Modifiez la déclaration d'interface de ViewController.h comme suit:

@interface ViewController : UIViewController<YTPlayerViewDelegate>

YTPlayerViewDelegate est un protocole de gestion des événements de lecture dans le lecteur. Pour mettre à jour ViewController.m afin de gérer certains des événements, vous devez d'abord définir l'instance ViewController en tant que délégué de l'instance YTPlayerView. Pour effectuer cette modification, ajoutez la ligne suivante à la méthode viewDidLoad dans ViewController.h.

self.playerView.delegate = self;

Ajoutez maintenant la méthode suivante à ViewController.m:

- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
  switch (state) {
    case kYTPlayerStatePlaying:
      NSLog(@"Started playback");
      break;
    case kYTPlayerStatePaused:
      NSLog(@"Paused playback");
      break;
    default:
      break;
  }
}

Compilez et exécutez l'application. Observez la sortie du journal dans Xcode lorsque l'état du lecteur change. Vous devriez voir des mises à jour lorsque la vidéo est lue ou arrêtée.

Pour plus de commodité et de lisibilité, la bibliothèque fournit les constantes commençant par le préfixe kYT*. Pour obtenir la liste complète de ces constantes, consultez la section YTPlayerView.m.

Bonnes pratiques et limites

La bibliothèque s'appuie sur l'API iFrame Player en créant un fichier WebView et en affichant le code HTML et JavaScript requis pour un lecteur de base. L'objectif de la bibliothèque est d'être le plus facile possible pour regrouper les méthodes que les développeurs doivent fréquemment écrire dans un package. Quelques restrictions sont à noter:

  • La bibliothèque n'accepte pas la lecture vidéo simultanée dans plusieurs instances YTPlayerView. Si votre application comporte plusieurs instances YTPlayerView, il est recommandé de suspendre ou d'arrêter la lecture dans toutes les instances existantes avant de lancer la lecture dans une autre instance. Dans l'exemple d'application fourni avec le projet, les ViewControllers utilisent NSNotificationCenter pour envoyer des notifications indiquant que la lecture est sur le point de commencer. Les autres ViewController sont informés et suspendront la lecture dans leurs instances YTPlayerView.
  • Si possible, réutilisez les instances YTPlayerView déjà chargées. Lorsqu'une vidéo doit être modifiée dans une vue, ne créez pas d'instance UIView ni d'instance YTPlayerView, et n'appelez pas loadVideoId: ni loadPlaylistId:. Utilisez plutôt la famille de fonctions cueVideoById:startSeconds:, qui ne recharge pas WebView. Un délai notable est observé lors du chargement de l'intégralité du lecteur iFrame.
  • Ce lecteur ne peut pas lire de vidéos privées, mais il peut lire des vidéos non répertoriées. Étant donné que cette bibliothèque encapsule le lecteur iFrame existant, le comportement du lecteur doit être quasiment identique à celui d'un lecteur intégré sur une page Web d'un navigateur mobile.

Contributions

Comme il s'agit d'un projet Open Source, veuillez soumettre les correctifs et les améliorations à la branche principale du projet GitHub.