API en direct : Création de clips VOD
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/oustream_end_timecode
définis dans les codes temporels SMPTE pour l'événement Live Stream - notez que cela nécessite que l'encodeur envoyer des informations de code temporel - Avec
start_time
et/ouend_time
défini par rapport à l'heure de début (stream_start_time
) de l'ensemble de l'événement en direct - Avec
start_time
et/ouend_time
défini en temps Epoch (Unix) (en secondes) - Avec
duration
- L'API VOD pouvez être utilisé avec crypté ou protégé par DRM travaux. Actuellement, le Live Module ne prend pas en charge cela, mais le sera dans une future version.
Remarques
- 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.
- Si vous spécifiez
duration
, le clip résultant sera le suivant :- Si le travail est actif et toujours actif : (durée de la demande - durée) à (heure de la demande)
- Si la tâche est terminée : (
finished_at
- durée) à (finished_at
)
- Si vous spécifiez les deux
start_time
ETend_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 de temps Epoch tombe entièrement dans
created_at
etfinished_at
, le clip sera fait
- Si la tâche est active et toujours active : tant que la fenêtre de temps Epoch tombe entièrement dans
- Clips de flux en direct utilisant SSAI n'inclura pas d'annonces.
- 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).
- 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.
- 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.
- 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 un 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 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 dans l'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 époque spécifique (dans ce cas, le 22 janv. 2018 à 08h24 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
}
}
}
]
}
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": ["http://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 demande inclut les heures et les images de début et de fin dans les codes horaires HH:MM:SS:FF, ainsi que des détails 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": ["http://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 détails 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": ["http://myserver.com/api/notification_listener?type=jvod"]
}
],
}
Dans cet exemple, nous créons un clip d'une durée de 30 secondes et nous l'envoyons dans un compartiment S3. Nous fournissons l'URL du compartiment, y compris le nom du fichier pour le clip, et une chaîne qui est le nom des informations d'identification du compartiment S3 enregistrées - les informations d'identification peuvent être configurées pour votre compte par le support Brightcove.
Champs du corps de la requête
Voici un tableau complet des champs du corps de la requête.
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 |
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, |
outputs.stream_end_time |
Numéro |
Heure de fin en secondes du clip par rapport à l'heure de début du flux en direct, |
outputs.start_time |
Numéro |
Heure de début du clip en temps Epoch (Unix) (secondes), |
outputs.end_time |
Numéro |
Heure de fin du clip en temps Epoch (Unix) (secondes), |
outputs.stream_start_timecode |
Numéro |
Heure de début de l'élément dans un code temporel au format SMPTE (HH:MM:SS:FF) à partir du début du flux, |
outputs.stream_end_timecode |
Numéro |
Heure de fin de l'élément dans un code temporel au format SMPTE (HH:MM:SS:FF) à partir de la fin du flux, |
outputs.url |
Chaîne |
URL de destination du clip, notez que la sortie doit contenir Soit ce |
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 la CMS API Reference for creating a video |
outputs.videocloud.ingest |
Objet |
Un objet contenant des entrées pour l'ingestion Video Cloud vidéo Dynamic Ingest Reference - voir le - n'inclut pas le |
Champs vidéo pour l' Video Cloud ingestion
Voir le Référence de l'API CMS pour plus de détails.
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) | Personnalisé fieldname:value ensembles pour la vidéo - notez que le champ personnalisé qui ne ne pas ont une valeur pour cette vidéo ne sont pas inclus dans cette carte ; les valeurs des champs personnalisés ont une longueur maximale de 1024 caractères à un octet |
description |
Chaîne de caractères; remplace l'ancien 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
.
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.
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 |
Champs de lien vidéo
Le tableau ci-dessous montre les video.link
champs d'objet.
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
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
Champ | Type | Description |
---|---|---|
audio_tracks optionnel Livraison dynamique uniquement |
Objet[] |
tableau d'objets de piste audio - reportez-vous à la section 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 ajouter les nouvelles pistes ( Valeur par défaut: |
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 : |
profile optionnel |
Chaîne |
profil d'ingestion à utiliser pour le transcodage ; s'il est absent, le profil par défaut sera utilisé |
text_tracks optionnel |
Objet[] |
tableau d' |
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: Valeurs autorisées : |
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 |
si l'affiche et la vignette doivent être capturées pendant le transcodage ; la valeur par défaut est |
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
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) |