Partage de médias

Dans cette rubrique, vous apprendrez comment partager des vidéos d'un compte Video Cloud vers un autre à l'aide de l'API CMS.

Introduction

Le partage multimédia est une fonctionnalité de Video Cloud qui permet aux éditeurs de partager des vidéos avec d'autres éditeurs, ce qui vous permet de gérer plus facilement les vidéos sur plusieurs comptes. Par exemple, les éditeurs peuvent conserver un compte principal de contenu vidéo, puis partager des vidéos avec d'autres divisions ou filiales de l'organisation.

Notez que toutes les opérations de partage de médias peuvent également être effectuées dans Studio. Voir Gestion des paramètres de partage multimédia.

Médias partagés et facturation

Pour plus d'informations sur le fonctionnement de la facturation pour les médias partagés, veuillez consulter Partage multimédia à l'aide du module multimédia.

Terminologie

Dans le partage de médias, il existe une relation entre un compte principal (qui partage des vidéos) et un ou plusieurs comptes affiliés (qui reçoivent des vidéos partagées) impliqués :

Terminologie de partage de médias
Compte Description
Maître Le compte qui a créé la vidéo originale.

Le maître est propriétaire du contenu et est responsable de la configuration, de la gestion et de la fourniture du contenu aux affiliés.

Affilier Le compte qui reçoit la vidéo.

L'Affilié peut accepter le contenu qui lui est partagé par un Maître.

Chaîne Un pipeline à travers lequel le contenu est partagé d'un maître à un nombre quelconque d'affiliés. Lorsque le partage multimédia est activé, un default canal sera créé dans votre compte.
Relation amoureuse Décrit l'interaction entre un Maître et un Affilié.

Une relation est composée d'un maître pour partager du contenu, d'un canal par lequel le contenu est partagé, d'un contrat pour accepter le contenu et d'un affilié pour recevoir du contenu.

Contracter Décrit la relation de partage entre un Maître et un Affilié.

Un contrat est créé par le maître, puis doit être accepté pour que le partage soit activé. L'Affilié peut également spécifier si les vidéos partagées sont acceptées automatiquement ou doivent être approuvées une par une.

URL de base

Comme pour toutes les CMS API requêtes, l'URL de base pour les opérations décrites ci-dessous est :

      https://cms.api.brightcove.com/v1

Tous les points de terminaison décrits ci-dessous seront ajoutés à l'URL de base lorsque vous effectuez des demandes.

Authentification

L'authentification des demandes nécessite un en-tête d'autorisation :

          Authorization: Bearer {access_token}

Le access_token est un jeton d'accès OAuth2 temporaire qui doit être obtenu à partir du service Brightcove OAuth. Pour plus de détails sur la façon d'obtenir les informations d'identification client et de les utiliser pour récupérer des jetons d'accès, consultez le Présentation de Brightcove OAuth.

Notez que toutes les opérations autour des relations nouvelles autorisations requises :

      video-cloud/video/all
      video-cloud/sharing-relationships/read
      video-cloud/sharing-relationships/create
      video-cloud/sharing-relationships/update
      video-cloud/sharing-relationships/delete

Alternativement, vous pouvez simplement utiliser:

      video-cloud/sharing-relationships/all

Sur la page d'administration de l'authentification de l'API Studio, deux autorisations sont affichées :

  • Partage de lecture (équivalent à video-cloud/sharing-relationships/read)
  • Partage lecture/écriture (équivalent à video-cloud/sharing-relationships/all)

Restrictions de partage

Par défaut, toutes les vidéos peuvent être partagées. Vous pouvez toutefois empêcher le partage si :

  • Le compte affilié n'a pas de champ personnalisé pour lequel une valeur est définie sur la vidéo dans le compte principal
  • Le compte principal a le géo-filtrage activé, mais le compte affilié ne le fait pas.

Correspondance de champs personnalisés

Vous pouvez appliquer une correspondance de champ personnalisé pour une chaîne, ce qui signifie que les partages vidéo échoueront si la vidéo a des valeurs pour les champs personnalisés qui ne sont pas présents dans le compte affilié. Les vidéos seront toujours partagées avec succès si la vidéo n'a pas de valeurs pour les champs personnalisés non correspondants

Par défaut, la correspondance des champs personnalisés est ne pas forcée.

Si un partage vidéo échoue en raison de champs personnalisés non correspondants, vous verrez une erreur comme celle-ci dans la réponse :

      {
        "video_id": "5691312273001",
        "affiliate_id": "47509719001",
        "affiliate_video_id": null,
        "status": "PROCESSING",
        "error_message": [{"error_code":"MISSING_CUSTOM_FIELDS","error_message":"Affiliate account is missing custom fields: [subject]"}],
        "shared_at": "2018-01-03T16:29:19.080Z",
        "updated_at": "2018-01-03T16:29:19.080Z"
      }

Correspondance par géofiltrage

Si la correspondance par géofiltrage est activée pour une chaîne, les vidéos ne peuvent pas être partagées si le compte principal a activé le géofiltrage et pas le compte affilié.

Par défaut, le géo-filtrage des correspondances est forcée.

L'erreur ressemblera à ceci :

      {
        "video_id": "5691312273001",
        "affiliate_id": "47509719001",
        "affiliate_video_id": null,
        "status": "PROCESSING",
        "error_message": [{"error_code":"CONFLICT","error_message":"Affiliate account is not configured for geo restriction."}],
        "shared_at": "2018-01-03T16:29:19.080Z",
        "updated_at": "2018-01-03T16:29:19.080Z"
      
      

Voir Mettre à jour le canal ci-dessous pour voir comment vous mettez à jour un canal pour appliquer une correspondance de champ personnalisé et/ou de filtrage géographique.

Qu'est-ce qui est partagé ?

Cette section explique ce qui est partagé et comment les modifications ultérieures apportées à la vidéo sont gérées.

Lorsque la vidéo est partagée

La plupart des champs de métadonnées vidéo sont copiés du compte maître vers le compte affilié lorsque la vidéo est partagée. Les exceptions notables sont :

  • id- la vidéo aura son propre identifiant unique dans le compte affilié
  • champs de date tels que created_at et updated_at

Toutes les ressources vidéo (rendus, images, text_tracks, etc.) sont utilisées par les comptes affiliés pour la lecture.

Après le partage de la vidéo

Une fois la vidéo partagée, certaines modifications apportées à la vidéo dans le compte principal sont automatiquement héritées par les comptes affiliés, et d'autres non.

Éléments vidéo

Sauf pour les images , les modifications principales apportées aux éléments vidéo sont toujours hérités par les affiliés. Affiliés ne peut pas changer les actifs tels que les rendus, les manifestes, les pistes de texte ou le master numérique.

Les modifications apportées aux images par le maître sont héritées par l'affilié à moins que l'Affilié n'ait remplacé la ou les images. Une fois qu'un affilié modifie une image, cette image ne sera plus héritée du maître.

Métadonnées vidéo

Toutes les métadonnées de la vidéo (telles que le nom, la description et l'identifiant de référence) peuvent être modifiées par l'affilié, et les modifications apportées à la vidéo principale sont ne pas hérité par l'Affilié.

Repartage de vidéos

Notez cependant que si le Maître re-partages la vidéo (cela ne peut être fait que via l'API CMS, pas dans Studio), tous les éléments et métadonnées (à l'exception des champs de données/d'heure) seront partagés avec les affiliés, écraser toutes les modifications apportées par les affiliés.

Présentation des étapes de partage multimédia

Mise en place d'une relation

Vous trouverez ci-dessous un récapitulatif des opérations de mise en relation (cliquez sur le nom de l'opération pour plus de détails) :

Opérations de configuration
Opérations principales
Opération Méthode/Point final Description
Liste des chaînes GET /accounts/ master_account_id/channels Obtenir une liste de chaînes pour le compte
Obtenir les détails de la chaîne GET /accounts/ master_account_id/channels/ channel_name [2-1] Obtenir les détails d'une chaîne
Mettre à jour le canal POST /accounts/ master_account_id/channels/ channel_name Mettre à jour les paramètres des chaînes
Lister les chaînes affiliées GET /accounts/ master_account_id/channels/default/members Obtenir les affiliés d'une chaîne
Ajouter des affiliés PUT /accounts/ master_account_id/channels/default/members Ajouter des affiliés à une chaîne
Supprimer l'affilié DELETE /accounts/ master_account_id/channels/default/members/ affiliate_account_id Supprime un affilié d'une chaîne
Opérations d'affiliation
Opération Méthode/Point final Description
Liste des contrats disponibles GET /accounts/ affiliate_account_id/contracts Obtient tous les contrats disponibles sur le compte
Obtenir un contrat pour un compte spécifique GET /accounts/ affiliate_account_id/contracts/ master_account_id Obtient un contrat, le cas échéant, à partir d'un compte spécifique
Approuver un contrat PATCH /accounts/ affiliate_account_id/contracts/ master_account_id Accepter et configurer les conditions d'acceptation du contrat

Remarques

  • [ 2-1] Actuellement, il n'y a qu'un seul canal nommé default

Partage de vidéos

Les opérations de partage de vidéos sont effectuées par le compte Maître. Le compte Affilié peut accepter le partage (si auto_accept est réglé sur false ) et peut mettre à jour les métadonnées et les images vidéo partagées à l'aide de la norme Mettre à jour la vidéo opération.

Voici les opérations de partage qui peuvent être effectuées une fois qu'une relation est mise en place (cliquez sur un nom d'opération pour plus de détails) :

Opérations de partage
Opérations principales
Opération Méthode/Point final Description
Lister les partages existants GET /accounts/ master_account_id/videos/ video_id/shares Obtenez une liste des partages existants pour une vidéo - c'est important en raison des conséquences de re-partage d'une vidéo quand il a déjà été partagé
Partager une vidéo POST /accounts/ master_account_id/videos/ video_id/shares Partager une vidéo à un ou plusieurs affiliés - notez que si la vidéo a déjà été partagée, cette opération sera re-partagez-le - c'est probablement ne pas que veux-tu faire
Annuler le partage d'une vidéo pour un affilié DELETE /accounts/ master_account_id/videos/ video_id/shares Annule le partage d'une vidéo pour un affilié spécifique - notez que l'annulation du partage et le re-partage entraîneront la vidéo partagée avec un nouvel identifiant de vidéo dans le compte affilié
Opérations d'affiliation
Opération Méthode/Point final Description
Accepter une vidéo partagée PATCH /accounts/ affiliate_account_id/videos/ video_id Accepter une vidéo partagée (si auto_accept est éteint)

Remarque: pour identifier les vidéos partagées en attente d'acceptation, recherchez les vidéos qui ont state:pending:

https://cms.api.brightcove.com/v1/accounts/{account_id}/videos?q=state:pending

ou

https://cms.api.brightcove.com/v1/accounts/{account_id}/videos?query=state:PENDING

Requêtes API CMS - configuration

Cette section répertorie les CMS API opérations impliquées dans la configuration du partage de médias.

Opérations principales

Liste des chaînes

Liste des chaînes
Méthode GET
Point de terminaison /accounts/ master_account_id/channels
Corps de la demande  
Exemple de réponse
      [
        {
          "account_id": "57838016001",
          "name": "default",
          "enforce_custom_fields": false,
          "enforce_geo": false,
          "account_name": "BrightcoveLearning",
          "created_at": "2017-08-23T17:11:18.474Z",
          "updated_at": "2017-08-23T17:11:18.474Z"
        }
      ]

Obtenir les détails de la chaîne

Obtenir les détails de la chaîne
Méthode GET
Point de terminaison https://cms.api.brightcove.com/v1/accounts/ master_account_id/channels/ channel_name [5-1]
Corps de la demande  
Exemple de réponse
      {
        "account_id": "57838016001",
        "name": "default",
        "enforce_custom_fields": false,
        "enforce_geo": false,
        "account_name": "BrightcoveLearning",
        "created_at": "2017-08-23T17:11:18.474Z",
        "updated_at": "2017-08-23T17:11:18.474Z"
      }
Remarques
  • [ 5-1] Actuellement, il n'y a qu'un seul canal nommé default

Mettre à jour le canal

Créer une chaîne
Méthode PATCH
Point de terminaison /accounts/ master_account_id/channels/ channel_name [ 6-1]
Corps de la demande
      {
        "enforce_custom_fields" : true,
        "enforce_geo" : true
      }
Exemple de réponse
      {
        "account_id": "57838016001",
        "name": "default",
        "enforce_custom_fields": true,
        "enforce_geo": true,
        "account_name": "BrightcoveLearning",
        "created_at": "2017-08-23T17:11:18.474Z",
        "updated_at": "2017-12-30T15:06:27.015Z"
      }
Remarques
  • [ 6-1] Actuellement, il n'y a qu'un seul canal nommé default

Répertorier les affiliés de la chaîne

Liste des chaînes affiliées
Méthode GET
Point de terminaison /accounts/ master_account_id/channels/default/members
Corps de la demande  
Exemple de réponse
      [
        {
          "account_id": "20318290001",
          "approved": false,
          "account_name": "Brightcove Training"
        },
        {
          "account_id": "1485884786001",
          "approved": true,
          "account_name": "Brightcove Learning Doc Samples"
        },
        {
          "account_id": "1752604059001",
          "approved": true,
          "account_name": "BC Training Videos"
        }
      ]

La valeur de la approved indique si l'Affilié a approuvé ou non le contrat.

Ajouter un affilié à la chaîne

Ajouter un affilié
Méthode PUT
Point de terminaison /accounts/ master_account_id/channels/default/members/ affiliate_account_id
Corps de la demande
      {
        "account_id":"affiliate_account_id"
      }
Exemple de réponse
      {
        "account_id": "1485884786001"
      }

Supprimer l'affilié de la chaîne

Supprimer l'affilié
Méthode DELETE
Point de terminaison /accounts/ master_account_id/channels/default/members/ affiliate_account_id
Corps de la demande  
Exemple de réponse 204 NO CONTENT(corps de réponse vide)

Opérations d'affiliation

Liste des contrats disponibles

Lister les contrats
Méthode GET
Point de terminaison /accounts/ affiliate_account_id/contracts
Corps de la demande  
Exemple de réponse
      [
        {
          "account_id": "1485884786001",
          "channel": {
            "account_id": "57838016001",
            "name": "default"
          },
          "approved": false,
          "auto_accept": false,
          "approved_at": null,
          "updated_at": "2017-08-23T17:45:41.556Z",
          "created_at": "2017-08-23T17:45:41.556Z"
        }
      ]

Les deux champs essentiels de la réponse sont :

  • approved- lorsqu'il est défini sur true, le contrat est accepté par l'Affilié
  • auto-accept- lorsqu'elles sont définies sur true, les vidéos partagées via ce contrat seront automatiquement acceptées par l'Affilié ; sinon, ils doivent être approuvés un par un

Nous verrons ci-dessous comment mettre à jour le contrat.

Obtenir un contrat pour un compte spécifique

Obtenir un contrat
Méthode GET
Point de terminaison /accounts/ affiliate_account_id/contracts/ master_account_id
Corps de la demande  
Exemple de réponse
      {
        "account_id": "1485884786001",
        "channel": {
          "account_id": "57838016001",
          "name": "default"
        },
        "approved": false,
        "auto_accept": false,
        "approved_at": null,
        "created_at": "2017-08-23T17:45:41.556Z",
        "updated_at": "2017-08-23T17:45:41.556Z"
      }

Approuver le contrat

Approuver le contrat
Méthode PATCH
Point de terminaison /accounts/ affiliate_account_id/contracts/ master_account_id
Corps de la demande
      {
        "approved": true,
        "auto_accept": true
      }
Exemple de réponse
      {
        "account_id": "1485884786001",
        "channel": {
          "account_id": "57838016001",
          "name": "default"
        },
          "approved": true,
        "auto_accept": true,
        "approved_at": "2017-08-27T12:27:21.582Z",
        "created_at": "2017-08-23T17:45:41.556Z",
        "updated_at": "2017-08-27T12:27:21.582Z"
      }

Si vous n'incluez que "approved":true , chaque vidéo devra être approuvée individuellement.

Requêtes API CMS - partage

Cette section détaille les CMS API demandes utilisées pour partager des vidéos. Les opérations de partage de médias sont effectuées par le compte principal. Le compte Affilié peut accepter des actions si auto_accept est éteint.

Opérations principales

Lister les partages existants

Pour savoir si une vidéo a déjà été partagée sur d'autres comptes, vous pouvez utiliser la demande ci-dessous.

Répertorier les partages
Méthode GET
Point de terminaison /accounts/ master_account_id/videos/ video_id/shares
Corps de la demande  
Exemple de réponse
      [
        {
          "video_id": "5553744346001",
          "affiliate_id": "1752604059001",
          "affiliate_video_id": "5553754248001",
          "status": "COMPLETE",
          "shared_at": "2017-08-27T14:35:01.890Z",
          "updated_at": "2017-08-27T14:35:25.630Z"
        },
        {
          "video_id": "5553744346001",
          "affiliate_id": "1485884786001",
          "affiliate_video_id": "5553758415001",
          "status": "COMPLETE",
          "shared_at": "2017-08-27T14:34:34.919Z",
          "updated_at": "2017-08-27T14:35:25.212Z"
        }
      ]

Partager (ou repartager) une vidéo

La demande décrite ci-dessous partagera une vidéo avec un ou plusieurs comptes affiliés.

Partager la vidéo
Méthode POST
Point de terminaison /accounts/ master_account_id/videos/ video_id/shares
Corps de la demande
      [
        { "id": "affiliate_account_id_1" },
        { "id": "affiliate_account_id_2" }
      ]
Exemple de réponse

Réponse réussie

      [
        {
          "video_id": "5553744346001",
          "affiliate_id": "1485884786001",
          "affiliate_video_id": null,
          "status": "PROCESSING",
          "shared_at": "2017-08-27T14:25:55.710Z",
          "updated_at": "2017-08-27T14:25:55.710Z"
        }
      ]

Réponse à l'échec

      {
      "video_id": "5553744346001",
      "affiliate_id": "1485884786001",
      "affiliate_video_id": null,
      "status": "ERROR",
      "error_message": "[{\"error_code\":\"MISSING_CUSTOM_FIELDS\",\"error_message\":\"Affiliate account is missing custom fields: [myfieldname]\"}]",
      "shared_at": "2017-10-23T15:21:38.541Z",
      "updated_at": "2017-10-23T15:22:58.519Z"
      }

Le partage créera une nouvelle vidéo dans le compte de l'affilié. Les state du partage vidéo sera PROCESSING jusqu'à ce que le partage soit terminé et la vidéo est créée dans le compte Affilié. L'Affilié devra peut-être encore accepter la vidéo (si auto_accept est réglé sur false sur le contrat par l'Affilié - voir la section précédente sur la mise en place du partage).

Annuler le partage d'une vidéo pour un affilié

Annuler le partage de la vidéo
Méthode DELETE
Point de terminaison /accounts/ master_account_id/videos/ video_id/shares/ affiliate_account_id
Corps de la demande  
Exemple de réponse 202 ACCEPTED(corps de réponse vide) - la réponse indique que la demande a été acceptée pour traitement, mais l'opération peut ne pas être terminée avant quelques minutes

Opérations d'affiliation

Accepter la vidéo partagée

Pour accepter une vidéo partagée, l'affilié met à jour la vidéo partagée, en définissant son state à ACTIVE. (Réglage du state à INACTIVE rejette le partage.)

Accepter la vidéo partagée
Méthode PATCH
Point de terminaison /accounts/ affiliate_account_id/videos/ affiliate_video_id
Corps de la demande
      
        {
          "state": "ACTIVE"
        }
      
Exemple de réponse
      {
        "id": "5557656136001",
        "account_id": "1485884786001",
        "ad_keys": null,
        "clip_source_video_id": null,
        "complete": true,
        "created_at": "2017-08-30T13:35:51.796Z",
        "cue_points": [
        ],
        "custom_fields": {
        },
        "delivery_type": "dynamic_origin",
        "description": null,
        "digital_master_id": "4728546275001",
        "duration": 11111,
        "economics": "AD_SUPPORTED",
        "folder_id": null,
        "geo": null,
        "has_digital_master": true,
        "images": {
          "thumbnail": {
            "asset_id": "5473683978001",
            "remote": false,
            "src": "https://brightcove.vo.llnwd.net/e1/pd/57838016001/57838016001_5473683978001_4728519374001-th.jpg?pubId=1485884786001&videoId=5557656136001",
            "sources": [
              {
                "src": "https://brightcove.vo.llnwd.net/e1/pd/57838016001/57838016001_5473683978001_4728519374001-th.jpg?pubId=1485884786001&videoId=5557656136001",
                "height": 90,
                "width": 160
              },
              {
                "src": "https://brightcove.hs.llnwd.net/e1/pd/57838016001/57838016001_5473683978001_4728519374001-th.jpg?pubId=1485884786001&videoId=5557656136001",
                "height": 90,
                "width": 160
              }
            ]
          },
          "poster": {
            "asset_id": "5473684427001",
            "remote": false,
            "src": "https://brightcove.vo.llnwd.net/e1/pd/57838016001/57838016001_5473684427001_4728519374001-vs.jpg?pubId=1485884786001&videoId=5557656136001",
            "sources": [
              {
                "src": "https://brightcove.vo.llnwd.net/e1/pd/57838016001/57838016001_5473684427001_4728519374001-vs.jpg?pubId=1485884786001&videoId=5557656136001",
                "height": 720,
                "width": 1280
              },
              {
                "src": "https://brightcove.hs.llnwd.net/e1/pd/57838016001/57838016001_5473684427001_4728519374001-vs.jpg?pubId=1485884786001&videoId=5557656136001",
                "height": 720,
                "width": 1280
              }
            ]
          }
        },
        "link": null,
        "long_description": null,
        "name": "oystercatcher.mp4",
        "original_filename": "57838016001_4728546275001_4728519374001.mp4",
        "projection": null,
        "published_at": "2017-08-30T13:41:13.974Z",
        "reference_id": "2016-01-29T21:41:33.225Z-screencast-1280",
        "schedule": null,
        "sharing": {
          "by_external_acct": true,
          "by_id": "57838016001",
          "source_id": "4728519374001",
          "to_external_acct": false,
          "by_reference": true
        },
        "state": "ACTIVE",
        "tags": [
          "newtag",
          "foo"
        ],
        "text_tracks": [
        ],
        "updated_at": "2017-08-30T13:41:14.075Z"
      }

Met le state à INACTIVE de rejeter le partage.

Notez qu'il n'y a pas de notification spéciale indiquant qu'une vidéo a été partagée sur votre compte. Cependant, si vous rechercher des vidéos pour state:pending , qui trouvera toutes les actions non acceptées. Vous pouvez également utiliser la liste des partages en attente dans le module Studio Media pour afficher et accepter/rejeter les partages en attente :

Actions en attente
Actions en attente

Erreurs

Les erreurs de partage de médias ne sont pas renvoyées en tant que réponse d'erreur distincte à la demande d'API, mais plutôt dans un error_message champ dans la réponse normale :

      [
        {
          "video_id" : "1239817239128",
          "affiliate_id" : "32871239",
          "affiliate_video_id" : "30308254055202",
          "status" : "COMPLETE",
          "shared_at" : "2017-12-11T17:57:45.530Z",
          "updated_at" : "2017-12-11T18:03:32.789Z",
          "error_message" : "[{"error_code":"MISSING_CUSTOM_FIELDS","error_message":"Affiliate account is missing custom fields: [whisky]"}]"
        }
      ]

Pour plus de détails, reportez-vous à la référence des CMS API erreurs .

Contraintes

Actuellement, le partage de médias présente les limitations suivantes :

  • DRM : le partage de médias via le n' CMS API est actuellement pas pris en charge pour les comptes DRM. Le partage de vidéos d'un compte non compatible DRM vers un compte compatible DRM est pris en charge, mais les vidéos partagées seront ne pas être emballé pour DRM.
  • Si le canal défini par le compte maître a défini enforce_custom_fields à true , puis partage une vidéo qui a un champ personnalisé avec une valeur qui n'est pas autorisée par le compte affilié, cette tentative de partage échouera. L'état du partage sera mis à jour avec un message d'erreur comme celui-ci :

          [{"error_code": "ILLEGAL_CUSTOM_FIELD_VALUE", "error_message": "Illegal value for custom fields: [topic]"}]
          

    Si le canal défini par le compte maître a défini enforce_custom_fields à false , puis partage une vidéo qui a un champ personnalisé avec une valeur qui n'est pas autorisée par le compte affilié, alors la tentative de partage fonctionnera, mais le champ avec la mauvaise valeur ne sera pas inclus sur la copie affiliée de la vidéo.

  • Lors de la lecture d'une vidéo partagée avec SSAI, le remplacement de macro SSAI utilisera les métadonnées de la vidéo parente au lieu de la vidéo enfant. SSAI ignorera également la recherche d'annonces si la vidéo parente est marquée comme Advertising='Free' , même si la vidéo enfant est étiquetée comme Ad Supported.