Flipboard Blog

Comment nous avons rendu un lecteur vidéo plus rapide et flexible pour l'application de streaming d'un diffuseur

Dans le monde en constante évolution du streaming, l'expérience utilisateur est primordiale. Bien que de nombreuses applications se concentrent fortement sur la navigation et la découverte de contenu, le lecteur vidéo lui-même ne reçoit souvent pas l'attention qu'il mérite, même si c'est là que les utilisateurs passent la majeure partie de leur temps. Récemment, nous avons travaillé sur un projet ambitieux pour un diffuseur : unifier 4 lecteurs vidéo iPhone et iPad basés sur XIB pour divers formats de streaming — SVOD, PVOD, AVOD, TV linéaire, sports en direct, films et séries TV — en une solution unique basée sur du code avec Swift et UIKit.



Cette transition a non seulement rendu le lecteur plus flexible et plus facile à maintenir, mais elle a également amélioré considérablement les performances sur tous les appareils, garantissant que l'application du diffuseur puisse gérer n'importe quel type de contenu, orientation ou appareil. Voici comment nous avons abordé ce projet.

Le Défi : Gérer plusieurs types de contenu


L'application de streaming du diffuseur devait prendre en charge une variété d'exigences de contenu. Par exemple, AVOD utilise les interstitiels HLS et nécessite que des boutons d'appel à l'action (CTA) soient affichés pendant la lecture des publicités. Le contenu sportif inclut souvent des statistiques en direct ou une liste de chaînes (pour le même événement) dans un volet latéral. Selon les plans d'abonnement ou PVOD, les actifs se comportent différemment lors du lancement du lecteur. Maintenir des lecteurs basés sur XIB séparés pour chaque type de contenu entraînait du code redondant et des temps de chargement plus lents.
L'objectif était de construire un lecteur unifié capable de s'adapter dynamiquement à tous ces environnements, de gérer différents ensembles de contrôles et de prendre en charge tous les appareils iOS et iPadOS tout en restant réactif et facile à utiliser.

La Puissance d'AVPlayer : Performances natives et fonctionnalités avancées


Au cœur du lecteur vidéo se trouve AVPlayer, le moteur de lecture vidéo natif d'Apple. AVPlayer est le lecteur le plus performant disponible pour iOS et iPadOS car il est profondément intégré au système. Il offre également un accès au dernier ensemble de fonctionnalités de streaming conçues spécifiquement pour les appareils Apple. En construisant le lecteur sur AVPlayer, nous avons pu exploiter toute la puissance des frameworks multimédias d'Apple, garantissant une lecture fluide, un streaming à faible latence et une intégration transparente avec des fonctionnalités avancées d'Apple comme AirPlay, Picture-in-Picture, les interstitiels HLS et HDR. Les capacités natives d'AVPlayer en faisaient la base idéale pour un lecteur haute performance, nous offrant une plateforme solide pour construire une interface utilisateur flexible et adaptable.

Le Design UX/UI Signature du Diffuseur


Sous le lecteur, nous avons utilisé AVPlayer comme base pour la lecture vidéo, ce qui est un choix courant dans les applications de streaming. Cependant, toute la conception UX/UI a été élaborée à partir des maquettes du diffuseur, rendant le lecteur unique et reconnaissable comme une partie intégrante de son application. Ce design distinctif, intégrant les directives de marque et d'expérience utilisateur du diffuseur, assurait que le lecteur s'intégrait parfaitement avec le reste de l'application, en maintenant l'aspect et la convivialité caractéristiques du diffuseur. De l'affichage des contrôles au flux d'interaction global, le lecteur devait incarner la vision du diffuseur tout en offrant des performances de premier ordre.

Gérer l'interopérabilité avec le DRM et les segments HLS courts


L'un des aspects les plus complexes de ce projet était d'assurer une interopérabilité sans faille entre AVPlayer et l'infrastructure de streaming personnalisée du diffuseur, qui incluait l'utilisation de segments HLS courts (40 images) pour un streaming en direct à faible latence. Bien qu'AVPlayer prenne en charge nativement le streaming HLS, ces segments courts exercent une pression supplémentaire sur le lecteur, qui s'épanouit en ayant du contenu avancé pour réagir correctement et gérer des fonctionnalités comme le Picture-in-Picture (PiP), la mise en mémoire tampon et une lecture fluide. Le tampon court signifiait que le lecteur devait s'adapter en continu pour garantir que le flux reste fluide sans interruptions.
Il convient de noter que la durée des segments, en particulier pour le contenu VOD, sera probablement revue à l'avenir afin de mieux s'aligner sur les normes de l'industrie et d'améliorer l'expérience utilisateur globale. Cependant, pour l'instant, le lecteur unifié gère ces complexités de manière efficace tout en maintenant les normes de haute performance attendues pour la gamme diversifiée de contenu du diffuseur.

Gestion explicite du thread principal avec UIKit


Lorsque vous travaillez avec UIKit, l'un des aspects importants est de gérer la manière et le moment où l'interface utilisateur est mise à jour. Étant donné que UIKit gère tous ses changements d'interface sur le thread principal — la partie du système qui interagit directement avec ce que l'utilisateur voit — les développeurs doivent être explicites pour s'assurer que tous les changements ou mises à jour se produisent au bon moment. Si cela n'est pas fait correctement, l'application peut ralentir ou planter, ou certaines fonctionnalités, comme le picture-in-picture, peuvent cesser de fonctionner correctement. Cela est particulièrement vrai lors de la navigation dans l'application tout en essayant de maintenir le lecteur vidéo fonctionnant sans heurts en arrière-plan (PiP).

Gérer le Picture-in-Picture (PiP)


L'une des fonctionnalités les plus complexes est en effet le PiP, en particulier le PiP dans l'application qui mélange la lecture vidéo et la navigation dans l'application. Étant donné que UIKit nécessite une gestion attentive du thread principal, garantir que le PiP fonctionne sans accroc a nécessité de nombreux tests. Chaque scénario de navigation dans l'application devait être pris en compte pour s'assurer que le PiP continuait de fonctionner sans interruption lorsque les utilisateurs passaient d'une section de l'application à l'autre. Que ce soit avec le PiP au niveau système ou le PiP personnalisé du diffuseur, la performance et l'expérience utilisateur étaient une priorité.

Autres interactions pendant la lecture


Au-delà de la lecture vidéo elle-même, le lecteur devait également gérer des échanges de données en cours avec des services externes. Par exemple, la collecte de statistiques via Nice People At Work (NPAW) est intégrée pour surveiller et optimiser la qualité de l'expérience. Ce système collecte des données en temps réel pour assurer une lecture fluide et identifier tout goulet d'étranglement de performance. De plus, le lecteur communique régulièrement avec l'API du diffuseur pour envoyer la position du lecteur dans la vidéo. Cela permet aux utilisateurs de reprendre la lecture au même point sur n'importe quel appareil, garantissant une expérience de visionnage multi-appareils fluide. Ces interactions en arrière-plan doivent être gérées efficacement sans affecter la performance globale de la lecture.

Contrôles flexibles pour divers types de contenu


L'une des caractéristiques clés du lecteur est ses contrôles flexibles, qui s'adaptent dynamiquement en fonction du type de contenu et de l'environnement utilisateur. Par exemple :
  • Les contrôles de langue (audio et sous-titres) sont essentiels pour la plupart des contenus.
  • Un bouton « épisode suivant » apparaît uniquement pour les séries télévisées.
  • La sélection de chaînes est disponible uniquement pour les sports en direct.
  • Les statistiques en temps réel sont affichées uniquement pour les sports avec statistiques.

Ces contrôles doivent également s'adapter en fonction de l'orientation de l'écran et de la taille de l'appareil, garantissant que le lecteur reste intuitif et épuré. Lorsque la taille ou l'orientation du lecteur change, les contrôles s'ajustent automatiquement pour optimiser l'expérience utilisateur.

Amélioration des performances : Le cas des lecteurs basés sur du code


Un autre avantage significatif du passage à un lecteur basé sur du code a été l'amélioration des performances. Les XIB nécessitent que tous les éléments soient préparés à l'avance, ce qui signifie que le système doit charger l'ensemble du XIB avant d'afficher le lecteur. Lorsqu'on utilise quatre XIB séparés, ce processus de chargement devait être répété quatre fois, ce qui entraînait des performances plus lentes et des problèmes de gestion de la mémoire.



En revanche, une approche basée sur du code permet une gestion de la mémoire plus contrôlée, les ressources n'étant chargées que lorsqu'elles sont nécessaires et libérées lorsqu'elles ne sont plus utilisées. Cette approche a considérablement réduit les temps de chargement et amélioré les performances, en particulier sur les anciens appareils avec des ressources limitées en CPU et en mémoire. Le nouveau lecteur est plus rapide, plus efficace et évite les pièges courants liés à l'utilisation excessive des XIB.

Tests pendant une mise à jour majeure d'iOS


Le projet a coïncidé avec la sortie d'iOS 18, la première version d'iOS basée sur Swift 6, ce qui a rendu les tests plus compliqués. Il n'était pas toujours clair si les problèmes étaient causés par le code, le système ou l'environnement. Une attention particulière a été accordée aux tests sur des appareils plus anciens, où les améliorations de performance étaient les plus remarquables en raison de leurs ressources limitées.

Métriques et retours des utilisateurs (à venir)


À ce stade, il n'y a pas encore de métriques concrètes des utilisateurs — telles que les taux de plantage, la consommation de mémoire ou les retours d'avis et d'enquêtes NPS — mais les tests initiaux montrent des améliorations substantielles en termes de vitesse et de flexibilité. Cette étude de cas sera mise à jour dès que plus de données utilisateurs seront disponibles.

Flexibilité et performance sont essentielles


Dans les applications de streaming modernes, la flexibilité et la performance sont essentielles pour offrir une expérience utilisateur de premier ordre. En unifiant les lecteurs vidéo du diffuseur dans une solution unique basée sur du code, nous avons simplifié le développement, amélioré les performances et assuré que le lecteur pouvait s'adapter en douceur à différents types de contenu et environnements.
Ce projet met en lumière l'importance de se concentrer sur le lecteur vidéo lui-même, et pas seulement sur la navigation autour de celui-ci, car c'est finalement là que les utilisateurs passent la majeure partie de leur temps.


Get your own TV channel on iOS, Android, Roku, Fire TV and Connected TV like this one easily

Unlimited, automated, 24/7 TV Channels from your content at $0.001 per minute

Cars and Roads - Brands (https://ireplay.tv/carsandroads/brands.m3u8)

Trusted by

trusted by Sky for native iOS development, SGAI interstitials, infrastructure and headend consulting
trusted by Arte for low-latency live streaming
trusted by DJing for VOD2Live, very high quality live streaming, Jukebox TV, private podcasts, paygate, iOS, iPadOS apps
trusted by CNRS for 'Antarctica to World' Live Streaming
trusted by Velocix for consulting and ops services
trusted by Thomson Video Networks/Harmonic for OTT/cloud training


A portion of iReplay.TV's revenues, specifically 1%, is being allocated towards funding research and providing assistance for children's cancer treatment at Gustave Roussy Institute
Learn more about Gustave Roussy cancer Institute