Lecture hors ligne avec les SDK de lecture natifs

Dans cette rubrique, vous apprendrez comment fonctionne la lecture hors ligne avec les SDK Brightcove Native Player.

Aperçu

La lecture hors ligne avec les SDK Brightcove Native Player pour iOS et Android permet aux éditeurs d'atteindre leurs téléspectateurs de manière entièrement nouvelle tout en garantissant que leur contenu reste sécurisé. Nos SDK offrent des solutions puissamment simples pour les problèmes complexes de lecture hors ligne, notamment la gestion des téléchargements, la gestion des catalogues hors ligne, l'analyse, les DRM et bien sûr la lecture.

En utilisant la lecture hors ligne, les utilisateurs peuvent télécharger du contenu vidéo protégé par DRM et clair (non crypté) sur leurs appareils et le regarder lorsqu'ils ne sont pas connectés.

Exigences

Les SDK Brightcove Native Player prennent en charge la lecture hors ligne avec les versions suivantes :

Version du SDK natif Brightcove

  • SDK natif pour Android 7.0.1 ou plus récent
  • SDK natif pour iOS 6.0.1 ou plus récent

Version du système d'exploitation de l'appareil

  • Android 5.0+
  • iOS 10.0+, mais 10.3+ est recommandé

Configuration

Pour commencer, procédez comme suit :

  • Contactez votre gestionnaire de compte pour activer votre compte pour la lecture hors ligne.
  • Assurez-vous d'utiliser Dynamic Delivery lors de l'ingestion de vos vidéos.
  • Préparez chaque vidéo que vous souhaitez activer pour le téléchargement.

Livraison de contenu

La vidéo en streaming profite de la fonction de streaming multi-débit de Video Cloud qui détecte la bande passante à la source et offre la meilleure qualité pour l'appareil. La fonction de lecture hors ligne prend en charge les types de diffusion suivants :

  • Androïde: Diffusion dynamique adaptative sur HTTP (DASH)
  • iOS: Diffusion en direct HTTP Apple (HLS)

Rendition téléchargée

Vous vous demandez peut-être quel rendu est téléchargé et utilisé pour la lecture hors ligne. Voici la réponse :

  • Android - L'ExoPlayer définit le rendu par défaut. Pour retrouver l'interprétation actuelle, écoutez l' ExoPlayerVideoDisplayComponent.RENDITION_CHANGED événement.

    En interne, le SDK natif pour Android utilise le DefaultTrackSelector. Vous pouvez régler le débit maximal comme suit :

    VideoDisplayComponent: videoDisplayComponent.setPeakBitrate(yourPeakBitrate);

  • iOS - Si vous ne spécifiez pas de débit pour votre téléchargement, vous obtiendrez le rendu le plus faible contenant une piste vidéo.

    Pour choisir une variante spécifique en fonction du débit binaire ou de la résolution, voir la section Spécifier un débit binaire de variante de la référence SDK.

Sécurité

La protection du contenu téléchargé est une priorité avec notre solution hors ligne. Les kits SDK Brightcove Native Player fournissent les fonctionnalités suivantes pour garantir que votre contenu est stocké en toute sécurité sur les appareils des spectateurs :

Contenu protégé par DRM

  • Pour le contenu protégé par DRM, les SDK natifs utilisent les technologies suivantes :
  • Le contenu vidéo ne peut être regardé que sur l'appareil et l'application qui a téléchargé le contenu.

  • Le contenu vidéo ne peut être regardé que jusqu'à une date et une heure d'expiration spécifiques.

    Les SDK natifs permettent aux utilisateurs de louer ou d'acheter des vidéos. L'expiration s'applique aux locations et est définie dans la licence DRM à l'aide de l'API Native SDK pour le téléchargement de vidéos. En revanche, l'expiration définie dans le jeton Fastly s'applique au contenu en streaming.

  • Les URL des vidéos renvoyées au client expireront afin que d'autres ne puissent pas les utiliser.

Tout le contenu

  • Lorsque l'application est supprimée, tout le contenu téléchargé est supprimé.
  • Votre application peut supprimer à tout moment le contenu stocké localement.

Gestion des téléchargements

Les kits de développement logiciel Brightcove Native Player gèrent les complexités du téléchargement de contenu sur l'appareil d'un spectateur, simplifiant considérablement le processus pour les applications natives.

Fonctionnalité

Les fonctionnalités suivantes peuvent être ajoutées à vos applications pour prendre en charge la gestion des téléchargements :

Afficher le contenu

Affichez une liste de contenus disponibles en streaming ou en téléchargement.

Lorsque vous définissez la offline_enabled propriété d'une vidéo sur true, les SDK natifs marquent cette vidéo comme téléchargeable.

Préparer des vidéos

Pour marquer une vidéo comme téléchargeable, vous devez procéder comme suit :

  1. Si vous ne l'avez pas déjà fait, contactez votre gestionnaire de compte pour activer votre compte pour la lecture hors ligne.
  2. Pour chaque vidéo que vous souhaitez télécharger, activez l'option hors connexion en effectuant l'une des opérations suivantes :

    Utiliser Video Cloud Studio

    Utilisez Video Cloud Studio pour activer la lecture hors ligne.

    Hors ligne activé
    Hors ligne activé

    Utiliser l'API CMS

    Vous pouvez également utiliser le API CMS pour régler le offline_enabled champ à une valeur de vrai.

    Voici un exemple utilisant curl :

      curl --header "Authorization: Bearer $oauth_token" --request PATCH --data '
      {"offline_enabled" : true}
      ' https://cms.api.brightcove.com/v1/accounts/your account id/videos/your video id
Afficher le contenu
Afficher le contenu

Lorsque vous travaillez avec un contenu clair, consultez le Les meilleures pratiques section pour obtenir des conseils sur la façon d'afficher votre contenu.

Vérifier la taille du téléchargement

Brightcove recommande qu'avant de demander un téléchargement, vous vous assuriez que l'espace de stockage de l'appareil est suffisant pour le téléchargement. Pour obtenir une estimation de la taille totale du téléchargement de la vidéo, procédez comme suit :

  • Pour iOS, passez en revue les informations dans le Vérifier la taille du téléchargement partie de la Guide du développeur d'applications iOS pour la lecture hors ligne.
  • Pour Android, vous pouvez obtenir un devis dans le SurTéléchargementDémarré rappel du DownloadEventListener. Voici un exemple de configuration de l'écouteur d'événement :

      MediaDownloadable.DownloadEventListener downloadEventListener = new MediaDownloadable.DownloadEventListener() {
      //Your implementation.
      }
      OfflineCatalog catalog = new OfflineCatalog(context, eventEmitter, accountId, policyKey);
      catalog.addDownloadEventListener(downloadEventListener);

 

Afficher l'espace de stockage local

Informez l'utilisateur lorsqu'il n'y a pas assez de stockage local pour terminer le téléchargement de l'élément actuel et de tout élément dans la file d'attente.

Les SDK fournissent la taille et la progression estimées afin que vous puissiez déterminer s'il y a suffisamment d'espace pour les téléchargements.

Afficher l'état du téléchargement

Affichez le téléchargement en cours ainsi que son statut.

La taille totale estimée, l'état actuel du téléchargement et le pourcentage d'informations sur la progression du téléchargement seront renvoyés par les SDK.

Gérer les téléchargements

Téléchargement de plusieurs vidéos

Les SDK natifs permettront la mise en file d'attente de plusieurs vidéos pour les téléchargements. Par exemple, un utilisateur peut télécharger plusieurs épisodes d'une saison et les SDK natifs géreront le processus en fournissant le statut de téléchargement pour chaque élément.

Téléchargement de pistes secondaires (iOS)

Avec iOS 13, Apple a changé le fonctionnement des téléchargements. Pour plus de détails, consultez le Guide du développeur d'applications iOS pour le téléchargement de vidéos et la lecture hors ligne guider.

En raison de ce changement, l'exemple d'application de téléchargement hors ligne iOS peut sembler télécharger à nouveau des vidéos avec plusieurs pistes audio. En effet, la progression du téléchargement est indiquée pour chaque piste. Ainsi, la barre de progression recommencera à zéro pour chaque piste audio supplémentaire.

Voici un bref aperçu des AVMediaSelectionOptions sous-titres et des pistes audio alternatives : Ajout de sous-titres et de pistes audio alternatives

Déterminer le téléchargement total

Y a-t-il un moyen d'obtenir didProgressTo pour un téléchargement total pour un jeton vidéo ?

Non. Pour un jeton vidéo hors ligne, il n'y a pas de valeur de progression de téléchargement agrégée. Le développeur de l'application détermine le nombre de téléchargements d'actifs. Le premier téléchargement d'actif est la vidéo principale et les pistes audio et texte préférées. Il s'agit généralement du plus gros téléchargement et la progression passera de 0,00 à 100,00.

Si une demande de téléchargement comprend des sélections de médias supplémentaires (que le développeur de l'application demande explicitement), la durée totale de téléchargement est simplement celle de la vidéo principale et de la sélection de médias préférée, plus celle de chaque sélection de médias supplémentaire. Lorsque vous représentez la progression totale dans l'interface utilisateur, choisissez une valeur d'échelle pour chaque téléchargement de sorte que la somme de tous les téléchargements totalise 100 % et additionne les temps de téléchargement mis à l'échelle de chaque sélection de média.

Identifier les types d'objets

Est-il possible d'identifier le type d'objet (vidéo ou piste de texte) auquel chaque didProgressTo événement est lié ?

Oui. Les téléchargements supplémentaires sont des objets Apple Media Selection Option (AVMediaSelectionOption), pas des pistes. L'objet de sélection de média en cours de téléchargement est identifié dans le rappel de progression. (BCOVOfflineVideoManagerDelegate.h)

Apple fournit des méthodes pour examiner les attributs d'une option de sélection de média. Pour plus de détails, voir Apple AVMediaSelectionOption.

Vous pouvez voir les valeurs des métadonnées dans la console de débogage Xcode lorsque vous exécutez l'exemple d'application OfflinePlayer (ne vous laissez pas induire en erreur par les deux options anglaises, il ne s'agit que d'un exemple d'application)

OfflinePlayer[523:355259] AVMediaSelection option 0 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 0 | audible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | audible display name: English

Vous pouvez voir comment cela se fait dans le Code du gestionnaire de téléchargement.

Suspendre/reprendre/annuler le téléchargement

Autorisez l'utilisateur à suspendre, reprendre ou annuler le téléchargement de contenu.

La fonctionnalité de téléchargement reprendra là où elle s'était arrêtée si l'utilisateur s'interrompt/reprend ou si le téléchargement est interrompu. Par exemple, si vous perdez la connexion Wi-Fi pendant le téléchargement, elle reprendra là où elle s'était arrêtée lorsque vous serez reconnecté.

Si vous annulez le téléchargement d'une vidéo, toute progression effectuée sera effacée.

Gestion du catalogue local

Les kits de développement logiciel Brightcove Native Player simplifient le processus de gestion du contenu local téléchargé.

Les fonctionnalités suivantes peuvent être ajoutées à vos applications pour prendre en charge la gestion de catalogue local :

Afficher le contenu téléchargé

Afficher tous les épisodes téléchargés pour chaque émission/saison.

Les SDK renvoient des métadonnées et des détails de lecture pour tout le contenu téléchargé. Ces métadonnées incluent le titre de la vidéo, la description, les vignettes, les légendes disponibles, les pistes audio disponibles, etc.

Il existe de nouvelles propriétés de métadonnées spécifiques à la lecture hors connexion, notamment :

Contenu protégé par DRM

  • Identifiant du jeton
  • Date d'expiration de la licence

Tout le contenu

  • Heure de début et de fin du téléchargement
  • Nom de la vignette téléchargée avec son URL de fichier
  • Nom de l'affiche téléchargée avec son URL de fichier
  • URL de fichier relative et dérivée du bundle vidéo

Vous pouvez ensuite filtrer les résultats pour votre implémentation spécifique.

Supprimer le contenu local

Autoriser les utilisateurs à supprimer du contenu du stockage local.

Les SDK exposent une méthode pour supprimer une vidéo ainsi que ses métadonnées et les ressources associées.

Lecture de contenu

Les SDK natifs vous permettent de lire du contenu dans les situations suivantes :

  • Lire une vidéo pendant son téléchargement.
  • Lire une vidéo après son téléchargement. Le contenu téléchargé peut être lu localement lorsque l'appareil est hors ligne ou en ligne. La vidéo hors ligne ne peut être lue qu'à partir du stockage local.
  • Si vous choisissez de diffuser une version en ligne de la vidéo, vous devez récupérer un nouvel objet vidéo à partir du service de lecture.

Analytique

Des analyses ont été introduites pour mesurer les données liées au flux hors ligne. Pour plus de détails, consultez le Analyses liées à la lecture hors ligne avec les SDK natifs document.

Échantillons

Le tableau suivant contient des liens vers des exemples de code pour vous montrer comment démarrer avec la lecture hors connexion :

Exemple d'application Description
Lecture hors ligne sur iOS Téléchargez et lisez des vidéos HLS, y compris celles protégées par le cryptage FairPlay. Pour plus de détails sur les développeurs, consultez le Guide des développeurs d'applications iOS pour la lecture hors ligne.
Lecture hors ligne Android Téléchargez et lisez des vidéos DASH, y compris celles protégées par le cryptage Widevine.

FAQ

Vous trouverez ci-dessous des réponses à quelques questions générales.

Contenu protégé par DRM

L'utilisateur peut-il modifier l'horloge système pour contourner la date d'expiration ?

Androïde: L'expiration absolue détermine la date et l'heure jusqu'à laquelle une licence est valide. Ceci est appliqué par Widevine et la couche Android DRM. Théoriquement, la couche DRM d'Android doit empêcher l'utilisateur de contourner la période d'expiration. Tous les problèmes que nous avons pu rencontrer sont décrits dans les notes de mise à jour du système d'exploitation Android.

iOS: L'expiration de la licence est imposée par FairPlay. iOS gère toutes les vérifications des changements d'horloge, etc. Une application a la possibilité de vérifier l'expiration de la licence pour alerter l'utilisateur que la licence a expiré. Cela peut être préférable à la simple lecture d'une vidéo expirée, puis à la réception d'une erreur de lecture.


La licence et les vidéos hors ligne continueront-elles à se charger pendant que l'application est en arrière-plan ?

Androïde: Oui. En général, la licence est téléchargée immédiatement, mais même la licence peut être téléchargée lorsque l'application est en arrière-plan.

iOS: Le chargement de la licence doit se faire au premier plan. Nous avons un méthode pour précharger la licence. Le téléchargement du contenu vidéo principal peut se produire lorsque l'application est en arrière-plan.

Tout le contenu

Quel est le format vidéo utilisé pour télécharger du contenu hors connexion ?

Androïde: DASH protégé par DRM ou DASH non crypté.

iOS: HLS vapeur. Vous pouvez spécifier un débit binaire pour le téléchargement afin d'utiliser une variante spécifique.


Les vidéos téléchargées seront-elles lues localement ou en streaming lorsque l'utilisateur est en ligne ?

Une vidéo téléchargée peut être lue en ligne ou hors ligne, mais elle utilisera toujours la vidéo téléchargée. Si vous choisissez de lire une version en ligne de la vidéo, vous devez récupérer un nouvel objet vidéo à partir du service de lecture. La vidéo hors ligne ne peut être lue qu'à partir du stockage local.


Les meilleures pratiques

Les instructions suivantes devraient vous aider lors du développement de votre application pour une lecture hors ligne.

Affichage des boutons pause/annulation

Les boutons de pause et d'annulation doivent s'afficher lorsque le téléchargement de la vidéo a commencé.

Androïde : Vous devez afficher les boutons de pause et d'annulation dans le cadre de l'appel du onDownloadStarted rappel dans le DownloadEventListener. Pour plus de détails, consultez le Exemple d'application de lecture hors ligne.

iOS : Pour plus d'informations sur la création d'une application pour la lecture hors ligne, consultez le Guide du développeur d'applications iOS.

Afficher un contenu clair

Si votre compte n'est pas compatible DRM ou si vous travaillez avec un contenu clair, les kits SDK natifs Brightcove n'effectueront pas de demande de licence côté serveur. Par conséquent, un contenu clair n'est pas considéré comme disponible à la location ou à l'achat. Dans la plupart des cas, pour un contenu clair, il est recommandé de masquer le louer et acheter boutons et afficher un seul Télécharger bouton à la place.

Activer la fonctionnalité

Contactez votre responsable de compte pour en savoir plus sur les tarifs et pour activer la fonction de lecture hors ligne pour votre compte.

Dépannage

Les conseils suivants peuvent vous aider à enquêter sur les problèmes lors du téléchargement de vidéos.

Une erreur peut se produire lorsqu'un utilisateur essaie de télécharger une ressource à un débit supérieur à celui que l'appareil peut gérer en raison d'un réseau lent.

Pour éviter cela, vous pouvez ajouter du code pour vérifier les capacités de l'appareil et empêcher les appareils sur des connexions lentes de tenter de télécharger des actifs à haut débit. Vous pouvez tester avec un appareil réel tout en limitant la connexion et afficher le trafic réseau avec le Mandataire Charles outil.

Android

Pour plus de détails sur la gestion des erreurs, consultez le Messages d'erreur du SDK natif pour Android document. Cela inclut les messages d'erreur liés à la lecture hors ligne.

iOS

Pour plus de détails sur la gestion des erreurs, consultez le Gestion des erreurs avec le SDK natif pour iOS document.

Lorsque le code de lecture hors ligne reçoit une erreur, nous l'attrapons et lançons une NSError. Pour obtenir l'erreur sous-jacente, vous pouvez essayer ceci :

  NSError *underlyingError = initialError.userInfo[NSUnderlyingErrorKey];

Pour plus d'informations, consultez le Guide des développeurs d'applications iOS pour la lecture hors ligne.

Problèmes connus

Pour obtenir une liste des problèmes connus pour les systèmes d'exploitation Android et iOS qui affectent la lecture hors ligne avec les SDK natifs, consultez le Problèmes connus document d'appui.

Remarques et limitations

Les remarques suivantes s'appliquent à la fonctionnalité de lecture hors ligne prise en charge par les SDK natifs :

Publicité

Ni la publicité côté client ni côté serveur n'est prise en charge avec la lecture hors ligne.

HLSe

Le contenu HLSe n'est pas pris en charge avec la lecture hors ligne à l'aide du Brightcove Native SDK pour Android, iOS ou tvOS.

Mode faible consommation

Le mode faible consommation sur les appareils peut affecter certaines fonctionnalités, notamment le téléchargement. Pour plus d'informations, consultez les éléments suivants :

Vidéos partagées

Les vidéos partagées peuvent être téléchargées pour une visualisation hors ligne uniquement si la vidéo originale peut l'être. La propriété est héritée de la vidéo d'origine et ne peut pas être modifiée uniquement pour la vidéo partagée.

Audio seulement

Les SDK natifs prennent en charge le contenu audio uniquement avec la lecture hors ligne. Vous contrôlez ce que les téléspectateurs voient, qu'il s'agisse d'une affiche ou d'un écran personnalisé.

Le SDK natif pour Android nécessite un VideoView, et le SDK natif pour iOS nécessite un UIView. Pour cette raison, l'audio de fond n'est pas pris en charge. Cela signifie que l'audio ne continuera pas à jouer lorsqu'un utilisateur envoie l'application en arrière-plan.

Androïde : Suppression de l'application

Lorsque l'application est supprimée, tout le contenu téléchargé est supprimé. Cela est vrai tant que l'emplacement de stockage par défaut n'est pas remplacé.

iOS : AirPlay

Par mesure de sécurité, vous ne pouvez pas diffuser une vidéo HLS hors ligne sur un appareil AirPlay pour la lecture. Ceci est confirmé par Apple comme étant un AVFoundation limitation.