API en direct : Création de clips VOD

Dans cette rubrique, vous apprendrez à utiliser l'API Live pour créer des clips de vidéo à la demande (VOD) à partir de vos flux en direct.

Aperçu

Les clips sont des vidéos extraites d'un flux en direct. Ils peuvent être envoyés à un compartiment S3, à un site FTP ou à un Video Cloud compte. Le clip est créé en tant que vidéo MP4, et c'est ce qui est envoyé à la destination dans tous les cas. Dans le cas de Video Cloud, le MP4 sera transcodé par le système ingest, et les types de rendus créés pour la vidéo dépendront du profil d'ingeste utilisé.

Les définitions des clips sont créées à l'aide du /vods point final.

Les clips peuvent être créés de plusieurs manières :

  • Avec stream_start_timecode et/ou stream_end_timecode définis dans les codes temporels SMPTE pour l'événement diffusé en direct. Notez que cela nécessite que l'encodeur envoie des informations de timecode
  • Avec start_time et/ou end_time définie par rapport à l'heure de début ( stream_start_time) de l'ensemble de l'événement diffusé en direct
  • Avec start_time et/ou end_time défini en temps Epoch (Unix) (en secondes)
  • Avec duration
  • L'API Live et le module Live prennent tous deux en charge la création de clips à partir de travaux cryptés ou protégés par DRM.

Remarques

  1. Pour rendre les clips disponibles le plus rapidement possible, un clip précis au segment est d'abord créé, puis remplacé par un clip précis à l'image dès qu'il est disponible.
  2. Si vous le spécifiez duration, le clip obtenu sera le suivant :
    • Si l'offre est active et toujours en ligne : (heure de la demande - durée) à (heure de la demande)
    • Si le travail est terminé : ( finished_at- durée) à ( finished_at)
  3. Si vous spécifiez à la fois start_time ET end_time:
    • Si la tâche est active et toujours active : tant que la fenêtre de temps Epoch tombe entièrement dans created_at et l'heure de la demande, le clip sera fait
    • Si le travail est terminé : tant que la fenêtre temporelle d'Epoch se situe entièrement dans les limites created_at et finished_at que le clip sera créé
  4. Clips de flux en direct utilisant SSAI n'inclura pas d'annonces.
  5. Les clips peuvent être créés jusqu'à 7 jours après un événement. Pour SEP, ils peuvent être créés jusqu'à la prochaine activation ou 7 jours (selon la durée la plus courte).
  6. L'API VOD n'ajoutera aucun contenu en dehors de ce qui est présent dans le flux. Si vous spécifiez 350 sur un flux en direct de 300 secondes, la sortie durera 300 secondes.
  7. Vous n'avez pas besoin d'utiliser un flux en direct compatible DVR pour que l'écrêtage fonctionne, car le flux en direct est stocké au fur et à mesure de sa diffusion et est disponible immédiatement et pendant 7 jours après la fin de l'événement.
  8. L'écrêtage Brightcove Live ne produira qu'un élément ayant la même résolution que la sortie de résolution la plus élevée. Il ne correspondra pas à la résolution d'entrée source (à moins qu'elle ne soit la même que la sortie de résolution la plus élevée).

Les clips peuvent également être envoyés vers plusieurs destinations :

  • Un Video Cloud compte
  • Un serveur FTP
  • Un seau S3

Lorsque vous spécifiez un élément, la sortie doit contenir soit une url destination, soit un videocloud objet pour détailler la création du vidéo et l'ingestion du clip dans Video Cloud.

Remarque : clips peut être créé pendant que le flux en direct est en cours d'exécution. Pour ce faire, vous devrez définir les heures de début et de fin du clip en temps Epoch ou par rapport à début l'heure de la diffusion en direct.

Crédits

Si la destination à laquelle vous envoyez le clip nécessite des informations d'identification pour y accéder, vous pouvez les créer à l'aide des opérations d'identification de l'API Live. Voir Gestion des informations d'identification pour l'API Live pour plus de détails.

Point de terminaison

Les clips sont créés en envoyant une POST demande à :

https://api.bcovlive.io/v1/vods

Corps de la demande - Video Cloud

Exemple 1 : heures de début/fin par rapport au début du flux

Le corps de la demande comprend les heures de début et de fin, ainsi que des détails sur l'endroit où envoyer le clip. Voici un exemple de corps de requête qui crée un clip de la troisième minute d'un flux et l'envoie à un Video Cloud compte :

{
  "live_job_id":"PUT-LIVE-JOB-ID-HERE",
  "outputs":[
    {
      "label": "60 secs by stream from min 2 to min 3",
      "stream_start_time": 120,
      "stream_end_time": 180,
      "credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
      "videocloud": {
        "video": {
        "name": "One Minute Clip",
        "tags": ["live", "clip"]
        },
          "ingest": {
            "capture-images": true
        }
      }
    }
  ]
}

Dans cet exemple, nous créons un clip d'une durée d'une minute et nous l'envoyons à Video Cloud. Nous donnons au clip un nom et quelques balises, sans spécifier le ingest profile pour le retranscodage, de sorte que la valeur par défaut du compte sera utilisée, et nous vous demandons de Video Cloud capturer des images miniatures et affiches à partir du clip pendant transcodage.

Exemple 2 : heures de début/fin en heure d'époque

Le corps de la demande inclut les heures de début et de fin dans l'heure Epoch, et des détails sur l'endroit où envoyer le clip. Voici un exemple de corps de requête qui crée un clip de la troisième minute d'un flux et l'envoie à un Video Cloud compte :

{
  "live_job_id":"PUT-LIVE-JOB-ID-HERE",
    "outputs":[
      {
        "label": "60 secs - epoch time",
        "start_time": 1516652694,
        "end_time": 1516652754,
        "credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
        "videocloud": {
          "video": {
          "name": "One Minute Clip",
          "tags": ["live", "clip"]
          },
            "ingest": {
            "capture-images": true
        }
      }
    }
  ]
}

Dans cet exemple, nous créons un clip d'une durée d'une minute à une heure précise d'époque (dans ce cas, le 22 janvier 2018 à 08:24:54 GMT).

Exemple 3 : durée avec heure de début par rapport au début du flux

Le corps de la requête inclut la durée et stream_start_time, ainsi que des détails sur l'endroit où envoyer le clip. Voici un exemple de corps de requête qui crée un clip de la troisième minute d'un flux et l'envoie à un Video Cloud compte :

{
  "live_job_id":"PUT-LIVE-JOB-ID-HERE",
  "outputs":[
    {
      "label": "60 secs from start time",
      "stream_start_time": 300,
      "duration": 60,
      "credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
      "videocloud": {
        "video": {
        "name": "One Minute Clip",
        "tags": ["live", "clip"]
        },
        "ingest": {
        "capture-images": true,
        "profile": "valid-ingest-profile-name"
        }
      }
    }
  ]
}

Dans cet exemple, nous créons un clip d'une durée d'une minute commençant 5 minutes après le début de la diffusion en direct.

Exemple 4 : durée sans heure de début ni de fin

Le corps de la demande inclut les heures de début et de fin dans l'heure Epoch, et des détails sur l'endroit où envoyer le clip. Voici un exemple de corps de requête qui crée un clip de la troisième minute d'un flux et l'envoie à un Video Cloud compte :

{
  "live_job_id":"PUT-LIVE-JOB-ID-HERE",
  "outputs":[
    {
      "label": "60 secs - duration",
      "duration": 60,
      "credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
      "videocloud": {
        "video": {
        "name": "One Minute Clip",
        "tags": ["live", "clip"]
        },
        "ingest": {
          "capture-images": true
        }
      },
      "notifications": ["https://myserver.com/api/notification_listener?type=jvod"]
    }
  ]
}

Dans cet exemple, nous créons un clip d'une durée d'une minute. Étant donné que nous ne spécifions pas d'heure de début ou de fin, le clip sera extrait des 60 dernières secondes du flux en direct.

Exemple 5 : utilisation stream_start_timecode et stream_end_timecode

Le corps de la requête inclut les heures et les images de début et de fin dans les codes temporels HH:MM:SS:FF, ainsi que des informations sur l'endroit où envoyer le clip. Notez que pour utiliser des codes temporels, l'encodeur doit envoyer des codes temporels. Voici un exemple de corps de requête qui crée un clip des 50 minutes d'un flux et l'envoie à un Video Cloud compte :

{
  "live_job_id":"PUT-LIVE-JOB-ID-HERE",
  "outputs":[
    {
      "label": "Clipping using Timecode from-01:10:18:15 to-01:11:08:15",
      "stream_start_timecode": "01:10:18:15",
      "stream_end_timecode": "01:11:08:15",
      "credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
      "videocloud": {
        "video": {
          "name": "Fifty Minute Clip",
          "tags": ["live", "clip"]
        },
        "ingest": {
        "capture-images": true
        }
      }
    },
    "notifications": ["https://myserver.com/api/notification_listener?type=jvod"]
  ]
}

Informations générales sur l'envoi de clips à Video Cloud

Pour voir quels champs peuvent être inclus dans le video et ingest objets, voir le Dynamic Ingest API Reference.

Corps de la demande - S3

Le corps de la demande comprend les heures de début et de fin, ainsi que des informations sur l'endroit où envoyer le clip. Voici un exemple de corps de requête qui crée un extrait de la troisième minute d'un flux et l'envoie à un compartiment S3 :

{
  "live_job_id":"",
  "outputs":[
    {
      "label": "last_30",
      "duration": 30,
      "url": "s3://YOUR_BUCKET_NAME/file_name.mp4",
      "credentials": "s3-credentials",
      "notifications": ["https://myserver.com/api/notification_listener?type=jvod"]
    }
  ],
}

Dans cet exemple, nous créons un clip d'une durée de 30 secondes et l'envoyons vers un compartiment S3. Nous fournissons l'URL du seau, y compris le nom du fichier pour le clip, et une chaîne qui est le nom des informations d'identification du seau S3 sauvegardé.

Vous pouvez créer et gérer des informations d'identification à l'aide de l'API Live. Pour plus de détails, voir les points suivants :

Champs du corps de la requête

Voici un tableau complet des champs du corps de la requête.

Champs du corps de la demande
Champ Type Description
live_job_id Chaîne

L'identifiant du travail Live Stream à partir duquel créer le clip VOD.

outputs Objet[]

Tableau de sorties VOD

outputs.label Chaîne

Étiquette pour la sortie

outputs.duration Numéro

Durée du clip en secondes. Le duration peut être utilisé seul pour définir un clip qui sera constitué des dernières {duration} secondes du flux. duration peut également être utilisé avec n'importe lequel stream_start_time des stream_end_time, start_time, end_time, stream_end_timecode, ou stream_start_timecode.

outputs.stream_start_time Numéro

Heure de début en secondes du clip par rapport à l'heure de début du flux en direct, stream_start_time doit être utilisé avec Soit stream_end_time ou duration.

outputs.stream_end_time Numéro

Heure de fin en secondes du clip par rapport à l'heure de début du flux en direct, stream_end_time doit être utilisé avec Soit stream_start_time ou duration.

outputs.start_time Numéro

Heure de début du clip en temps Epoch (Unix) (secondes), start_time doit être utilisé avec Soit end_time ou duration.

outputs.end_time Numéro

Heure de fin du clip en temps Epoch (Unix) (secondes), end_time doit être utilisé avec Soit start_time ou duration.

outputs.stream_start_timecode Numéro

L'heure de début du clip dans un code temporel au format SMPTE (HH:MM:SS:FF) à partir du début du flux, stream_start_timecode doit être utilisée avec l'une stream_end_timecode ou l'autre duration.

outputs.stream_end_timecode Numéro

L'heure de fin du clip dans un code temporel au format SMPTE (HH:MM:SS:FF) à partir de la fin du flux outputs.stream_end_timecode doit être utilisée avec l'une stream_start_timecode ou l'autre duration.

outputs.url Chaîne

URL de destination du clip, notez que la sortie doit contenir Soit ce url champ ou une videocloud objet définissant les propriétés vidéo et les options d'acquisition pour Video Cloud.

outputs.credentials Chaîne

Le nom des identifiants configurés dans votre compte pour cette adresse

outputs.videocloud Objet

Objet contenant des entrées pour l' Video Cloud ingestion

outputs.videocloud.video Objet

Un objet contenant des entrées pour la création d'objets Video Cloud vidéo (voir le CMS API Reference for creating a video

outputs.videocloud.ingest Objet

Un objet contenant des entrées pour l'ingestion de Video Cloud vidéos (voir le Dynamic Ingest Reference-) n' inclut pas le master champ, car ces informations seront fournies par l'API Live. Si aucun profil d'ingestion n'est spécifié, le profil par défaut du compte sera utilisé.

Champs vidéo pour l' Video Cloud ingestion

Voir le Référence de l'API CMS pour plus de détails.

Champs vidéo
Champ Type Description
ad_keys Chaîne Chaîne représentant les paires clé/valeur d'annonce attribuées à la vidéo. Les paires clé/valeur sont formatées comme clé=valeur et sont séparées par des esperluettes. Par exemple : "adKeys": "category=sports&live=true"
cue_points Tableau de cartes tableau de cartes de points de repère
custom_fields Carte des paires champ-valeur (Strings) Coutume fieldname:value ensembles pour la vidéo - notez que le champ personnalisé qui fait pas ont une valeur pour cette vidéo ne sont pas inclus dans cette carte ; les valeurs de champ personnalisées ont une longueur maximale de 1024 caractères à un octet
description Chaîne ; remplace l'ancienne ShortDescription Brève description de la vidéo (longueur maximale : 248 caractères à un octet)
economics Chaîne, doit être l'une des valeurs d'énumération valides soit "AD_SUPPORTED" (par défaut) soit "GRATUIT"
geo Carte des paires propriété-valeur Propriétés de géo-restriction pour la vidéo
link Carte des paires propriété-valeur Carte des propriétés des liens associés
long_description Chaîne Description longue (jusqu'à 5000 caractères)
name Chaîne Le nom de la vidéo (longueur maximale : 248 caractères à un octet) obligatoire
offline_enabled Booléen Si la vidéo est activée pour la lecture hors ligne
projection Chaîne La projection cartographique pour les vidéos 360°, par exemple "équirectangulaire"
reference_id Chaîne Un identifiant spécifié par l'utilisateur qui identifie de manière unique la vidéo, limité à 150 caractères. Un referenceId peut être utilisé comme clé étrangère pour identifier cette vidéo dans un autre système. L'ID de référence ne doit pas contenir d'espaces, de virgules ou de caractères spéciaux.
schedule Carte des paires propriété-valeur Carte des dates de début et de fin pour la disponibilité de la vidéo
state Chaîne ACTIF INACTIF
tags Tableau de balises (Strings) Tableau de balises assignées à la vidéo
text_tracks Tableau de pistes de texte de style HTML5 Tableau de pistes de texte (fichiers WebVTT) assignées à la vidéo

Champs de point de repère vidéo

Le tableau ci-dessous présente les champs pour video.cuepoints.

Champs de point de repère
Champ Type Description
id Chaîne Identifiant système du point de repère
force_stop Booléen Si la vidéo doit être arrêtée au point de repère
metadata Chaîne ; point de code uniquement Une chaîne de métadonnées associée au point de repère
name String Le nom du point de repère
time Flotteur Temps du point de repère en secondes mesuré depuis le début de la vidéo
type String Le type de point de repère ( AD ou DATA)

Champs géographiques vidéo

Le tableau ci-dessous montre les video.geo champs d'objet.

Champs de géofiltrage
Champ Type Description
countries Tableau des chaînes de codes de pays Tableau de la liste ISO 3166 de codes à 2 ou 4 lettres (https://www.iso.org/obp/ui/) pour les pays dans lesquels la vidéo est autorisée ou non à jouer
exclude_countries Booléen Si vrai, le tableau des pays est traité comme une liste de pays exclus de l'affichage
restricted Booléen Si le filtrage géographique est activé pour cette vidéo

Le tableau ci-dessous montre les video.link champs d'objet.

Champs de lien
Champ Type Description
url Chaîne URL du lien associé
text Chaîne Texte du lien connexe

Champs de programmation vidéo

Le tableau ci-dessous présente les champs de video.schedule objet

video.schedule Fields
Champ Type Description
ends_at Chaîne au format de date ISO-8601 Date et heure à laquelle la vidéo n'est plus disponible pour la visualisation
starts_at Chaîne au format de date ISO-8601 Date-heure à laquelle la vidéo devient disponible pour la visualisation

Video Cloud Ingérer les champs

Video Cloud Champs d'ingestion
Champ Type Description
audio_tracks optionnel Livraison dynamique uniquement Objet[]

tableau d'objets de pistes audio : voir Implémentation de plusieurs pistes audio à l'aide des API pour plus d'informations.

audio_tracks.merge_with_existing optionnel Booléen

s'il faut remplacer les pistes audio existantes ou en ajouter de nouvelles (actuellement, seule false est prise en charge) Diffusion dynamique uniquement

Valeur par défaut : false

audio_tracks.masters optionnel Objet[]

tableau d'objets de piste audio Livraison dynamique uniquement

audio_tracks.masters.url optionnel Chaîne

URL du fichier audio Livraison dynamique uniquement

audio_tracks.masters.language optionnel Chaîne

Code de langue pour la piste audio à partir des sous-étiquettes dans https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry (la valeur par défaut peut être définie pour le compte en contactant l'assistance Brightcove) Livraison dynamique uniquement

audio_tracks.masters.variant optionnel Chaîne

le type de piste audio (la valeur par défaut peut être définie pour le compte en contactant l'assistance Brightcove) Livraison dynamique uniquement

Valeurs autorisées : "main" "alternate", "commentary", "dub", "descriptive"

profile optionnel Chaîne

l' ID (et non le nom) du profil d'ingestion à utiliser pour le transcodage ; en cas d'absence, le profil par défaut sera utilisé (il est recommandé d'omettre ce champ et d'utiliser le profil par défaut)

text_tracks optionnel Objet[]

tableau d' text_tracks objets - voir Ingestion de fichiers WebVTT (pistes de texte)

text_tracks.url URL

URL d'un fichier WebVTT

text_tracks.srclang Chaîne

Code de langue ISO 639 à 2 lettres (alpha-2) pour les pistes de texte

text_tracks.kind optionnel Chaîne

comment le fichier vtt est destiné à être utilisé

Valeur par défaut : captions

Valeurs autorisées : "captions" "subtitles", "chapters", "metadata"

text_tracks.label optionnel Chaîne

titre lisible par l'utilisateur

text_tracks.default optionnel Booléen

définit la langue par défaut pour les légendes/sous-titres

capture-images optionnel Booléen

indique si l'affiche et la miniature doivent être capturées pendant le transcodage ; par défaut, true si le profil possède des rendus d'images, false si ce n'est pas le cas. Voir Images et API Dynamic Ingest pour plus d'informations

poster optionnel Objet

l'affiche vidéo à ingérer. Voir Images et API Dynamic Ingestion pour plus d'informations

poster.url URL

URL de l'image de l'affiche vidéo

poster.height optionnel Entier

hauteur de pixel de l'image

poster.width optionnel Entier

largeur en pixels de l'image

thumbnail optionnel Objet

la vignette vidéo à ingérer. Voir Images et API d'ingestion dynamique pour plus d'informations.

thumbnail.url URL

URL de l'image miniature de la vidéo

thumbnail.height optionnel Entier

hauteur de pixel de l'image

thumbnail.width optionnel Entier

largeur en pixels de l'image

callbacks optionnel Chaîne de caractères[] Tableau d'URL qui avis doit être envoyé à

 

Réponse de l'API

La réponse à une demande de création de clip inclut un identifiant pour la tâche et le libellé que vous avez défini dans le corps de la demande, ainsi que l'identifiant de la tâche en direct :

{
  "vod_jobs": [
    {
      "jvod_id": "9582606c50d84be5ad4bc104f2aa3360",
      "label": "last 60 secs of live job"
    }
  ],
  "live_job_id": "88ba5d87b61a4ef3a6dddabd0c38d319"
}

Champs de réponse

Champs du corps de la réponse
Champ Type Description
vod_jobs Objet

L'objet de réponse de clip

jvod_id Chaîne

L'identifiant de la tâche de clip

label Chaîne

L'étiquette du clip (depuis l'entrée)

live_job_id Chaîne

L'identifiant du travail en direct (à partir de l'entrée)