Live-API: Erstellen von VOD-Clips
Überblick
Clips sind Videos, die aus einem Livestream extrahiert wurden. Sie können an einen S3-Bucket, eine FTP-Site oder eine gesendet werden Video Cloud Konto. Der Clip wird als MP4-Video erstellt und in jedem Fall an das Ziel gesendet. Im Falle von Video Cloud Der MP4 wird vom Aufnahmesystem transkodiert, und welche Arten von Wiedergaben für das Video erstellt werden, hängt vom verwendeten Aufnahmeprofil ab.
Definitionen für Clips werden mit dem /vods
Endpunkt.
Clips können auf verschiedene Arten erstellt werden:
- Mit
stream_start_timecode
und/oderstream_end_timecode
in SMPTE-Timecodes für das Live-Stream-Ereignis definiert - Beachten Sie, dass dies erfordert, dass der Encoder Timecode-Informationen sendet - Mit
start_time
und/oderend_time
definiert relativ zur Startzeit (stream_start_time
) des gesamten Livestream-Events - Mit
start_time
und/oderend_time
definiert in Epoche (Unix) Zeit (in Sekunden) - Mit
duration
- Die VOD-API kann verwendet werden mit verschlüsselt oder DRM-geschützt Arbeitsplätze. Derzeit unterstützt das Live-Modul dies nicht, wird dies jedoch in einer zukünftigen Version tun.
Hinweise
- Um Clips möglichst schnell zur Verfügung zu stellen, wird zunächst ein segmentgenauer Clip erstellt und dann, sobald dieser verfügbar ist, durch einen framegenauen Clip ersetzt.
- Wenn Sie angeben
duration
, sieht der resultierende Clip wie folgt aus:- Wenn der Job aktiv und noch aktiv ist: (Anfragezeit - Dauer) bis (Anfragezeit)
- Wenn der Job beendet ist: (
finished_at
- Dauer) bis (finished_at
)
- Wenn Sie beide angeben
start_time
UNDend_time
:- Wenn der Job aktiv ist und noch lebt: solange das Epochenzeitfenster vollständig in
created_at
und der Wunschzeit wird der Clip gemacht - Wenn der Job abgeschlossen ist: solange das Epochenzeitfenster vollständig in
created_at
undfinished_at
, der Clip wird gemacht
- Wenn der Job aktiv ist und noch lebt: solange das Epochenzeitfenster vollständig in
- Clips von Livestreams mit SSAI wird keine Werbung enthalten.
- Clips können bis zu 7 Tage nach einem Ereignis erstellt werden. Zum SEP Sie können bis zur nächsten Aktivierung oder bis zu 7 Tagen (je nachdem, welcher Zeitraum kürzer ist) erstellt werden.
- Die VOD-API fügt keine Inhalte hinzu, die nicht im Stream vorhanden sind. Wenn Sie 350 in einem 300 Sekunden langen Livestream angeben, ist die Ausgabe 300 Sekunden lang.
- Sie müssen keinen DVR-fähigen Livestream verwenden, damit Clipping funktioniert, da der Livestream so gespeichert wird, wie er gesendet wird und sofort und 7 Tage nach Ende der Veranstaltung verfügbar ist.
- Brightcove Live-Clipping erzeugt nur einen Clip, der dieselbe Auflösung wie die Ausgabe mit der höchsten Auflösung aufweist. Sie stimmt nicht mit der Eingangsauflösung der Quelle überein (es sei denn, diese entspricht der Ausgabe mit der höchsten Auflösung).
Clips können auch an mehrere Ziele gesendet werden:
- EIN Video Cloud Konto
- Ein FTP-Server
- Ein S3-Eimer
Wenn Sie einen Clip angeben, wird die Ausgabe Muss enthalten entweder ein url
Ziel oder ein videocloud
Objekt, um die Erstellung des Videos und die Aufnahme des Clips im Detail zu detaillieren Video Cloud.
Hinweis: Clips kann während des Livestreams erstellt werden. Dazu müssen Sie die Start- und Endzeit des Clips in Epochenzeit oder relativ zu Anfang Uhrzeit des Livestreams.
Referenzen
Wenn das Ziel, an das Sie den Clip senden, Zugangsdaten erfordert, können Sie diese mit den Zugangsdatenvorgängen der Live-API erstellen. Sehen Verwalten von Anmeldeinformationen für die Live-API für mehr Details.
Endpunkt
Clips werden erstellt, indem Sie a POST
Anfrage zu:
https://api.bcovlive.io/v1/vods
Text anfordern - Video Cloud
Beispiel 1: Start-/Endzeiten relativ zum Stream-Start
Der Anfragetext enthält Start- und Endzeiten sowie Details dazu, wohin der Clip gesendet werden soll. Hier ist ein Beispielanforderungshauptteil, der einen Clip der dritten Minute eines Streams erstellt und an a sendet Video Cloud Konto:
{
"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
}
}
}
]
}
In diesem Beispiel erstellen wir einen Clip mit einer Dauer von einer Minute und senden ihn an Video Cloud . Wir geben dem Clip einen Namen und ein paar Tags, ohne die anzugeben ingest profile für die erneute Codierung, damit die Standardeinstellung des Kontos verwendet wird, und Anweisungen Video Cloud um während der Transcodierung Miniatur- und Posterbilder aus dem Clip aufzunehmen.
Beispiel 2: Start-/Endzeiten in Epochenzeit
Der Anforderungstext enthält Start- und Endzeiten in Epochenzeit und Details dazu, wohin der Clip gesendet werden soll. Hier ist ein Beispielanforderungshauptteil, der einen Clip der dritten Minute eines Streams erstellt und an a sendet Video Cloud Konto:
{
"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
}
}
}
]
}
In diesem Beispiel erstellen wir einen Clip mit einer Dauer von einer Minute zu einer bestimmten Epochenzeit (in diesem Fall 22. Jan 2018 um 08:24:54 GMT).
Beispiel 3: Dauer mit Startzeit relativ zum Stream-Start
Der Anforderungstext enthält die Dauer und stream_start_time sowie Details dazu, wohin der Clip gesendet werden soll. Hier ist ein Beispielanforderungshauptteil, der einen Clip der dritten Minute eines Streams erstellt und an a sendet Video Cloud Konto:
{
"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
}
}
}
]
}
In diesem Beispiel erstellen wir einen einminütigen Clip, der 5 Minuten nach dem Start des Livestreams beginnt.
Beispiel 4: Dauer ohne Start- oder Endzeit
Der Anforderungstext enthält Start- und Endzeiten in Epochenzeit und Details dazu, wohin der Clip gesendet werden soll. Hier ist ein Beispielanforderungshauptteil, der einen Clip der dritten Minute eines Streams erstellt und an a sendet Video Cloud Konto:
{
"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"]
}
]
}
In diesem Beispiel erstellen wir einen Clip von einer Minute Dauer. Da wir keine Start- oder Endzeit angeben, wird der Clip aus den letzten 60 Sekunden des Livestreams entnommen.
Beispiel 5: Verwendung von stream_start_timecode
und stream_end_timecode
Der Anforderungstext enthält Start- und Endzeiten/Frames in HH:MM:SS:FF-Timecodes und Details darüber, wohin der Clip gesendet werden soll. Beachten Sie, dass der Encoder zur Verwendung von Timecodes Timecodes senden muss. Hier ist ein Beispielanforderungshauptteil, der einen Clip der 50 Minuten eines Streams erstellt und an a sendet Video Cloud Konto:
{
"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"]
]
}
Allgemeine Informationen zum Senden von Clips an Video Cloud
Um zu sehen, welche Felder in der enthalten sein können video
und ingest
Objekte, siehe die Dynamic Ingest API Reference.
Anfragetext - S3
Der Anfragetext enthält Start- und Endzeiten sowie Details dazu, wohin der Clip gesendet werden soll. Hier ist ein Beispiel-Anfragetext, der einen Clip der dritten Minute eines Streams erstellt und an einen S3-Bucket sendet:
{
"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"]
}
],
}
In diesem Beispiel erstellen wir einen Clip mit einer Dauer von 30 Sekunden und senden ihn an einen S3-Bucket. Wir stellen die Bucket-URL einschließlich des Dateinamens für den Clip und eine Zeichenfolge bereit, die den Namen der gespeicherten S3-Bucket-Anmeldeinformationen enthält. Die Anmeldeinformationen können vom Brightcove-Support für Ihr Konto eingerichtet werden.
Textfelder anfordern
Hier ist eine vollständige Tabelle der Anfragetextfelder.
Feld | Typ | Beschreibung |
---|---|---|
live_job_id |
String |
Die ID des Live-Stream-Auftrags, aus dem der VOD-Clip erstellt werden soll. |
outputs |
Objekt[] |
Array von VOD-Ausgängen |
outputs.label |
String |
Label für die Ausgabe |
outputs.duration |
Nummer |
Dauer des Clips in Sekunden. Der |
outputs.stream_start_time |
Nummer |
Startzeit in Sekunden für den Clip relativ zur Startzeit des Livestreams, |
outputs.stream_end_time |
Nummer |
Endzeit in Sekunden für den Clip relativ zur Startzeit des Livestreams, |
outputs.start_time |
Nummer |
Startzeit für den Clip in Epoche (Unix)-Zeit (Sekunden), |
outputs.end_time |
Nummer |
Endzeit des Clips in Epoche (Unix)-Zeit (Sekunden), |
outputs.stream_start_timecode |
Nummer |
Startzeit für den Clip in einem SMPTE-formatierten (HH:MM:SS:FF) Timecode ab dem Beginn des Streams, |
outputs.stream_end_timecode |
Nummer |
Endzeit für den Clip in einem SMPTE-formatierten (HH:MM:SS:FF) Timecode vom Ende des Streams, |
outputs.url |
String |
Ziel-URL für den Clip, beachten Sie, dass die Ausgabe Muss enthalten entweder diese |
outputs.credentials |
String |
Der Name der in Ihrem Konto für diese Adresse konfigurierten Anmeldeinformationen |
outputs.videocloud |
Objekt |
Ein Objekt, das Eingaben für enthält Video Cloud Einnahme |
outputs.videocloud.video |
Objekt |
Ein Objekt, das Eingaben für enthält Video Cloud Videoobjekterstellung - siehe die CMS API Reference for creating a video |
outputs.videocloud.ingest |
Objekt |
Ein Objekt, das Eingaben für enthält Video Cloud Videoaufnahme - siehe die Dynamic Ingest Reference - tun nicht umfassen die |
Videofelder für Video Cloud Einnahme
Siehe die CMS-API-Referenz für mehr Details.
Feld | Typ | Beschreibung |
---|---|---|
ad_keys |
String | String, der die dem Video zugewiesenen Anzeigenschlüssel/Wert-Paare darstellt. Schlüssel/Wert-Paare werden als Schlüssel=Wert formatiert und durch kaufmännische Und-Zeichen getrennt. Zum Beispiel: "adKeys": "category=sports&live=true" |
cue_points |
Array von Karten | Array von Cue-Point-Maps |
custom_fields |
Zuordnung von Feld-Wert-Paaren (Strings) | Benutzerdefiniert fieldname:value Sets für das Video - beachten Sie das benutzerdefinierte Feld, das dies tut nicht einen Wert für dieses Video haben, sind in dieser Karte nicht enthalten; benutzerdefinierte Feldwerte haben eine maximale Länge von 1024 Einzelbyte-Zeichen |
description |
Zeichenfolge; ersetzt die alte Kurzbeschreibung | Kurzbeschreibung des Videos (maximale Länge: 248 Single-Byte-Zeichen) |
economics |
String, muss einer der gültigen Enum-Werte sein | entweder "AD_SUPPORTED" (Standard) oder "FREE" |
geo |
Karte von Eigenschafts-Wert-Paaren | Geo-Einschränkungseigenschaften für das Video |
link |
Karte von Eigenschafts-Wert-Paaren | Karte der zugehörigen Linkeigenschaften |
long_description |
String | Lange Beschreibung (bis zu 5000 Zeichen) |
name |
String | Der Name des Videos (maximale Länge: 248 Single-Byte-Zeichen) erforderlich |
offline_enabled |
Boolescher Wert | Ob das Video für die Offline-Wiedergabe aktiviert ist |
projection |
String | Die Mapping-Projektion für 360°-Videos, zB "equirectangular" |
reference_id |
String | Eine vom Benutzer angegebene ID, die das Video eindeutig identifiziert, begrenzt auf 150 Zeichen. Eine referenceId kann als Fremdschlüssel verwendet werden, um dieses Video in einem anderen System zu identifizieren. Die Referenz-ID darf keine Leerzeichen, Kommas oder Sonderzeichen enthalten. |
schedule |
Karte von Eigenschafts-Wert-Paaren | Karte der Start- und Enddatumszeiten für die Videoverfügbarkeit |
state |
String | AKTIV INAKTIV |
tags |
Array von Tags (Strings) | Array von Tags, die dem Video zugewiesen sind |
text_tracks |
Array von Textspuren im HTML5-Stil | Array von Textspuren (WebVTT-Dateien), die dem Video zugeordnet sind |
Video-Cuepoint-Felder
Die folgende Tabelle zeigt Felder für video.cuepoints
.
Feld | Typ | Beschreibung |
---|---|---|
id |
String | System-ID für den Cue-Point |
force_stop |
Boolescher Wert | Ob das Video am Cue-Point gestoppt werden soll |
metadata |
String; Nur Codepunkt | Eine mit dem Cue-Point verknüpfte Metadatenzeichenfolge |
name |
String | Der Cue-Point-Name |
time |
Schweben | Zeit des Cue-Points in Sekunden gemessen ab dem Start des Videos |
type |
String | Der Cue-Point-Typ ( AD oder DATA ) |
Video-Geofelder
Die folgende Tabelle zeigt die video.geo
Objektfelder bzw.
Feld | Typ | Beschreibung |
---|---|---|
countries |
Array von Ländercode-Strings | Array von ISO 3166-Liste mit 2- oder 4-Buchstaben-Codes (https://www.iso.org/obp/ui/) für Länder, in denen das Video abgespielt werden darf oder nicht. |
exclude_countries |
Boolescher Wert | Wenn true, wird das Länderarray als Liste der Länder behandelt, die von der Anzeige ausgeschlossen sind |
restricted |
Boolescher Wert | Ob Geofilterung für dieses Video aktiviert ist |
Video-Link-Felder
Die folgende Tabelle zeigt die video.link
Objektfelder bzw.
Feld | Typ | Beschreibung |
---|---|---|
url |
String | Verwandte Link-URL |
text |
String | Zugehöriger Linktext |
Felder für den Videozeitplan
Die folgende Tabelle zeigt die Felder für die video.schedule
Objekt
Feld | Typ | Beschreibung |
---|---|---|
ends_at |
String im ISO-8601-Datumsformat | Datum und Uhrzeit, wann das Video nicht mehr zur Anzeige verfügbar ist |
starts_at |
String im ISO-8601-Datumsformat | Datum und Uhrzeit, wann das Video zum Anzeigen verfügbar wird |
Video Cloud Felder aufnehmen
Feld | Typ | Beschreibung |
---|---|---|
audio_tracks Optional Nur dynamische Lieferung |
Objekt[] |
Array von Audiospur-Objekten - Weitere Informationen finden Sie unter Implementieren mehrerer Audiospuren Verwenden der APIs. |
audio_tracks.merge_with_existing Optional |
Boolescher Wert |
ob vorhandene Audiospuren ersetzt oder neue hinzugefügt werden sollen (derzeit nur Standardwert: |
audio_tracks.masters Optional |
Objekt[] |
Array von Audiospur-Objekten Nur Dynamische Lieferung |
audio_tracks.masters.url Optional |
String |
URL für die Audiodatei Nur dynamische Lieferung |
audio_tracks.masters.language Optional |
String |
Sprachcode für die Audiospur aus den Untertags in https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry (Standard kann für das Konto festgelegt werden, indem Sie sich an den Brightcove-Support wenden) Nur dynamische Lieferung |
audio_tracks.masters.variant Optional |
String |
die Art der Audiospur (Standard kann für das Konto eingestellt werden, indem Sie sich an den Brightcove-Support wenden) Nur dynamische Lieferung Zulässige Werte: |
profile Optional |
String |
Ingest-Profil für die Transcodierung; falls nicht vorhanden, wird das Standardprofil verwendet |
text_tracks Optional |
Objekt[] |
Array von |
text_tracks.url |
URL |
URL für eine WebVTT-Datei |
text_tracks.srclang |
String |
ISO 639 2-Buchstaben (Alpha-2) Sprachcode für die Textspuren |
text_tracks.kind Optional |
String |
wie die vtt-Datei verwendet werden soll Standardwert: Zulässige Werte: |
text_tracks.label Optional |
String |
vom Benutzer lesbarer Titel |
text_tracks.default Optional |
Boolescher Wert |
legt die Standardsprache für Untertitel/Untertitel fest |
capture-images Optional |
Boolescher Wert |
ob Poster und Thumbnail während der Transcodierung erfasst werden sollen; standardmäßig auf |
poster Optional |
Objekt |
das aufzunehmende Videoposter - siehe Bilder und die Dynamic Ingest API für mehr Informationen |
poster.url |
URL |
URL für das Videoposterbild |
poster.height Optional |
Ganze Zahl |
Pixelhöhe des Bildes |
poster.width Optional |
Ganze Zahl |
Pixelbreite des Bildes |
thumbnail Optional |
Objekt |
das aufzunehmende Video-Thumbnail - siehe Bilder und die Dynamic Ingest API für mehr Informationen |
thumbnail.url |
URL |
URL für das Video-Miniaturbild |
thumbnail.height Optional |
Ganze Zahl |
Pixelhöhe des Bildes |
thumbnail.width Optional |
Ganze Zahl |
Pixelbreite des Bildes |
callbacks Optional |
Zeichenfolge[] | Array von URLs, die Benachrichtigungen soll gesendet werden an
|
API-Antwort
Die Antwort auf eine Anfrage zum Erstellen eines Clips enthält eine ID für den Job und das von Ihnen im Anfragetext festgelegte Label sowie die Live-Job-ID:
{
"vod_jobs": [
{
"jvod_id": "9582606c50d84be5ad4bc104f2aa3360",
"label": "last 60 secs of live job"
}
],
"live_job_id": "88ba5d87b61a4ef3a6dddabd0c38d319"
}
Antwortfelder
Feld | Typ | Beschreibung |
---|---|---|
vod_jobs |
Objekt |
Das Clip-Response-Objekt |
jvod_id |
String |
Die Clip-Job-ID |
label |
String |
Das Clip-Label (vom Eingang) |
live_job_id |
String |
Die Live-Job-ID (aus der Eingabe) |