Live-API: VOD-Clips erstellen

In diesem Thema lernen Sie, wie Sie die Live-API verwenden, um Video-on-Demand-Clips aus Ihren Live-Streams zu erstellen.

Ü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/oder stream_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/oder end_time definiert relativ zur Startzeit ( stream_start_time) des gesamten Live-Stream-Events
  • Mit start_time und/oder end_time definiert in Epoche (Unix) Zeit (in Sekunden)
  • Mit duration
  • Sowohl die Live-API als auch das Live-Modul unterstützen die Erstellung von Clips aus verschlüsselten oder DRM-geschützten Aufträgen.

Hinweise

  1. 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.
  2. Wenn Sie dies 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)
  3. Wenn Sie beide angeben start_time UND end_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 Zeitfenster der Epoche vollständig innerhalb von created_at und liegt finished_at, wird der Clip erstellt
  4. Clips von Livestreams mit SSAI wird keine Werbung enthalten.
  5. 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.
  6. 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.
  7. 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.
  8. 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 am 22. Januar 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,
        "profile": "valid-ingest-profile-name"
        }
      }
    }
  ]
}

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": ["https://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 sowie Details darüber, wohin der Clip gesendet werden soll. Beachten Sie, dass der Encoder Timecodes senden muss, um Timecodes zu verwenden. 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": ["https://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 Anforderungskörper enthält die Start- und Endzeit sowie die Angaben, 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": ["https://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 geben die Bucket-URL einschließlich des Dateinamens für den Clip und eine Zeichenfolge an, die den Namen der gespeicherten S3-Bucket-Anmeldeinformationen darstellt.

Mit der Live-API können Sie Berechtigungsnachweise erstellen und verwalten. Weitere Informationen finden Sie in den folgenden Punkten:

Textfelder anfordern

Hier ist eine vollständige Tabelle der Anfragetextfelder.

Anfragetextfelder
Feld Typ Beschreibung
live_job_id Zeichenfolge

Die ID des Live-Stream-Auftrags, aus dem der VOD-Clip erstellt werden soll.

outputs Objekt[]

Array von VOD-Ausgängen

outputs.label Zeichenfolge

Label für die Ausgabe

outputs.duration Nummer

Dauer des Clips in Sekunden. Der duration kann allein verwendet werden, um einen Clip zu definieren, der aus den letzten {duration} Sekunden des Streams erstellt wird. duration kann auch mit jedem von verwendet werden stream_start_time, stream_end_time, start_time, end_time, stream_end_timecode oder stream_start_timecode.

outputs.stream_start_time Nummer

Startzeit in Sekunden für den Clip relativ zur Startzeit des Livestreams, stream_start_time muss mit verwendet werden entweder stream_end_time oder duration.

outputs.stream_end_time Nummer

Endzeit in Sekunden für den Clip relativ zur Startzeit des Livestreams, stream_end_time muss mit verwendet werden entweder stream_start_time oder duration.

outputs.start_time Nummer

Startzeit für den Clip in Epoche (Unix)-Zeit (Sekunden), start_time muss mit verwendet werden entweder end_time oder duration.

outputs.end_time Nummer

Endzeit des Clips in Epoche (Unix)-Zeit (Sekunden), end_time muss mit verwendet werden entweder start_time oder duration.

outputs.stream_start_timecode Nummer

Startzeit für den Clip in einem SMPTE-formatierten Timecode (HH:MM:SS:FF) ab Beginn des Streams, stream_start_timecode muss entweder mit stream_end_timecode oder verwendet werden duration.

outputs.stream_end_timecode Nummer

Die Endzeit für den Clip in einem SMPTE-formatierten (HH:MM:SS:FF) -Timecode vom Ende des Streams outputs.stream_end_timecode muss mit entweder stream_start_timecode oder verwendet werden duration.

outputs.url Zeichenfolge

Ziel-URL für den Clip, beachten Sie, dass die Ausgabe Muss enthalten entweder diese url Feld oder ein videocloud Objekt, das die Videoeigenschaften und Aufnahmeoptionen für definiert Video Cloud.

outputs.credentials Zeichenfolge

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 master Feld, da diese Informationen von der Live-API bereitgestellt werden. Wenn kein Aufnahmeprofil angegeben ist, wird das Standardprofil des Kontos verwendet.

Videofelder für Video Cloud Einnahme

Siehe die CMS-API-Referenz für mehr Details.

Videofelder
Feld Typ Beschreibung
ad_keys Zeichenfolge 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 Reihe 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 Zeichenfolge Lange Beschreibung (bis zu 5000 Zeichen)
name Zeichenfolge 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 Zeichenfolge Die Mapping-Projektion für 360°-Videos, zB "equirectangular"
reference_id Zeichenfolge 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 Zeichenfolge 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.

Cuepoint-Felder
Feld Typ Beschreibung
id Zeichenfolge 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 Zeichenfolge Der Cue-Point-Name
time Schweben Zeit des Cue-Points in Sekunden gemessen ab dem Start des Videos
type Zeichenfolge Der Cue-Point-Typ ( AD oder DATA)

Video-Geofelder

Die folgende Tabelle zeigt die video.geo Objektfelder bzw.

Geo-Filter-Felder
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

Die folgende Tabelle zeigt die video.link Objektfelder bzw.

Felder verknüpfen
Feld Typ Beschreibung
url Zeichenfolge Verwandte Link-URL
text Zeichenfolge Zugehöriger Linktext

Felder für den Videozeitplan

Die folgende Tabelle zeigt die Felder für die video.schedule Objekt

video.schedule-Felder
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

Video Cloud Felder aufnehmen
Feld Typ Beschreibung
audio_tracks nur optional Dynamic Delivery Objekt[]

Array von Audiotrack-Objekten — weitere Informationen finden Sie unter Implementieren mehrerer Audiospuren mithilfe der APIs.

audio_tracks.merge_with_existing optional Boolescher Wert

ob vorhandene Audiospuren ersetzt oder neue hinzugefügt werden sollen (derzeit nur false wird unterstützt) Nur dynamische Lieferung

Standardwert: false

audio_tracks.masters optional Objekt[]

Reihe von Audiotrack-Objekten (nur Dynamic Delivery)

audio_tracks.masters.url optional Zeichenfolge

URL für die Audiodatei Nur dynamische Lieferung

audio_tracks.masters.language optional Zeichenfolge

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 Zeichenfolge

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: "main", "alternate", "commentary", "dub", "descriptive"

profile optional Zeichenfolge

die ID (nicht der Name) des für die Transkodierung zu verwendenden Ingest-Profils; fehlt sie, wird das Standardprofil verwendet (es wird empfohlen, dieses Feld wegzulassen und das Standardprofil zu verwenden)

text_tracks optional Objekt[]

Array von text_tracks Objekten - siehe Aufnahme von WebVTT-Dateien (Textspuren)

text_tracks.url URL

URL für eine WebVTT-Datei

text_tracks.srclang Zeichenfolge

ISO 639 2-Buchstaben (Alpha-2) Sprachcode für die Textspuren

text_tracks.kind optional Zeichenfolge

wie die vtt-Datei verwendet werden soll

Standardwert: captions

Zulässige Werte: "captions", "subtitles", "chapters", "metadata"

text_tracks.label optional Zeichenfolge

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 true wenn das Profil Bildwiedergaben enthält, false wenn nicht - siehe Bilder und die Dynamic Ingest API für mehr Informationen

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

Antworttextfelder
Feld Typ Beschreibung
vod_jobs Objekt

Das Clip-Response-Objekt

jvod_id Zeichenfolge

Die Clip-Job-ID

label Zeichenfolge

Das Clip-Label (vom Eingang)

live_job_id Zeichenfolge

Die Live-Job-ID (aus der Eingabe)