Libérez votre développeur d'application interne Partie 38 : Stockage d'images et de vidéos iOS dans le nuage Amazon S3

Vous avez une idée d'application mais vous n'avez pas les connaissances en programmation nécessaires pour commencer à la construire ? Dans cette série de blogs hebdomadaires, je vous emmènerai, en tant que non-programmeur, pas à pas dans le processus de création d'applications pour l'iPhone, l'iPod touch et l'iPad. Rejoignez-moi chaque semaine dans cette aventure et vous verrez à quel point il est amusant de transformer vos idées en réalité ! Voici le 38e volet de la série. Si vous venez de commencer, consultez le début de la série ici.

Dans mon précédent billet, j'ai parlé de l'utilisation des Amazon Web Services (AWS) comme stockage dans le nuage pour les entités de votre application iOS, et j'ai fait la démonstration de leur cadre de persistance pour les données de base.

Maîtrisez votre iPhone en une minute par jour :

Inscrivez-vous à la newsletter "Tip of the Day" de iphonologie et nous vous enverrons chaque jour un conseil pour gagner du temps et tirer le meilleur parti de votre iPhone ou iPad.

Mais qu'en est-il du stockage et de la récupération des images et des vidéos pour vos applications iOS ? Amazon a un outil différent pour ce travail, et c'est Amazon Simple Storage Service , ou Amazon S3 pour faire court.

Alors pourquoi utiliser un service tel qu'Amazon S3 plutôt que de mettre en place son propre serveur web ? C'est une question d'échelle pour répondre à la demande. Amazon résume bien les avantages :

Amazon S3 dispose d'une interface de services web simple qui peut être utilisée pour stocker et récupérer n'importe quel volume de données, à tout moment, de n'importe où sur le web. Elle permet à tout développeur d'accéder à la même infrastructure de stockage hautement évolutive, fiable, rapide et peu coûteuse qu'Amazon utilise pour gérer son propre réseau mondial de sites web. Le service vise à maximiser les avantages d'échelle et à faire profiter les développeurs de ces avantages.

Amazon a quelques gros joueurs qui utilisent son service S3. Si vous consultez la page web S3 d'Amazon, vous y trouverez une liste de clients impressionnants, et vous pouvez regarder une vidéo de la façon dont Netflix utilise le service S3 d'Amazon .

À la fin de ce billet, je parle également du service CloudFront d'Amazon qui peut être utilisé conjointement avec S3 pour accélérer la distribution des fichiers à vos utilisateurs et fournir un streaming HTTP en direct. Vous apprendrez également comment éviter que votre application soit rejetée par Apple lors du téléchargement de fichiers vidéo volumineux.

Comprendre les bases d'Amazon S3

Le monde d'Amazon S3 est composé d'objets et de seaux ( Figure 1 ).Un objet est un fichier et, en option, toute métadonnée qui décrit le fichier. Les objets sont stockés dans des conteneurs appelés seaux .

Figure 1 - L'Amazone S3 en gros plan

Vous pouvez attribuer des autorisations à un objet ou à un seau. Vous pouvez également consulter les journaux d'accès à un seau et aux objets qu'il contient, et préciser la région géographique où Amazon S3 stocke le seau et son contenu.

Chaque compte AWS peut posséder jusqu'à 100 seaux. Il n'y a pas de limite au nombre d'objets pouvant être stockés dans un seul seau et il n'y a pas de différence de performance si vous utilisez 1 ou 100 seaux.

Création d'un compte gratuit Amazon Web Services

Si vous avez suivi cette série, vous avez déjà ouvert un compte AWS, et vous pouvez utiliser ce même compte pour accéder à Amazon S3. Si vous n'avez pas encore créé de compte AWS, consultez les instructions étape par étape dans mon précédent billet.

L'inscription est gratuite et dans le volet gratuit de l'AWS S3, vous obtenez 5 Go de stockage, 20 000 demandes d'accès, 2 000 demandes de mise en ligne et 15 Go de transfert de données chaque mois pendant un an.Pour connaître le montant des frais de stockage et des demandes au-delà de ces valeurs, consultez la page de prix Amazon S3 .

Une fois que vous avez créé un compte AWS gratuit, vous pouvez gérer votre compte S3 en cliquant sur l'icône S3 dans la console AWS ( Figure 2 ).

Figure 2 - Sélectionnez S3 dans la console AWS.

Création manuelle d'un seau sur Amazon S3

  1. Une fois que vous êtes dans la console de gestion S3, cliquez sur le bouton Créer un seau ( Figure 3 ).

Figure 3 - Cliquez sur le bouton Créer un seau .

Cela affiche le dialogue Créer un seau ( Figure 4 ).

Figure 4 - Entrez un nom de seau et une région .

  1. Vous devez maintenant entrer un Nom pour le seau. Voici quelques règles de dénomination des seaux à garder à l'esprit :
  • Le nom de votre seau doit être unique parmi tous les noms de seau existants sur Amazon S3, tout comme le nom de domaine d'un site web doit être unique.
  • Amazon vous recommande de faire précéder le nom du seau du nom de votre organisation afin de garantir son caractère unique.
  • Après avoir créé un seau, vous ne pouvez pas changer son nom.
  • Le nom de votre seau est visible dans l'URL qui pointe vers les objets stockés dans le seau.

Pour plus d'informations sur les règles de dénomination des seaux, consultez ce lien .

  1. Dans la case Région , sélectionnez une région (consultez ce lien pour en savoir plus sur chaque région).
  1. Cliquez sur le bouton Créer . Cela affiche le nouveau seau dans la liste comme indiqué dans Figure 5 (oui, je peux déjà entendre les jeux de mots de la "liste de seau").

Figure 5 - Le nouveau seau apparaît dans la liste.

Maintenant que vous avez créé un seau, vous pouvez manuellement télécharger, visualiser, déplacer et supprimer des objets du seau comme décrit à ce lien . Cependant, dans ce billet, nous sommes plus intéressés par l'interaction avec le seau et les objets au moyen d'une application iOS.

Télécharger le SDK AWS pour iOS

Encore une fois, si vous avez suivi, vous avez déjà téléchargé le SDK AWS pour iOS, que nous avons utilisé dans mon précédent article pour accéder à la base de données DynamoDB d'Amazon et au cadre de persistance des données de base. Vous utilisez ce même SDK lorsque vous accédez à l'API Amazon S3. Si vous ne l'avez pas encore fait, vous pouvez télécharger le SDK pour iOS à ce lien .

Exécution de l'application iOS du gestionnaire de transfert S3

Comme d'habitude, Amazon a créé un exemple d'application iOS qui montre comment utiliser le service Amazon S3. Lançons cette application d'exemple pour voir comment elle fonctionne. Si vous ne l'avez pas encore fait, vous pouvez télécharger les AWS Samples pour iOS à ce lien .

  1. Vous pouvez trouver l'application S3 dans le sous-dossier S3_S3TransferManager du répertoire samples. Vous pouvez double-cliquer sur le fichier S3TransferManager.xcodeproj pour ouvrir le projet en Xcode.
  1. Dans le navigateur de projet, sélectionnez le fichier Constantes.h , et modifiez les constantes ACCESS_KEY_ID et SECRET_KEY de vos informations d'identification de sécurité AWS auxquelles vous pouvez accéder à partir du site web AWS à ce lien .
  1. Dans le navigateur de projet, cliquez avec le bouton droit de la souris sur le groupe Frameworks et sélectionnez Add Files to S3TransferManager... dans le menu de raccourcis. Naviguez jusqu'au dossier où vous avez stocké le SDK AWS pour iOS, sélectionnez les cadres suivants, puis cliquez sur Add :
  • AWSRuntime.framework
  • AWSS3.framework
  1. Vous êtes maintenant prêt à exécuter l'application d'exemple et vous pouvez le faire dans le simulateur ou sur un appareil iOS. Cliquez sur le bouton Run de Xcode et vous devriez voir le premier écran montré dans Figure 6 .

Figure 6 - Scène de téléchargement de l'application

  1. Comme vous pouvez le voir, cet écran vous permet de télécharger un petit fichier (4,8 Mo) et/ou un gros fichier (10 Mo). Vous pouvez cliquer sur l'un des boutons Upload ou sur les deux et vous verrez un pourcentage d'achèvement indiqué dans les cases à gauche des boutons. Vous pouvez également utiliser les autres boutons pour Mettre tout en pause , Reprendre tout , et Annuler tout .

Le S3TransferManager envoie des fichiers par morceaux de 5MB. Ainsi, si vous faites une pause et reprenez le fichier de 4,8 Mo, il revient toujours à zéro pour cent. Si vous mettez en pause le téléchargement du fichier de 10 Mo après qu'il soit terminé à 50 %, il reprendra à 50 % (5 Mo).

  1. Une fois votre téléchargement terminé, vous pouvez aller sur la console de gestion S3 à ce lien et vous verrez que l'application d'exemple a créé un nouveau seau qui a été ajouté à votre liste ( Figure 7 ).

Figure 7 - L'application d'exemple a créé un nouveau seau.

  1. Cliquez sur le nouveau seau et vous verrez le(s) fichier(s) que vous avez téléchargé(s) en utilisant l'application d'exemple S3 ( Figure 8 ).

Figure 8 - Les fichiers nouvellement téléchargés

  1. Maintenant, retournez à l'application dans le Simulateur ou l'appareil iOS et cliquez sur l'onglet Télécharger en bas à droite de l'écran, et vous verrez la scène montrée dans Figure 9 .

Figure 9 - La scène de téléchargement de l'application

Essayez les boutons Télécharger , Pause , Reprendre , et Annuler .

Téléchargement avec le gestionnaire de transfert S3

Maintenant que vous avez vu comment l'application modèle fonctionne en cours d'exécution, voyons de plus près comment elle fonctionne sous le capot.

Dans le navigateur de projet, sélectionnez le fichier S3TransferManagerUploadViewController.m et extrayez la méthode viewDidLoad illustrée dans Figure 10 .

Figure 10 - La méthode viewDidLoad du S3TransferManagerUploadViewController .

Le code de cette méthode met en place les classes Amazon S3, qui sont utilisées lorsque vous téléchargez et envoyez des fichiers. Le diagramme de séquence de la figure 11 montre comment ces objets interagissent.

Figure 11 - Le diagramme de séquence des fichiers à télécharger

Voici la répartition de la première série d'interactions entre les objets, qui permettent d'assembler les objets nécessaires et de créer un nouveau seau sur les serveurs d'Amazon S3 :

  1. Lorsque la méthode viewDidLoad du contrôleur de vue est exécutée, elle crée d'abord un objet AmazonS3Client .
  1. Ensuite, un message s3Endpoint:US_WEST_2 est envoyé à la classe AmazonEndPoints , qui renvoie un point final pour la région US West 2.
  1. Le point de terminaison est stocké dans la propriété de l'objet endPoint d'AmazonS3Client .
  1. Un objet S3TransferManager est créé.
  1. L'objet AmazonS3Client est stocké dans la propriété S3TransferManager s3 .
  1. Le contrôleur de vue stocke une référence à lui-même dans la propriété S3TransferManager delegate
  1. Un objet S3CreateBucketRequest est créé.
  1. Un message createBucket est envoyé à l'objet AmazonS3Client , en passant l'objet S3BucketRequest nouvellement créé, et un objet S3CreateBucketResponse est renvoyé, indiquant si la création du seau a réussi ou non.

Examinons maintenant la prochaine série d'interactions d'objets de la figure 11 qui effectue le travail de téléchargement proprement dit.

  1. Lorsque l'un des boutons Upload est actionné, un uploadFile:bucket:key : est envoyé à l'objet S3TransferManager , qui renvoie immédiatement un objet S3TransferOperation puisque la méthode est exécutée de manière asynchrone.
  1. Parce que le contrôleur de vues s'est enregistré en tant que délégué du S3TransferManagerObject et qu'il implémente le AmazonServiceRequestDelegate protocole (dans S3TransferManagerDownloadViewController. h ), une requête :didSendData:totalBytesWritten:totalBytesExpected : est envoyée périodiquement au contrôleur de visualisation, et le contrôleur de visualisation met à jour l'affichage du pourcentage d'achèvement.
  1. Lorsque le téléchargement est terminé, une demande : didCompleteWithResponse : est envoyé au contrôleur de visualisation, et celui-ci affiche un message Done .

Lorsque vous téléchargez un fichier, le S3TransferManager détermine en coulisse le mode de téléchargement à utiliser en fonction de la taille du fichier téléchargé. Si le fichier fait moins de 5 Mo, il utilise une demande de mise en ligne pour télécharger le fichier. S'il est supérieur à 5 Mo, il utilise un téléchargement en plusieurs parties, en divisant le gros fichier en plus petites parties. Si une partie du téléchargement échoue, il ne réessaye que cette partie.

Le S3TransferManager dispose de quatre méthodes que vous pouvez utiliser pour télécharger des fichiers :

  • téléchargement :
  • uploadData:bucket:key
  • uploadFile:seau:clé
  • uploadStream:contentLength:bucket:key

Notez que la pause et la reprise ne fonctionnent qu'avec le téléchargement : et uploadFile:bucket:key . Pour plus d'informations sur ces méthodes, consultez la documentation d'Amazon .

Télécharger avec le gestionnaire de transfert S3

Pour voir le code qui effectue le téléchargement, sélectionnez le fichier S3TransferManagerDownloadViewController.m dans le navigateur de projet, et consultez la méthode viewDidLoad ( Figure 12 ).

Figure 12 - La méthode viewDidLoad du S3TransferManagerDownloadViewController .

Ce code est très similaire au code de téléchargement, sauf qu'il ne crée pas de seau, puisque le seau existe déjà. Les interactions entre les objets de téléchargement sont illustrées dans le diagramme de séquence de la figure 13 .

Figure 13 - Le diagramme de la séquence de téléchargement

Je ne détaillerai pas les étapes 1 à 6 car elles sont exactement les mêmes que le diagramme de la séquence de téléchargement. Voici une explication des étapes 7 à 10.

  1. Lorsque le bouton Download est enfoncé, un fichier downloadFile:bucket : est envoyé au S3TransferManager . Ce message spécifie le nom du fichier à créer pour le téléchargement, ainsi que la clé et le conteneur du fichier à télécharger.Là encore, cette méthode fonctionne de manière asynchrone, de sorte que l'objet S3TransferOperation est renvoyé immédiatement.
  1. Parce que le contrôleur de vues s'est enregistré comme délégué du S3TransferManagerObject et qu'il met en œuvre le protocole AmazonServiceRequestDelegate , une requête :didReceiveResponse : est envoyé au contrôleur de visualisation lorsque le téléchargement commence.

Si vous regardez plus bas dans le contrôleur de vue, vous pouvez voir le code suivant indiqué dans Figure 14 pour cette méthode.

Figure 14 - La demande : a reçu une réponse : méthode

Ce code obtient une liste de tous les champs d'en-tête de la réponse. Il vérifie la présence d'un objet Content-Range , et s'il n'existe pas (il n'existe pas dans cet exemple), il obtient la taille du fichier téléchargé à partir de l'objet Content-Length et enregistre cette valeur dans la propriété expectedTotalBytes .

  1. Une demande : a reçu des données : est envoyé périodiquement au contrôleur de la vue, qui à son tour met à jour l'affichage du pourcentage d'achèvement.
  1. Lorsque le téléchargement est terminé, une requête demande : didCompleteWithResponse : est envoyé au contrôleur de visualisation qui, à son tour, affiche un message Done .

Le S3TransferManager dispose de trois méthodes que vous pouvez utiliser pour télécharger des fichiers :

  • téléchargement :
  • downloadFile:seau:clé
  • downloadStream:bucket:key

Notez que la pause et la reprise ne fonctionnent qu'avec le téléchargement : et downloadFile:bucket:key : .

Apple Live Streaming et Amazon CloudFront

Selon la documentation d'Apple, les applications iOS soumises pour l'App Store qui diffusent de la vidéo sur des réseaux cellulaires doivent utiliser le HTTP Live Streaming pour diffuser de la vidéo d'une durée supérieure à 10 minutes ou 5 Mo de données sur une période de cinq minutes .

Si vous ignorez cette règle, Apple rejettera votre application .

Le terme HTTP Live Streaming peut donner l'impression que vous diffusez un événement en direct, mais il fait référence à la fois à l'audio et à la vidéo en direct et préenregistrée. Le streaming HTTP en direct envoie l'audio et la vidéo sous la forme d'une série de petits fichiers, d'une durée d'environ 10 secondes, appelés fichiers de segments de médias .Apple fournit un ensemble d'outils que vous pouvez utiliser pour mettre en place vous-même un service de diffusion en continu HTTP en direct, comme décrit à ce lien . Vous pouvez également utiliser Amazon Cloudfront , qui fournit également un service de diffusion en direct par HTTP.

CloudFront est avant tout un service web qui fonctionne en conjonction avec Amazon S3 pour accélérer la distribution de vos fichiers aux utilisateurs finaux. Lorsqu'un utilisateur demande un fichier, il est dirigé vers le centre de données (alias edge location ) qui offre la meilleure vitesse de distribution. Si le contenu demandé par l'utilisateur ne se trouve pas à cet emplacement, CloudFront récupère le fichier dans le bac Amazon S3 que vous avez défini comme la source principale de votre fichier et le met en cache à l'emplacement du bord. Les améliorations de la vitesse de Cloudfront sont plus significatives si vos utilisateurs sont dispersés aux quatre coins du globe.

L'utilisation d'Amazon CloudFront entraîne des frais et vous pouvez en savoir plus à ce sujet en cliquant sur ce lien . Pour lire les instructions étape par étape sur la façon de commencer à utiliser CloudFront, consultez ce lien .

Conclusion

Lorsque vous créez une application qui, vous l'espérez, deviendra virale, c'est une bonne idée de planifier à l'avance pour vous assurer que la conception, l'architecture et l'infrastructure de votre application peuvent s'adapter à la demande. Je vous recommande d'utiliser les services d'Amazon AWS comme une option qui vous permet de vous concentrer sur l'application elle-même plutôt que sur son infrastructure.

Click to rate this post!
[Total: 0 Average: 0]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *