Introduction
La fonction de redondance de Brightcove Live permet de garantir des performances fiables pour vos événements en direct en créant un flux de secours sur lequel Live basculera automatiquement en cas d'arrêt du premier flux.
Notez que toutes les requêtes à l'API Live nécessitent les en-têtes suivants :
Clé | Montant | Remarques |
---|---|---|
X-API-KEY |
{votre clé API} | Votre clé doit avoir été fournie lorsque vous avez ouvert votre compte Brightcove Live |
Content-Type |
application/json | Techniquement, le content-type L'en-tête n'est requis que pour les requêtes d'écriture qui incluent un corps de requête, mais ne devrait pas nuire aux requêtes de lecture. |
Créez vos emplois en direct
Pour la configuration redondante, vous devrez créer au moins 2 travaux Brightcove Live. La seule exigence des Jobs est qu'ils soient créés avec le même output
Les paramètres. Le moyen le plus simple d'y parvenir est de créer un travail avec les spécifications de sortie souhaitées, puis d'utiliser le copy_outputs_from_job
paramètre pour créer les tâches supplémentaires.
Il n'y a aucune restriction sur les régions dans lesquelles ces emplois peuvent être créés, cependant, il est recommandé qu'ils soient situés relativement proches les uns des autres.
Une fois les tâches en direct créées, conservez les ID de tâche pour plus tard. Le corps de la requête que vous utiliserez pour ajouter ces travaux à un groupe redondant (voir les sections ci-dessous) ressemblera à ceci :
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Créer le groupe redondant
Pour créer un groupe redondant, vous devez envoyer une POST
demande à :
https://api.bcovlive.io/v1/redundantgroups
Voici un exemple de corps de requête :
{
"ad_insertion": true,
"processing_regions": ["us-west-2"],
"storage_regions": ["us-west-2", "us-east-1"],
"label": "Test RG",
"live_dvr_sliding_window_duration": 1800
}
Le tableau ci-dessous contient une liste complète des champs pour le corps de la demande. Dans plusieurs cas, ceux-ci sont identiques aux champs utilisés pour créer un travail réel. Voir le Référence de l'API en direct pour plus de détails sur les champs.
Champ | Type | Obligatoire ? | Description |
---|---|---|---|
ad_insertion |
booléen | optionnel | Définir sur true si ce flux doit être activé pour SSAI |
add_cdns |
déployer | optionnel | Tableau de fournisseurs CDN supplémentaires à utiliser pour la génération de manifeste. Pour chaque CDN fourni, le manifeste sera préfixé en conséquence |
drm |
objet | optionnel | Pas encore pris en charge |
encryption |
objet | optionnel | Pas encore pris en charge |
label |
chaîne | obligatoire | Une étiquette pour identifier le groupe |
live_dvr_sliding_window_duration |
entier | optionnel | |
notifications |
déployer | optionnel | Tableau d'objets ou de chaînes de destination de notification |
processing_regions |
déployer | obligatoire | Régions de traitement pour le groupe redondant. Cela déterminera quelles régions AWS généreront les manifestes. Recommandé que cela corresponde à storage_regions et aux régions dans lesquelles les tâches en direct sont créées. |
storage_regions |
déployer | obligatoire | Les morceaux de médias et les listes de lecture des régions de stockage seront téléchargés dans S3. Il est recommandé que cela corresponde à processing_regions et aux régions dans lesquelles les tâches en direct sont créées. |
videocloud |
objet | optionnel | Les clients de Video Cloud ont la possibilité de créer une vidéo à utiliser pour la diffusion en direct. |
La réponse ressemblera à ceci :
{
"id": "481ff4cf0bf74956bc2ec6e126588080",
"processing_regions": [
{
"region": "us-west-2",
"probability": 1
}
],
"storage_regions": [
"us-west-2",
"us-east-1"
],
"jobs": [],
"state": "standby",
"label": "Test RG",
"live_dvr_sliding_window_duration": 1800,
"status": {
"us-west-2": null
},
"ad_insertion": true,
"outputs": {
"playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist.m3u8",
"playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist_dvr.m3u8",
"ssai_playback_urls": {
"26f8470f61374e608e27af9c1b3f7ff0": {
"playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_ssaiM.m3u8",
"playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_dvr_ssaiM.m3u8",
"description": "House Ads - 864b84f712ae40bca1510a8052b34312",
"type": "ads"
}
}
}
Obtenez des groupes redondants
Vous pouvez obtenir tous les groupes redondants en soumettant une GET
demande à :
https://api.bcovlive.io/v1/redundantgroups
Vous pouvez filtrer la réponse en utilisant le state
param. Les valeurs autorisées sont les suivantes :
cancelled
cancelling
deleting
disconnected
failed
finished
finishing
processing
standby
waiting
Il y a aussi page_size
paramètre qui peut être défini sur un nombre entier jusqu'à 1000. Le défaut page_size
est de 10.
La réponse ressemblera à ceci :
{
"redundant_groups": [
{
"id": "91c268a6ec5240d79a6004f4ccf0dc6f",
"account_id": "a95ac581551b4478b27910e5675db1f8",
"user_id": "c2691d4d039040be96c190a949d754a7",
"processing_regions": [
{
"region": "us-west-2",
"probability": 1
}
],
"storage_regions": [
"us-west-2",
"us-east-1"
],
"jobs": [],
"state": "standby",
"created_at": 1594316624287,
"updated_at": 1594316624287,
"label": "Test Redundant Group",
"live_dvr_sliding_window_duration": 86400,
"status": {
"us-west-2": null
},
"outputs": {
"playback_url": "https://bcovlive-a.akamaihd.net/r91c268a6ec5240d79a6004f4ccf0dc6f/us-west-2/NA/playlist.m3u8",
"playback_url_dvr": "https://bcovlive-a.akamaihd.net/r91c268a6ec5240d79a6004f4ccf0dc6f/us-west-2/NA/playlist_dvr.m3u8"
}
},
{
"id": "279ac36e4b4d48a3abbd3e1f98cd57aa",
"account_id": "a95ac581551b4478b27910e5675db1f8",
"user_id": "c2691d4d039040be96c190a949d754a7",
"processing_regions": [
{
"region": "us-west-2",
"probability": 1
}
],
"storage_regions": [
"us-west-2",
"us-east-1"
],
"jobs": [],
"state": "standby",
"created_at": 1594323207015,
"updated_at": 1594323207015,
"label": "Test Redundant Group2",
"live_dvr_sliding_window_duration": 86400,
"status": {
"us-west-2": null
},
"outputs": {
"playback_url": "https://bcovlive-a.akamaihd.net/r279ac36e4b4d48a3abbd3e1f98cd57aa/us-west-2/NA/playlist.m3u8",
"playback_url_dvr": "https://bcovlive-a.akamaihd.net/r279ac36e4b4d48a3abbd3e1f98cd57aa/us-west-2/NA/playlist_dvr.m3u8"
}
}
]
}
Ajouter des tâches en direct au groupe redondant
Après avoir créé un groupe redondant, vous pouvez y ajouter des tâches en envoyant une POST
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs
Les identifiants de tâche en direct sont spécifiés dans le corps de la requête comme ceci :
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Il existe quelques propriétés facultatives supplémentaires pour les objets de travail. Le tableau suivant présente tous les champs :
Champ | Type | Obligatoire ? | Description |
---|---|---|---|
job_id |
chaîne | obligatoire | ID du travail à ajouter au groupe. Si ni l'un ni l'autre playlist ou streams sont spécifiés, tous outputs sera utilisé. |
playlist |
chaîne | optionnel | Libellé de la liste de lecture à utiliser comme sorties pour le flux. Si playlist est défini, streams doit être indéfini. |
streams |
déployer | optionnel | Liste des étiquettes de flux à utiliser comme sorties pour le flux. Si streams est défini, playlist doit être indéfini. |
La réponse de succès pour cette demande renverra simplement l'ID de groupe redondant.
Obtenir le statut de groupe redondant
Vous pouvez obtenir le statut d'un groupe redondant en soumettant une GET
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
La réponse ressemblera à ce qui suit :
{
"id": "481ff4cf0bf74956bc2ec6e126588080",
"processing_regions": [
{
"region": "us-west-2",
"probability": 1
}
],
"storage_regions": [
"us-west-2",
"us-east-1"
],
"jobs": [
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633",
"streams": [
"hls720p",
"hls540p",
"hls360p"
],
"state": "processing"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27",
"streams": [
"hls720p",
"hls540p",
"hls360p"
],
"state": "processing"
}
],
"state": "processing",
"created_at": 1568057414849,
"updated_at": 1568059153017,
"label": "Test RG",
"live_dvr_sliding_window_duration": 1800,
"status": {
"us-west-2": {
"SwitchDrift": 0,
"Ended": false,
"OnAir": "0b76bc73f92f46dc917bbe5061c0c633",
"Mode": "auto",
"InManifest": true,
"MediaSequence": 10,
"Healthiness": 0,
"Duration": 4,
"DiscontinuitySequence": 1,
"SourceChunk": {
"MediaSequence": 3639,
"Duration": 4,
"DiscontinuitySequence": 0,
"ProgramDateTime": "2019-09-09T19:59:36Z",
"LiveJobID": "0b76bc73f92f46dc917bbe5061c0c633"
},
"UpdatedAt": "2019-09-09T19:59:46Z",
"ProgramDateTime": "2019-09-09T19:59:36Z"
}
},
"ad_insertion": true,
"outputs": {
"playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist.m3u8",
"playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist_dvr.m3u8",
"ssai_playback_urls": {
"26f8470f61374e608e27af9c1b3f7ff0": {
"playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_ssaiM.m3u8",
"playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_dvr_ssaiM.m3u8",
"description": "House Ads - 864b84f712ae40bca1510a8052b34312",
"type": "ads"
}
}
}
}
Chaque région de traitement du groupe redondant aura sa propre status
objet, codé par région. Vous pouvez voir dans cet exemple que dans le us_west_2
région de transformation, la on_air
le travail est 0b76bc73f92f46dc917bbe5061c0c633
.
En guise de note, la zone probability
associée à la zone de traitement sera toujours à ce stade 1
, mais elle est incluse dans le modèle de données pour l'avenir. améliorations qui autoriseront plusieurs régions de traitement avec des probabilités comprises entre 0 et 1, ce qui représente le pourcentage approximatif du trafic de lecture qui utilisera cette région.
Ajout manuel de points de repère
L'ajout manuel de points de repère à un flux en direct avec redondance est très similaire à l'ajout de points de repère à un flux en direct ordinaire. Pour ce faire pour un groupe redondant, envoyez une POST
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/cuepoint
Incluez un corps de requête comme celui-ci :
{
"ad_server_data": {
"subject": "wildlife"
},
"duration": 30,
"timecode": "09:23:18:05"
}
Si vous omettez le timecode
champ, le point de repère sera inséré immédiatement.
Forcer un basculement de tâche
Le basculement sera géré automatiquement par le système Brightcove Live et ne devrait nécessiter aucune intervention de votre part. Si, pour une raison quelconque, vous souhaitez forcer le basculement vers une autre tâche, le moyen le plus simple de le faire est d'arrêter simplement l'encodeur du on_air
travail.
Vous pouvez également forcer le basculement à l'aide de l'API en adressant une PUT
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/switch
Le corps de la requête ressemble à ceci :
{
"mode": "manual",
"on_air": "0ae5a4a71dc54b3181af0f98ee407c27"
}
Ici, mode
sera soit manual
ou auto
(la valeur par défaut) et le on_air
aura une valeur de l'un des secondaire identifiants de travail.
Remarque : Une fois dans manual
mode, le basculement automatique des tâches ne pas se produire. Tu doit remettre le mode sur auto
pour que le basculement automatique reprenne. Vous pouvez modifier le travail à l'antenne sans passer en mode manuel en omettant le mode du corps et en ajoutant le paramètre de requête de force ?force=true
à votre demande. Cela forcera le service à changer de tâche, mais il peut revenir à tout moment s'il détecte des problèmes.
Mettre fin à un flux redondant
Il existe deux manières de mettre fin à votre flux redondant. De par leur conception, les groupes redondants sont implicitement SEP ruisseaux. Vous pouvez mettre un groupe redondant dans STANDBY
en supprimant tous les Jobs du Groupe redondant.
Pour ce faire, envoyez une DELETE
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs/{job_id}
pour chaque tâche que vous souhaitez supprimer. Notez que pour supprimer la tâche en cours on_air
, vous devrez ajouter le paramètre de ?force=true
requête.
La deuxième méthode pour terminer le flux consiste à supprimer complètement le groupe redondant en envoyant une DELETE
demande à :
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
Contraintes
- Redondance en direct ne peut pas être utilisé avec des flux en direct protégés par DRM.