AVPlayerViewController : qu'est-ce que c'est, méthodes d'intégration dans iOS

Auteur : IT Sectr Publié le : 2026-05-23 Temps de lecture : 8 min

AVPlayerViewController est un contrôleur de lecteur vidéo intégré dans l'écosystème Apple, conçu pour la lecture de contenu multimédia sur iOS et tvOS. Il fournit une interface plein écran avec des contrôles, la prise en charge des sous-titres et AirPlay sans avoir à écrire une interface utilisateur personnalisée. Selon la Documentation Apple Developer, 2026, AVPlayerViewController s'intègre en quelques lignes de code et prend en charge HLS, MP4 et la plupart des formats multimédia.

Points essentiels

  • AVPlayerViewController est le contrôleur de lecture vidéo standard du framework AVKit pour iOS et tvOS.
  • Il fournit une interface utilisateur prête à l'emploi avec une barre de contrôle, des boutons de lecture et un indicateur de progression.
  • Le contrôleur prend automatiquement en charge les sous-titres, les pistes audio, AirPlay et Picture in Picture.
  • L'intégration s'effectue via AVPlayer — l'objet de base pour gérer la lecture.
  • Les développeurs peuvent personnaliser l'affichage des contrôles, ajouter des vues en superposition et gérer les événements via le délégué.

Qu'est-ce que AVPlayerViewController ?

AVPlayerViewController est un composant du framework AVKit qui fournit une interface prête à l'emploi pour lire des vidéos dans les applications Apple. Il évite au développeur d'avoir à créer un lecteur personnalisé de zéro, en offrant des contrôles standard : lecture/pause, avance rapide, réglage du volume et mode plein écran.

Contrairement à AVPlayerLayer de bas niveau, qui nécessite une construction manuelle de l'interface utilisateur, AVPlayerViewController gère entièrement le cycle de vie du lecteur. Le contrôleur gère automatiquement la rotation de l'écran, s'adapte à la zone sécurisée sur les iPhone avec encoche et prend en charge le multitâche sur iPad.

Selon la Documentation Apple (2026), AVPlayerViewController est compatible avec AVPlayer et AVQueuePlayer, permettant de lire à la fois des fichiers individuels et des listes de lecture. Les URL de stockage local, les flux réseau HLS et le contenu FairPlay crypté sont pris en charge.

Historique et versions d'AVPlayerViewController

Le composant est apparu dans iOS 8 avec AVKit en remplacement de l'obsolète MPMoviePlayerController. Dans iOS 11, la prise en charge de Picture in Picture et de l'affichage des sous-titres a été ajoutée. Dans iOS 14, le contrôleur a reçu une barre de transport personnalisable via AVPlayerViewControllerDelegate. À partir d'iOS 16, la prise en charge du remplacement dynamique des fichiers multimédia sans recréation du lecteur a été introduite.

L'AVPlayerViewController moderne est optimisé pour les écrans ProMotion — la fréquence d'images vidéo se synchronise automatiquement avec la fréquence de rafraîchissement de l'écran. Sur tvOS, le composant s'adapte à l'interface de focus de la Siri Remote, et sur macOS, au mode fenêtré du QuickTime Player.

Comment fonctionne AVPlayerViewController

Au cœur du contrôleur se trouve l'association de AVPlayer et AVPlayerItem. AVPlayer est l'objet de lecture qui gère la chronologie, la vitesse et l'état. AVPlayerItem est un wrapper autour d'un fichier multimédia spécifique, contenant des métadonnées, des pistes et des informations de chargement.

Lors de l'initialisation, AVPlayerViewController reçoit une référence à AVPlayer et crée automatiquement un AVPlayerLayer pour afficher la vidéo. Le contrôleur s'abonne aux notifications KVO d'AVPlayer concernant les changements d'état tels que readyToPlay, les erreurs de chargement et la fin de la lecture.

Les contrôles (barre de transport) s'affichent en touchant l'écran. Sous iOS 15+, ils prennent en charge la personnalisation via AVPlayerViewControllerCustomizationDelegate, permettant de masquer ou remplacer les boutons standard.

Cycle de vie du contrôleur

Après avoir créé le contrôleur et assigné AVPlayer, la méthode viewDidLoad est appelée, qui commence à préparer le flux vidéo. Lorsque AVPlayerItem passe à l'état AVPlayerItemStatusReadyToPlay, le lecteur est prêt à afficher les images. Lorsque la méthode play() est appelée, le décodage du flux vidéo commence via Video Toolbox.

En quittant l'écran, le contrôleur met automatiquement la lecture en pause et libère les ressources du décodeur. Sous iOS 13+, pour maintenir la lecture lorsque l'application est réduite, les modes d'arrière-plan et la session audio doivent être configurés. Selon la WWDC 2024, il est recommandé d'utiliser AVPlayerPlaybackCoordinator pour la synchronisation avec le centre multimédia iOS.

Principales fonctionnalités d'AVPlayerViewController

Le composant fournit un ensemble riche de fonctionnalités prêtes à l'emploi, ce qui le rend attrayant pour la plupart des projets. Voici les capacités clés qui ne nécessitent pas de code supplémentaire.

  • Barre de transport avec lecture/pause, saut de 15 secondes, contrôle du volume et curseur de progression.
  • Prise en charge des sous-titres — affichage automatique des sous-titres intégrés et externes aux formats VTT, SRT et iTunes Timed Text.
  • AirPlay — possibilité de diffuser la vidéo sur Apple TV et d'autres appareils compatibles AirPlay.
  • Picture in Picture — lecture dans une fenêtre flottante en touchant un bouton spécial (sur iPad et iPhone avec iOS 14+).
  • Mode plein écran — basculement automatique lors de la rotation de l'appareil et en touchant le bouton d'agrandissement.
  • Contrôle de la vitesse — contrôle intégré pour sélectionner la vitesse de lecture (0,5x, 1,0x, 1,5x, 2,0x).
  • Contenu protégé — prise en charge native de FairPlay Streaming pour le contenu HLS avec DRM.

Barre de transport d'AVPlayerViewController

La barre de transport est la partie inférieure de l'interface contenant les principaux boutons de contrôle. Par défaut, la barre se masque après 3 secondes d'inactivité de l'utilisateur et apparaît au toucher. Sous iOS 16+, le délégué peut être utilisé pour contrôler la visibilité des éléments individuels.

En mode débogage, la barre de transport peut être forcée à s'afficher en utilisant la propriété AVPlayerViewController.requiresLinearPlayback, qui empêche également la mise en pause de la vidéo. Utile pour les pauses publicitaires et le contenu éducatif.

Intégration d'AVPlayerViewController dans votre projet

L'intégration de base du contrôleur ne prend pas plus de 10 lignes de code. Créez d'abord une instance d'AVPlayer avec l'URL du fichier multimédia, puis passez-la à AVPlayerViewController et affichez le contrôleur à l'écran.

Création d'un lecteur de base en Swift

swift
import AVKit

let player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
let playerVC = AVPlayerViewController()
playerVC.player = player

present(playerVC, animated: true) {
    player.play()
}

Après avoir appelé present, le contrôleur s'affiche en plein écran. La vidéo commence à se charger depuis le réseau, et une fois que le tampon atteint le seuil readyToPlay, la lecture commence automatiquement après l'appel de play().

Configuration d'AVPlayerItem pour un contrôle avancé

swift
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)

let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "Ma Vidéo"
item.addMetadata(metadata)

let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player

L'utilisation d'AVPlayerItem vous donne le contrôle sur les métadonnées, les codes temporels, la sélection des pistes audio et les sous-titres. Via AVPlayerItem, vous pouvez également surveiller la progression du chargement, la mise en mémoire tampon et les erreurs réseau à l'aide de KVO sur la propriété status.

Personnalisation des contrôles

À partir d'iOS 11, les développeurs peuvent personnaliser la barre de transport via le protocole AVPlayerViewControllerDelegate. La méthode playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) est appelée avant d'entrer en mode plein écran et permet de préparer l'interface utilisateur.

Pour masquer des boutons individuels, utilisez la propriété AVPlayerViewController.showsPlaybackControls. Si elle est définie sur false, la barre de transport disparaît complètement, ne laissant que le flux vidéo. Utile pour les éléments de superposition personnalisés.

Personnalisation à l'aide du délégué

swift
class CustomPlayerViewController: UIViewController {
    private let playerVC = AVPlayerViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        playerVC.delegate = self
        playerVC.showsPlaybackControls = true
        playerVC.entersFullScreenWhenPlaybackBegins = true
    }
}

extension CustomPlayerViewController: AVPlayerViewControllerDelegate {
    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator
    ) {
        // Ajouter un bouton de superposition
    }

    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        didUpdate legibleMediaSelection: AVMediaSelectionGroup
    ) {
        print("Nouvelle langue de sous-titres sélectionnée")
    }
}

Le délégué permet d'intercepter les événements de changement de sous-titres, l'entrée et la sortie du mode plein écran, ainsi que le début et la fin de Picture in Picture. À la WWDC 2024, Apple a recommandé d'utiliser le délégué pour les analyses — enregistrer chaque transition en moins de 100 ms.

Travailler avec les sous-titres et les pistes audio

AVPlayerViewController affiche automatiquement tous les sous-titres et pistes audio disponibles s'ils sont intégrés dans le fichier multimédia ou spécifiés dans le manifeste HLS. Les utilisateurs peuvent les changer via le menu qui apparaît en touchant l'icône des sous-titres dans la barre de transport.

Pour les flux HLS, le manifeste M3U8 contient une liste des variantes linguistiques disponibles. AVPlayer charge les segments de sous-titres WebVTT correspondants et les transmet à AVPlayerLayer pour le rendu. iOS 16+ a introduit la prise en charge du style des sous-titres via AVTextStyleRule.

Sélection programmatique de piste audio

swift
func selectAudioTrack(languageCode: String) {
    guard let group = player.currentItem?
        .asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.audible)
    else { return }

    for option in group.options {
        if option.extendedLanguageTag?.hasPrefix(languageCode) == true {
            player.currentItem?.select(option, in: group)
        }
    }
}

La méthode selectAudioTrack recherche parmi les options audio du groupe audible la variante dont extendedLanguageTag correspond au code de langue souhaité. Cela permet d'implémenter la fonction « Audio original » dans les applications avec du contenu multilingue.

Picture in Picture sur iPad

Le mode Picture in Picture (PiP) permet d'afficher la vidéo dans une fenêtre flottante au-dessus des autres applications. Sur iPad, cette fonctionnalité est disponible depuis iOS 9, sur iPhone depuis iOS 14. AVPlayerViewController ajoute automatiquement un bouton PiP à la barre de transport lors de l'abonnement à UIBackgroundModes.

Pour activer le PiP, ajoutez la clé UIBackgroundModes avec les valeurs audio et airplay à Info.plist. Ensuite, un bouton PiP apparaît dans le contrôleur qui, lorsqu'on le touche, réduit la vidéo dans une fenêtre flottante de 192x108 points.

Les événements PiP sont gérés via le délégué : playerViewController(_:willStartPictureInPictureFromFullScreen:) et playerViewController(_:didStopPictureInPicture:). Selon Apple HIG, la taille minimale de la fenêtre PiP doit être d'au moins 120x68 points pour maintenir la lisibilité du contenu.

Foire aux questions

AVPlayerViewController prend-il en charge la lecture des vidéos YouTube ?

Non, les vidéos YouTube nécessitent l'utilisation d'une vue web WKWebView ou de la bibliothèque YouTube iOS Helper, car YouTube utilise son propre système de DRM. AVPlayerViewController est conçu pour les flux multimédia directs via URL.

Comment désactiver la barre de transport d'AVPlayerViewController ?

Définissez la propriété showsPlaybackControls sur false. Ensuite, l'écran reste vide — seul le flux vidéo. Pour retrouver des boutons personnalisés, ajoutez une superposition via addSubview au-dessus du contrôleur.

AVPlayerViewController fonctionne-t-il avec les diffusions en direct HLS ?

Oui, le contrôleur prend entièrement en charge HLS Live. La barre de transport affiche un indicateur En direct au lieu d'un curseur de progression. La latence dépend de la configuration HLS — minimum 6 secondes avec les paramètres de faible latence.

Comment gérer les erreurs de chargement vidéo dans AVPlayerViewController ?

Abonnez-vous au KVO sur la propriété AVPlayerItem.status. En cas d'erreur, le statut passe à .failed. Obtenez les détails via la propriété error d'AVPlayerItem et affichez une alerte à l'utilisateur expliquant le problème — souvent un problème réseau ou une URL invalide.

Puis-je charger une vidéo depuis la mémoire dans AVPlayerViewController ?

Oui, utilisez AVAsset avec un AVAssetResourceLoader personnalisé pour fournir des données depuis la RAM. Implémentez AVAssetResourceLoaderDelegate et retournez des octets depuis un tampon au lieu de lire depuis le disque.

Résumé

  • AVPlayerViewController est un composant AVKit prêt à l'emploi pour la lecture vidéo sur iOS, iPadOS et tvOS avec un code d'intégration minimal.
  • Le contrôleur prend en charge HLS, MP4, le contenu FairPlay protégé, les sous-titres et les pistes audio dès sa sortie.
  • Pour une utilisation de base, créez simplement un AVPlayer et passez-le au contrôleur — l'interface utilisateur se rend automatiquement.
  • Le délégué AVPlayerViewControllerDelegate permet de personnaliser la barre de transport, de gérer le PiP et les changements de sous-titres.
  • La barre de transport se masque après 3 secondes d'inactivité, mais showsPlaybackControls donne un contrôle total sur sa visibilité.
  • Pour Picture in Picture, il faut activer UIBackgroundModes audio et airplay dans Info.plist.
  • En cas d'erreurs, utilisez KVO sur AVPlayerItem.status pour obtenir les détails et les afficher à l'utilisateur.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi