Einleitung
Die Redundanzfunktion von Brightcove Live trägt dazu bei, eine zuverlässige Leistung für Ihre Live-Events zu gewährleisten, indem ein Backup-Stream erstellt wird, auf den Live automatisch umschaltet, wenn der erste Stream nicht mehr funktioniert.
Beachten Sie, dass alle Anfragen an die Live-API die folgenden Header erfordern:
Taste | Wert | Hinweise |
---|---|---|
X-API-KEY |
{Ihr API-Schlüssel} | Ihr Schlüssel sollte bei der Eröffnung Ihres Brightcove Live-Kontos bereitgestellt worden sein |
Content-Type |
anwendung/json | Technisch gesehen ist das content-type Header ist nur für Schreibanforderungen erforderlich, die einen Anforderungstext enthalten, sollte jedoch bei Leseanforderungen keinen Schaden anrichten. |
Erstellen Sie Ihre Live-Jobs
Für das redundante Setup müssen Sie 2 oder mehr Brightcove Live Jobs erstellen. Die einzige Voraussetzung für die Jobs ist, dass sie mit den gleichen output
Einstellungen erstellt werden. Am einfachsten erreichen Sie dies, indem Sie einen Job mit den gewünschten Ausgabespezifikationen erstellen und dann die copy_outputs_from_job
Parameter, um die zusätzlichen Jobs zu erstellen.
Es gibt keine Beschränkung in Bezug auf die Regionen, in denen diese Arbeitsplätze geschaffen werden können, es wird jedoch empfohlen, dass sie relativ nahe beieinander liegen.
Nachdem die Live-Jobs erstellt wurden, bewahren Sie die Job-IDs für später auf. Der Anforderungstext, den Sie verwenden, um diese Jobs zu einer redundanten Gruppe hinzuzufügen (siehe die Abschnitte unten), sieht wie folgt aus:
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Erstellen Sie die redundante Gruppe
Um eine redundante Gruppe zu erstellen, senden Sie eine POST
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups
Hier ist ein Beispiel für den Anfragetext:
{
"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
}
Die folgende Tabelle enthält eine vollständige Liste der Felder für den Anforderungstext. In einigen Fällen sind diese mit Feldern identisch, die zum Erstellen eines Live-Jobs verwendet werden. Siehe die Live-API-Referenz für weitere Details zu den Feldern.
Feld | Typ | Erforderlich? | Beschreibung |
---|---|---|---|
ad_insertion |
boolescher Wert | fakultativ | Auf "true" setzen, wenn dieser Stream SSAI-aktiviert sein soll |
add_cdns |
Reihe | fakultativ | Array mit zusätzlichen CDN-Anbietern, die für die Manifestgenerierung verwendet werden sollen. Für jedes bereitgestellte CDN wird das Manifest entsprechend vorangestellt |
drm |
Objekt | fakultativ | Noch nicht unterstützt |
encryption |
Objekt | fakultativ | Noch nicht unterstützt |
label |
Schnur | erforderlich | Ein Label zur Identifizierung der Gruppe |
live_dvr_sliding_window_duration |
ganze Zahl | fakultativ | |
notifications |
Reihe | fakultativ | Array von Benachrichtigungszielobjekten oder -zeichenfolgen |
processing_regions |
Reihe | erforderlich | Verarbeitungsregionen für die Redundante Gruppe. Dadurch wird bestimmt, welche AWS-Regionen die Manifeste generieren. Empfohlen entspricht dies storage_regions und den Regionen, in denen die Live-Jobs erstellt werden. |
storage_regions |
Reihe | erforderlich | In Speicherregionen werden Medienblöcke und Playlisten in S3 hochgeladen. Empfohlen entspricht dies Processing_regions und den Regionen, in denen die Live-Jobs erstellt werden. |
videocloud |
Objekt | fakultativ | Video Cloud-Kunden haben die Möglichkeit, ein Video für den Livestream zu erstellen. |
Die Antwort wird ungefähr so aussehen:
{
"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"
}
}
}
Holen Sie sich redundante Gruppen
Sie können alle redundanten Gruppen erhalten, indem Sie a GET
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups
Sie können die Antwort filtern, indem Sie die state
Param. Die zulässigen Werte sind:
cancelled
cancelling
deleting
disconnected
failed
finished
finishing
processing
standby
waiting
Da ist auch ein page_size
Parameter, der auf eine ganze Zahl bis 1000 gesetzt werden kann. Der Standard page_size
ist 10.
Die Antwort wird wie folgt aussehen:
{
"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"
}
}
]
}
Fügen Sie der redundanten Gruppe Live-Jobs hinzu
Nachdem Sie eine redundante Gruppe erstellt haben, können Sie ihr Jobs hinzufügen, indem Sie a POST
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs
Die Live-Job-IDs werden im Anfragetext wie folgt angegeben:
[
{
"job_id": "0b76bc73f92f46dc917bbe5061c0c633"
},
{
"job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
}
]
Es gibt einige zusätzliche optionale Eigenschaften für die Job-Objekte – die folgende Tabelle zeigt alle Felder:
Feld | Typ | Erforderlich? | Beschreibung |
---|---|---|---|
job_id |
Schnur | erforderlich | ID des Jobs, der zur Gruppe hinzugefügt werden soll. Wenn weder playlist oder streams angegeben sind, alle outputs verwendet werden. |
playlist |
Schnur | fakultativ | Label der Playlist, die als Ausgabe für den Stream verwendet werden soll. Wenn playlist ist definiert, streams Muss Sein nicht definiert. |
streams |
Reihe | fakultativ | Liste der Stream-Labels, die als Ausgaben für den Stream verwendet werden sollen. Wenn streams ist definiert, playlist Muss Sein nicht definiert. |
Die Erfolgsantwort für diese Anforderung gibt nur die redundante Gruppen-ID zurück.
Status der redundanten Gruppe abrufen
Sie können den Status einer redundanten Gruppe abrufen, indem Sie a GET
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
Die Antwort sieht wie folgt aus:
{
"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"
}
}
}
}
Jede Verarbeitungsregion in der Redundant Group hat ihre eigene status
Objekt, codiert nach Region. Sie können in diesem Beispiel sehen, dass in der us_west_2
Verarbeitungsregion, die on_air
Zu tun ist 0b76bc73f92f46dc917bbe5061c0c633
.
Als Randnotiz wird der mit dem Verarbeitungsbereich probability
verknüpfte Bereich an dieser Stelle immer sein 1
, wird aber für die Zukunft im Datenmodell enthalten Verbesserungen, die mehrere Verarbeitungsregionen mit Wahrscheinlichkeiten zwischen 0 und 1 zulassen, was den ungefähren Prozentsatz des Wiedergabeverkehrs darstellt, der diese Region verwendet.
Cuepoints manuell hinzufügen
Das manuelle Hinzufügen von Cuepoints zu einem Livestream mit Redundanz ist dem Hinzufügen von Cuepoints zu einem normalen Livestream sehr ähnlich. Um dies für eine redundante Gruppe zu tun, machen Sie a POST
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/cuepoint
Fügen Sie einen Anfragetext wie den folgenden ein:
{
"ad_server_data": {
"subject": "wildlife"
},
"duration": 30,
"timecode": "09:23:18:05"
}
Wenn Sie das weglassen timecode
Feld wird der Cuepoint sofort eingefügt.
Job-Failover erzwingen
Failover wird automatisch vom Brightcove Live-System verwaltet und sollte kein Eingreifen Ihrerseits erfordern. Wenn Sie jedoch aus irgendeinem Grund ein Failover auf einen anderen Job erzwingen möchten, besteht die einfachste Möglichkeit darin, den Encoder des on_air
Job.
Sie können ein Failover auch mithilfe der API erzwingen, indem Sie a PUT
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/switch
Der Anfragetext sieht so aus:
{
"mode": "manual",
"on_air": "0ae5a4a71dc54b3181af0f98ee407c27"
}
Hier, mode
wird entweder manual
oder auto
(die Standardeinstellung) und die on_air
hat einen Wert von einem der sekundär Job-IDs.
Hinweis: Einmal in manual
Modus wird das automatische Job-Failover nicht auftreten. Du muss setze den Modus zurück auf auto
damit das automatische Failover wieder aufgenommen wird. Sie können den On-Air-Job ändern, ohne in den manuellen Modus zu wechseln, indem Sie den Modus aus dem Hauptteil weglassen und den Force-Abfrageparameter hinzufügen ?force=true
auf Ihre Anfrage. Dadurch wird der Dienst gezwungen, Jobs zu wechseln, aber er kann jederzeit zurückwechseln, wenn er Probleme erkennt.
Beenden eines redundanten Streams
Es gibt zwei Möglichkeiten, wie Sie Ihren redundanten Stream beenden können. Redundante Gruppen sind grundlos SEP-Streams. Sie können eine Redundante Gruppe in STANDBY
durch Entfernen aller Jobs aus der redundanten Gruppe.
Um dies zu tun, verwenden Sie a DELETE
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs/{job_id}
für jeden Job, den Sie entfernen möchten. Beachten Sie, dass Sie den aktuellen Job entfernen möchten on_air
, müssen Sie hinzufügen ?force=true
Abfrageparameter.
Die zweite Möglichkeit, den Stream zu beenden, besteht darin, die redundante Gruppe vollständig zu löschen, indem Sie a DELETE
Anfrage zu:
https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}
Einschränkungen
- Live-Redundanz kann nicht mit DRM-geschützten Livestreams verwendet werden.