API d'insertion dynamique d'annonces pour les flux de vidéo à la demande

L'API d'insertion dynamique d'annonces de Google vous permet d'implémenter des flux compatibles avec l'insertion dynamique d'annonce dans les environnements lorsque l'implémentation du SDK IMA n'est pas acceptée. Nous vous recommandons de continuer à utiliser IMA sur les plates-formes où le SDK IMA est accepté.

Nous vous recommandons d'utiliser l'API d'insertion dynamique d'annonce sur les plates-formes suivantes:

  • Smart TV Samsung (Tizen)
  • LG TV
  • HbbTV
  • Xbox (applications JavaScript)
  • KaiOS

L'API est compatible avec les fonctionnalités de base fournies par le SDK IMA DAI. Pour des questions sur la compatibilité ou les fonctionnalités compatibles, contactez votre responsable de compte Google Cloud.

Implémenter l'API d'insertion dynamique d'annonce pour les flux de vidéo à la demande

L'API d'insertion dynamique d'annonce est compatible avec les flux de vidéo à la demande qui utilisent les protocoles HLS et DASH. Procédure décrits dans ce guide s'appliquent aux deux protocoles.

Pour intégrer l'API dans votre application pour les flux de vidéo à la demande, effectuez la procédez comme suit:

  1. Demandez un flux en effectuant un appel POST au point de terminaison du flux:

    Exemple de corps de la requête :

    https://dai.google.com/ondemand/v1/dash/content/2559737/vid/tos-dash/stream
    
      {
        key1 : "value1",
        stream_parameter1 : "value2"
      }
    

    Exemple de corps de réponse:

    {
       "stream_id":"d32f8920-612a-4d46-8bc7-d73fd6c17c85",
       "total_duration":636.458,
       "content_duration":596.458,
       "valid_for":"8h0m0s",
       "valid_until":"2020-06-04T20:39:41.274707306-07:00",
       "stream_manifest":"https://dai.google.com/ondemand/dash/content/2559737/vid/tos-dash/ATL/streams/d32f8920-612a-4d46-8bc7-d73fd6c17c85/manifest.mpd",
       "media_verification_url":"https://dai.google.com/view/p/service/vod/stream/d32f8920-612a-4d46-8bc7-d73fd6c17c85/loc/ATL/network/124319096/content/2559737/vid/tos-dash/media/",
       "ad_breaks":[
          {
             "type":"pre",
             "start":0,
             "duration":10,
             "ads":[
                {
                   "seq":1,
                   "duration":10,
                   "title":"External NCA1C1L1 Preroll",
                   "description":"External NCA1C1L1 Preroll ad",
                   "clickthrough_url":"https://dai.google.com/ondemand/v1/dash/content/2474148/vid/bbb-clear/location/ATL/stream/d32f8920-612a-4d46-8bc7-d73fd6c17c85/videoclick/5489259204425938365",
                   "events":[
                      {
                         "time":0.1,
                         "type":"start"
                      },
                      {
                         "time":2.5,
                         "type":"firstquartile"
                      },
                      {
                         "time":4.75,
                         "type":"midpoint"
                      },
                      {
                         "time":7.5,
                         "type":"thirdquartile"
                      },
                      {
                         "time":9,
                         "type":"complete"
                      }
                   ]
                }
             ]
          },
          {
             "type":"mid",
             "start":45,
             "duration":10,
             "ads":[
                {.... }
                   ]
                }
             ]
          },
          {
             "type":"post",
             "start":626.458,
             "duration":10,
             "ads":[...]
          }
       ]
    }
    

    Réponse d'erreur

    En cas d'erreurs, les codes d'erreur HTTP standards sont renvoyés sans code corps de la réponse.

  2. Analysez la réponse JSON et stockez les valeurs suivantes:

    • stream_id
    • stream_manifest
    • media_verification_url
    • ad_breaks
  3. Pour effectuer une validation multimédia, écoutez les événements ID3:

    1. Stockez les événements multimédias dans une file d'attente, en enregistrant chaque ID multimédia ainsi que ses code temporel (s'il est présenté par le joueur).
    2. À chaque mise à jour depuis le lecteur, ou à une fréquence définie (recommandé 500 ms), recherchez dans la file d'attente des événements multimédias les événements lus récemment en en comparant les codes temporels des événements avec ceux de la tête de lecture.
    3. Pour les événements multimédias dont la lecture est confirmée, suivez la lecture en en ajoutant l'ID multimédia au point de terminaison de validation des médias et en effectuant une GET.

    Exemple de corps de la requête :

    https://dai.google.com/view/p/service/linear/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/loc/ATL/network/51636543/event/0ndl1dJcRmKDUPxTRjvdog/media/
    

    Exemples de réponses:

    Accepted for asynchronous verification - HTTP/1.1 202 Accepted
    Successful empty response - HTTP/1.1 204 No Content
    Media verification not found - HTTP/1.1 404 Not Found
    Media verification sent by someone else - HTTP/1.1 409 Conflict
    

    Vous pouvez vérifier les événements de suivi dans Activité du flux Surveillance.

  4. Facultatif: Utilisez les données ad_breaks de la réponse de création de flux pour rechercher quel type d'événement a été déclenché.

  5. Supprimez l'événement multimédia de la file d'attente.

Limites

Si vous utilisez l'API dans des WebViews, les limites suivantes s'appliquent concernant au ciblage:

  • UserAgent: le paramètre user-agent est transmis en tant que valeur spécifique au navigateur. au lieu de la plate-forme sous-jacente.
  • rdid, idtype, is_lat: l'ID de l'appareil est n'est pas correctement effectuée, ce qui limite les fonctionnalités suivantes:
    • Limitation de la fréquence d'exposition
    • Rotation séquentielle des annonces
    • Segmentation et ciblage de l'audience

Bonnes pratiques

Le mappage des tags ID3 avec le type d'événement approprié est fastidieux en cas de vidéo à la demande. Utilisez les renvoyé des informations ad_breaks dans le fichier JSON pour rechercher directement l'événement, par exemple : que pour le contenu en direct.

Ressources supplémentaires