Implémentation des améliorations de lecteur pour Live SSAI

Dans cette rubrique, vous apprendrez comment créer un flux en direct avec des annonces côté serveur qui utilise les améliorations du lecteur pour SSAI en direct afin d'améliorer l'expérience utilisateur.

Introduction

Les améliorations du lecteur Brightcove pour Live SSAI vous permettent d'améliorer les coupures publicitaires dans les diffusions en direct avec le nombre de publicités, les comptes à rebours des publicités, les publicités cliquables et les publicités associées.

Les informations de votre annonce sont spécifiées à l'aide d'une configuration d'annonce qui récupère les réponses VAST afin d'identifier les annonces à afficher. Le fichier VAST contient également des informations sur les annonces compagnons et les URL de balise.

Flux de travail

Pour créer un flux en direct avec SSAI et améliorations du lecteur, procédez comme suit :

  1. Demandez à votre gestionnaire de compte d'activer votre compte pour les flux en direct, l'insertion d'annonces côté serveur (SSAI) et les Améliorations du lecteur pour Live SSAI.
  2. Créer une configuration d'annonce
  3. Optionnel: Créer des actifs d'ardoise pour remplir le temps publicitaire inutilisé
  4. Créer un travail en direct
  5. Créer le jeton de lecture
  6. Configurer le lecteur
  7. Commencer le streaming
  8. Déclencher des annonces en utilisant des points de repère (cela peut être fait avant ou pendant l'événement en direct)
  9. Nettoyage

Créer une configuration d'annonce

Une configuration d'annonce définit les informations nécessaires pour inclure des annonces côté serveur dans un flux en direct. Cela inclut l'URL du fournisseur d'annonces, le type de réponse attendue et l'envoi de balises.

Pour créer une nouvelle configuration d'annonce, envoyez un POST demande comme suit :

Méthode POST
URL https://api.bcovlive.io/v1/ssai/applications
Entête X-API-KEY: your API KEY
Type de contenu : application/json

Toutes les demandes sont authentifiées à l'aide d'une clé API qui vous est fournie lors de la configuration de votre compte. La clé est passée dans l' X-API-KEY en-tête.

Corps de la demande

Pour plus de détails sur les champs du corps de la requête, consultez le Référence de l'API en direct document.

Avec Player Améliorations for Live SSAI, les champs mis en surbrillance peuvent être définis à l'intérieur de l' application_ad_configuration objet.

Exemple de corps de requête :

{
  "application_ad_configuration": {
	"ad_configuration_description": "your ad config description",
    "ad_configuration_expected_response_type": "Vast",
	"ad_configuration_headers_for_impressions": false,
	"ad_configuration_strategy": "SingleAdResponse",
	"ad_configuration_transforms": [],
	"ad_configuration_url_format": "your ad server",
    "ad_configuration_client_sdk_enabled": true,
    "client_options": {
      "show_ad_break_remaining_time": true / false,
      "show_ad_remaining_time": true / false,
      "show_number_of_remaining_ads": true / false,
      "client_only_tracking": true / false
    }
  },
  "application_description": "your application description"
}

Voici les champs de configuration des annonces associés aux améliorations du lecteur avec Live SSAI :

Champ Type Obligatoire Description
ad_configuration_expected_response_type Chaîne Oui Pour cette fonctionnalité, les configurations d'annonces DOIVENT avoir une valeur de Vast
ad_configuration_client_sdk_enabled Booléen Oui Pour activer cette fonctionnalité, ce champ doit avoir la valeur true
client_options Objet Un objet de champs liés aux améliorations du lecteur
client_options.
show_ad_break_remaining_time
Booléen Afficher le temps restant pour une coupure publicitaire
Valeurs: true/false
client_options.
show_ad_remaining_time
Booléen Afficher le temps restant pour une annonce
Valeurs: true/false
client_options.
show_number_of_remaining_ads
Booléen Afficher le nombre d'annonces restant dans la coupure publicitaire
Valeurs: true/false
client_options.
client_only_tracking
Booléen Désactiver les événements de suivi côté serveur (impressions / quartiles)
Valeurs: truefalse
Défaut: false


Réponse

Réponse de l'échantillon :

{
  "application": {
    "application_description": "Test ad configuration",
    "application_ad_configuration": {
    "ad_configuration_description": "Ad config description",
    "ad_configuration_expected_response_type": "Vast",
    "ad_configuration_strategy": "SingleAdResponse",
    "ad_configuration_transforms": [],
    "ad_configuration_url_format": "https://solutions.brightcove.com/bcls/ads/simple-vast.xml",
    "ad_configuration_headers_for_impressions": false,
    "ad_configuration_client_sdk_enabled": true,
    "client_options": {
      "show_ad_break_remaining_time": true,
      "show_ad_remaining_time": true,
      "show_number_of_remaining_ads": true,
      "client_only_tracking": true
    }
    },
    "application_id": "1234567890abcdefghijkl",
    "application_type": "ads",
    "account_id": "001122334455aabbccddee"
  },
  "action": "inserted"
}

Après avoir créé une configuration d'annonce, copiez l' application_id (ID de configuration de l'annonce) qui a été généré. Vous en aurez besoin plus tard pour trouver l'URL de lecture SSAI.

Pour répertorier, mettre à jour et supprimer des configurations d'annonces, consultez le Gérer les configurations d'annonces document

Créer un emploi en direct

Pour créer une tâche dynamique, envoyez une POST demande comme suit :

Méthode POST
URL https://api.bcovlive.io/v1/jobs
Headers X-API-KEY: your API KEY
Type de contenu : application/json

Corps de la demande

Pour plus de détails sur les champs du corps de la requête, consultez le Référence de l'API en direct document.

Pour un travail en direct avec SSAI activé, définissez ad_insertion: true dans le corps de votre requête HTTP.

Exemple de demande (vidéo Video Cloud)

Pour créer une vidéo Video Cloud à utiliser pour votre diffusion en direct et pour créer des clips VOD à partir du flux en direct, incluez le videocloud objet dans le corps de la requête. Pour plus de détails, consultez le API en direct : Création d'un document VOD Clips.

Le champ en surbrillance ci-dessous est nécessaire pour l'insertion d'annonces côté serveur (SSAI).

{
  "live_stream": true,
  "ad_insertion": true,
  "region": "us-west-2",
  "reconnect_time": 1800,
  "outputs": [{
      "label": "hls720p",
      "live_stream": true,
      "width": 1280,
      "height": 720,
      "video_codec": "h264",
      "h264_profile": "high",
      "video_bitrate": 2100,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "width": 960,
      "height": 540,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 1500,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls360p",
      "live_stream": true,
      "width": 640,
      "height": 360,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 800,
      "segment_seconds": 4,
      "keyframe_interval": 60
    }
  ],
  "videocloud": {
    "video": {
      "name": "Live SSAI VideoCloud Asset",
      "description": "",
      "long_description": "",
      "tags": [],
      "reference_id": "live_ssai_vc_asset",
      "link": {
      "url": "",
      "text": ""
    },
    "schedule": {
      "starts_at": null,
      "ends_at": null
    },
    "custom_fields": {}
    }
  }
}

Demande d'échantillon (vidéo à distance)

Pour utiliser une vidéo distante pour votre diffusion en direct, le corps de votre requête doit ressembler à ceci.

Le champ en surbrillance ci-dessous est nécessaire pour l'insertion d'annonces côté serveur (SSAI).

{
  "live_stream":true,
  "ad_insertion":true,
  "region":"us-west-2",
  "reconnect_time":1800,
  "outputs":[
    {
      "label": "hls720p",
      "live_stream": true,
      "width": 1280,
      "height": 720,
      "video_codec": "h264",
      "h264_profile": "high",
      "video_bitrate": 2100,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "width": 960,
      "height": 540,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 1500,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls360p",
      "live_stream": true,
      "width": 640,
      "height": 360,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 800,
      "segment_seconds": 4,
      "keyframe_interval": 60
    }
  ]
}

Autres ressources utiles :

Réponse

Exemple de réponse (vidéo Video Cloud)
{
 "id": "227356abcdefghijklmno12345",
 "outputs": [
  {
   "id": "0-2273561a201ec18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls720p"
  },
  {
   "id": "1-2273561a201e8c18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls540p"
  },
  {
   "id": "2-2273561a201ec18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls360p"
  },
  {
   "id": "3-2273561a201ec18",
   "playlist_type": "defaultS3",
   "type": "playlist",
   "filename": "playlist.m3u8",
   "dvr_filename": "playlist_dvr.m3u8",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist_dvr.m3u8",
   "ssai_playback_urls": {
    "b907ac7935e2": {
     "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test ad configuration for SLS",
     "type": "ads"
    },
    "dc9aa8ee3520f2": {
     "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test live ad config for SLS",
     "type": "ads"
    }
   },
   "playback_added_cdns": []
  }
 ],
 "stream_url": "rtmp://ec2-54-184-149-60.us-west-2.compute.amazonaws.com:1935/2273561a201ec18",
 "stream_name": "alive",
 "static": false,
 "job_videocloud_asset_id": "6227380655001",
 "encryption": {},
 "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist.m3u8",
 "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist_dvr.m3u8",
 "ssai_playback_urls": {
  "b907ac7935e2": {
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test ad configuration for SLS",
   "type": "ads"
  },
  "dc9aa8ee3520f2": {
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test live ad config for SLS",
   "type": "ads"
  }
 },
 "playback_added_cdns": []
}

Exemple de réponse (vidéo à distance)
{
 "id": "bbccddeeffgghhiijjkk0011223344",
 "outputs": [
  {
   "id": "0-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls720p"
  },
  {
   "id": "1-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls540p"
  },
  {
   "id": "2-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls360p"
  },
  {
   "id": "3-bbccddeeffgghhiijjkk0011223344",
   "playlist_type": "defaultS3",
   "type": "playlist",
   "filename": "playlist.m3u8",
   "dvr_filename": "playlist_dvr.m3u8",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist_dvr.m3u8",
   "ssai_playback_urls": {
    "91bc2d5ff4a4441db34c2457c751c3ca": {
     "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test ad configuration",
     "type": "ads"
    },
    "e7f6e9a3022a45e1b0b322ba57399150": {
     "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/e7f6e9a3022a45e1b0b322ba57399150/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/e7f6e9a3022a45e1b0b322ba57399150/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "House Ads - 0077db20eb444b5daa7487438c90a271",
     "type": "ads"
    }
   }
  }
 ],
 "stream_url": "rtmp://ep4-usw2.bcovlive.io:1935/bbccddeeffgghhiijjkk0011223344",
 "stream_name": "alive",
 "static": false,
 "encryption": {},
 "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist.m3u8",
 "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist_dvr.m3u8",
 "ssai_playback_urls": {
  "91bc2d5ff4a4441db34c2457c751c3ca": {
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test ad configuration",
   "type": "ads"
  }
 }
}

À partir de la réponse de l'API, notez les valeurs de champ suivantes pour l'étape suivante :

  • id- Votre identifiant de travail en direct
  • stream_url, stream_name- Entrées pour votre encodeur de flux en direct
  • job_videocloud_asset_id- ID vidéo Video Cloud

Créer le jeton de lecture

Vous aurez besoin du jeton de lecture avec votre lecteur.

Pour créer le jeton de lecture, envoyez une POST requête comme suit :

Méthode POST
URL https://api.bcovlive.io/v1/jobs/your live job id/playback-token
Headers X-API-KEY: your API KEY
Type de contenu : application/json

Corps de la demande

Exemple de corps de requête :

{
   "dvr":true / false,
   "application_id":"your ad config id"
}

Réponse

Réponse de l'échantillon :

{
 "playback_token": "live.JhQabcdefghijkl000000000abcdefghi"
}

Le corps de la réponse inclura un jeton de lecture généré. Utilisez cette option lors d'un appel d'API de lecture avec votre lecteur.

Configurer le lecteur

Le processus de lecture de votre flux en direct à partir de l'API Playback est légèrement différent de la façon dont vous lisez une vidéo Video Cloud normale. En plus de fournir l'identifiant vidéo (id de référence), vous devez inclure un jeton de lecture qui identifie la configuration de l'annonce que vous souhaitez utiliser. Vous devrez également spécifier si vous voulez la lecture DVR.

Lecteur Web

Pour plus de détails sur la configuration du Brightcove Player, consultez le Utilisation des améliorations de lecteur pour Live SSAI avec Brightcove Player document.

Lecteur Android natif

Pour plus de détails sur la configuration de Native Player pour Android, consultez le Utilisation des améliorations de lecteur pour Live SSAI avec les SDK natifs document.

Lecteur iOS natif

Pour plus de détails sur la configuration de Native Player pour iOS, consultez le Utilisation des améliorations de lecteur pour Live SSAI avec les SDK natifs document.

Commencer le streaming

Il existe de nombreux outils pour créer un événement de streaming en direct. Voici quelques encodeurs que vous pouvez utiliser pour produire un flux en direct livré par un CDN :

Nettoyage

Lorsque votre flux en direct est terminé, vous pouvez nettoyer les artefacts de votre flux comme suit :

  1. Arrêtez votre encodeur de streaming
  2. Annuler le travail en direct.

    Pour annuler une tâche en cours, envoyez une PUT demande comme suit :

    Méthode PUT
    URL https://api.bcovlive.io/v1/jobs/your live job id/cancel
    Headers X-API-KEY: your API KEY
    Type de contenu : application/json

    Pour plus de détails, consultez le Référence de l'API en direct document.

  3. Supprimer la configuration de votre annonce

    Pour supprimer une configuration d'annonce, envoyez un DELETE demande comme suit :

    Méthode PUT
    URL https://api.bcovlive.io/v1/ssai/applications/application/your ad config id
    Headers X-API-KEY: your API KEY
    Type de contenu : application/json

    Pour plus de détails, consultez le Référence de l'API en direct document.