Introducción
La función de redundancia de Brightcove Live ayuda a asegurar un rendimiento confiable para sus eventos en vivo mediante la creación de una transmisión de respaldo a la que Live realizará una conmutación por error automáticamente en caso de que la primera transmisión deje de funcionar.
Tenga en cuenta que todas las solicitudes a la API en vivo requieren los siguientes encabezados:
Clave | Valor | Notas |
---|---|---|
X-API-KEY |
{your API Key} | Su clave debería haber sido proporcionada cuando abrió su cuenta Brightcove Live |
Content-Type |
aplicación / json | Técnicamente, el content-type El encabezado solo es necesario para las solicitudes de escritura que incluyen un cuerpo de solicitud, pero no debería dañar las solicitudes de lectura. |
Crea tus trabajos en vivo
Para la configuración redundante, deberá crear 2 o más Brightcove Live Jobs. El único requisito de los trabajos es que se creen con el mismo output
ajustes. La forma más sencilla de lograrlo es crear un trabajo con las especificaciones de salida que desee y luego utilizar el copy_outputs_from_job
parámetro para crear los trabajos adicionales.
No hay restricciones sobre las regiones en las que se pueden crear estos puestos de trabajo, sin embargo, se recomienda que estén ubicados relativamente cerca unos de otros.
Una vez que se hayan creado los trabajos en vivo, conserve las ID de trabajo para más adelante. El cuerpo de la solicitud que utilizará para agregar estos trabajos a un grupo redundante (consulte las secciones a continuación) se verá así:
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Crea el grupo redundante
Para crear un grupo redundante, deberá enviar un POST
solicitud de:
https://api.bcovlive.io/v1/redundantgroups
Aquí hay un cuerpo de solicitud de muestra:
{
"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
}
La siguiente tabla contiene una lista completa de campos para el cuerpo de la solicitud. En varios casos, son idénticos a los campos utilizados para crear un trabajo en vivo. Ver el Referencia de API en vivo para obtener más detalles sobre los campos.
Campo | Tipo | ¿Requerido? | Descripción |
---|---|---|---|
ad_insertion |
booleano | opcional | Establézcalo en verdadero si esta transmisión debe estar habilitada para SSAI |
add_cdns |
gama | opcional | Matriz de proveedores de CDN adicionales que se utilizarán para la generación de manifiestos. Para cada CDN proporcionado, el manifiesto se antepondrá en consecuencia |
drm |
objeto | opcional | Aún no es compatible |
encryption |
objeto | opcional | Aún no es compatible |
label |
cuerda | requerido | Una etiqueta para identificar al grupo |
live_dvr_sliding_window_duration |
entero | opcional | |
notifications |
gama | opcional | Matriz de cadenas o objetos de destino de notificación |
processing_regions |
gama | requerido | Regiones de procesamiento para el grupo redundante. Esto determinará qué regiones de AWS generarán los manifiestos. Recomendado, esto coincide con storage_regions y las regiones en las que se crean los trabajos en vivo. |
storage_regions |
gama | requerido | Las listas de reproducción y los fragmentos de medios de las regiones de almacenamiento se cargarán en S3. Se recomienda que coincida con Processing_regions y las regiones en las que se crean los trabajos en vivo. |
videocloud |
objeto | opcional | Los clientes de Video Cloud tienen la opción de crear un video para usar en la transmisión en vivo. |
La respuesta se verá así:
{
"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"
}
}
}
Obtén grupos redundantes
Puede obtener todos los grupos redundantes enviando un GET
solicitud de:
https://api.bcovlive.io/v1/redundantgroups
Puede filtrar la respuesta utilizando el state
param. Los valores permitidos son:
cancelled
cancelling
deleting
disconnected
failed
finished
finishing
processing
standby
waiting
También hay una page_size
parámetro que se puede establecer en un número entero hasta 1000. El valor por defecto page_size
es 10.
La respuesta se verá así:
{
"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"
}
}
]
}
Agregar trabajos en vivo al grupo redundante
Una vez que haya creado un grupo redundante, puede agregarle trabajos enviando un POST
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs
Los ID del trabajo en vivo se especifican en el cuerpo de la solicitud de esta manera:
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Hay un par de propiedades opcionales adicionales para los objetos de trabajo; la siguiente tabla muestra todos los campos:
Campo | Tipo | ¿Requerido? | Descripción |
---|---|---|---|
job_id |
cuerda | requerido | ID del trabajo para agregar al grupo. Si ninguno playlist o streams están especificados, todos outputs se utilizará. |
playlist |
cuerda | opcional | Etiqueta de la lista de reproducción que se utilizará como salidas de la transmisión. Si playlist se define, streams deber ser indefinido. |
streams |
gama | opcional | Lista de etiquetas de transmisión que se utilizarán como salidas de la transmisión. Si streams se define, playlist deber ser indefinido. |
La respuesta exitosa para esta solicitud solo devolverá el ID de grupo redundante.
Obtener estado de grupo redundante
Puede obtener el estado de un grupo redundante enviando un GET
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
La respuesta tendrá el siguiente aspecto:
{
"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"
}
}
}
}
Cada región de procesamiento en el grupo redundante tendrá su propia status
objeto, codificado por región. Puedes ver en este ejemplo que en el us_west_2
región de procesamiento, la on_air
trabajo es 0b76bc73f92f46dc917bbe5061c0c633
.
Como nota al margen, los probability
asociados con la región de procesamiento siempre lo estarán 1
, pero se incluirán en el modelo de datos para el futuro. mejoras que permitirán varias regiones de procesamiento con probabilidades entre 0 y 1, que representan el porcentaje aproximado de tráfico de reproducción que utilizará esa región.
Agregar puntos de referencia manualmente
Agregar puntos de referencia manualmente a una transmisión en vivo con redundancia es muy similar a agregar puntos de referencia a una transmisión en vivo normal. Para hacer esto para un grupo redundante, haga un POST
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/cuepoint
Incluya un cuerpo de solicitud como el siguiente:
{
"ad_server_data": {
"subject": "wildlife"
},
"duration": 30,
"timecode": "09:23:18:05"
}
Si omite el timecode
campo, el punto de referencia se insertará inmediatamente.
Forzar una conmutación por error de trabajo
La conmutación por error será administrada automáticamente por el sistema Brightcove Live y no debería requerir ninguna intervención de su parte. Sin embargo, si por alguna razón desea forzar la conmutación por error a otro trabajo, la forma más sencilla de hacerlo es simplemente detener el codificador del on_air
trabajo.
También puede forzar la conmutación por error utilizando la API haciendo un PUT
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/switch
El cuerpo de la solicitud tiene este aspecto:
{
"mode": "manual",
"on_air": "0ae5a4a71dc54b3181af0f98ee407c27"
}
Aquí, mode
será cualquiera manual
o auto
(el predeterminado), y el on_air
tendrá un valor de uno de los secundario ID de trabajo.
Nota: Una vez en manual
modo, la conmutación por error automática del trabajo no ocurrir. Tú deber volver a establecer el modo en auto
para que se reanude la conmutación por error automática. Puede cambiar el trabajo en el aire sin cambiar a manual omitiendo el modo en el cuerpo y agregando el parámetro de consulta de fuerza ?force=true
a su solicitud. Esto obligará al servicio a cambiar de trabajo, pero puede volver a hacerlo en cualquier momento si detecta problemas.
Finalizar una transmisión redundante
Hay dos formas de finalizar la transmisión redundante. Por diseño, los grupos redundantes están implícitamente SEP arroyos. Puede poner un grupo redundante en STANDBY
modo eliminando todos los trabajos del grupo redundante.
Para hacer esto usando un DELETE
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs/{job_id}
para cada trabajo que desee eliminar. Tenga en cuenta que para eliminar el trabajo que se encuentra actualmente on_air
, tendrá que agregar el parámetro de ?force-true
consulta.
La segunda forma de finalizar la transmisión es eliminar el grupo redundante por completo enviando un DELETE
solicitud de:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
Limitaciones
- Redundancia en vivo no puedo utilizarse con transmisiones en vivo protegidas por DRM.