elan ev logo
elan ev logo
Vertrieb kontaktieren

Einführung in Opencast-Workflows

Über Operationen und Workflows – Was im Hintergrund alles läuft

Wer schon einmal ein Video in Opencast hochgeladen hat - sei es über ein Learning-Management-System (LMS) oder direkt in der Nutzeroberfläche von Opencast - wird nach dem Upload eine Meldung erhalten haben: "Das Video befindet sich nun in einer Verarbeitung/Konvertierung." Diese Verarbeitung kann, abhängig von der Dateigröße und der Ausstattung des Servers, einige Zeit in Anspruch nehmen. Erst nach erfolgreichem Abschluss erscheint das fertige Video in der jeweiligen Übersicht und lässt sich abspielen.

Benachrichtigung in Ilias nach dem Upload

Abgesehen von der initialen Meldung bekommen Nutzende normalerweise nicht viel von den einzelnen Schritten mit, die während der Verarbeitung abgearbeitet werden. Meist werden die vielen verschiedenen Operationen, die während der Verarbeitung im Hintergrund angewendet wurden, erst beim Abspielen deutlich. Das sind dann zum Beispiel das Erscheinen von Untertiteln, Vorschaubildern oder verschiedener Qualitätsstufen, die das fertige Video erst rund machen.

Aber wie genau funktioniert der ganze Ablauf eigentlich? Welche Operationen gibt es? Wie kann man sie definieren und an seine eigenen Bedürfnisse anpassen?

Hier kommen die sogenannten Workflows ins Spiel. Mit ihrer Hilfe lassen sich die einzelnen Schritte der Verarbeitung genauestens definieren und anpassen. Opencast wird bereits mit einer Reihe von Standard-Workflows ausgeliefert, die schon einen Teil des Funktionsumfangs zeigen und abdecken. Oftmals wünschen sich Institutionen aber weitere Funktionen oder eine individuelle Gestaltung der Videos. Das kann durch Anpassungen an bestehende oder durch Erstellung ganz neuer Workflows umgesetzt werden. Aber nicht nur nach dem initialen Upload kommen Workflows zum Einsatz. Auch auf bereits bestehende Videos können Workflows für verschiedenste Zwecke angewendet werden. Beispielsweise für das Löschen von Videos, Erstellen von automatischen Untertiteln, Aktualisierung der Metadaten und viele mehr.

Im Folgenden möchte ich euch anhand des Standard-Upload-Workflows von Opencast einen Einblick in den grundlegenden Aufbau und die Funktionsweise von Workflows geben. So bekommt ihr einen Eindruck davon, was es für Möglichkeiten gibt und wie ihr beginnen könnt, eigene Workflows zu erstellen.

Ein Beispiel - So wird aus Operationen schließlich ein Workflow

Ein Workflow kann entweder im xml oder yaml-Format angelegt werden und muss im workflows Ordner eurer Opencast Installation abgelegt werden. Im Wesentlichen besteht er aus einer Aneinanderreihung von Operationen bzw. Workflow Operation Handlern (WOH). Um Verwirrungen zu vermeiden, bleibe ich im Folgenden dabei, die WOHs "Operationen" zu nennen. Mittlerweile gibt es eine Auswahl von über 100 Operationen, die zur Erstellung von Workflows genutzt werden können. Jede von ihnen erfüllt einen speziellen Zweck - Tendenz steigend.

Schritt 1: Wir schauen uns eine Operation genau an

Schauen wir uns einmal anhand der encode-Operation Schritt für Schritt an, wie eine Operation im Allgemeinen aufgebaut ist:

      - id: encode
        fail-on-error: true
        exception-handler-workflow: "partial-error"
        description: "Encoding video"
        configurations:
          - source-flavor: "*/source"
          - target-flavor: "*/preview"
          - target-tags: "engage-download,engage-streaming,rss,atom"
          - encoding-profile: "fast.http"

    Jede Operation hat eine eindeutig festgelegte id , die in der jeweiligen Dokumentation zu finden ist.
    Mit fail-on-error wird festgelegt, ob der gesamte Workflow fehlschlägt, wenn es bei der Abarbeitung der Operation einen Fehler gibt. Alternativ wird die Operation lediglich übersprungen.
    Mit dem exception-handler-workflow hat man die Möglichkeit, die id eines anderen Workflows anzugeben, der bei einem Fehler angestoßen werden soll. So sichert man zum Beispiel den aktuellen Stand der Daten.
    Die description gibt eine kurze Beschreibung der Operation, um es zu veranschaulichen.

    Die zuvor genannten Einstellungen können für jede Operation auf die gleiche Art und Weise definiert werden. Zu Unterschieden kommt es meist erst in den individuellen configurations:
    In sehr vielen Operationen findet man eine Angabe des source-flavor und des target-flavor . Flavors werden in Opencast genutzt, um den aktuellen Stand eines Videoelementes zu verfolgen. So können wir den Ablauf des Workflows möglichst genau kontrollieren: Zu Beginn wird ein Video hochgeladen und z.B. mit dem Flavor presentation/source versehen, um zu kennzeichnen, dass es sich um das Ursprungsvideo handelt.

    Als nächstes kommt beispielsweise die oben gezeigte encode Operation, in der aus dem Ursprungsvideo ein kleines Vorschauvideo generiert wird. Um dieses zu kennzeichnen, wird dann für das neue Vorschauvideo der Flavor von presentation/source zu presentation/preview umgeschrieben, mit welchem wiederum nachfolgende Operationen weiterarbeiten können. Das Sternchen in dem obigen Beispiel dient als Platzhalter, da in Opencast auch mehrere Videos zusammen hochgeladen werden können. Diese werden dann jeweils mit presenter/source bzw. presentation/source gekennzeichnet. Mit dem Sternchen werden dann alle Elemente betrachtet, deren Flavor auf /source endet. Jedes Videoelement sollte immer genau einen Flavor besitzen.

    Ähnlich zu den Flavors gibt es außerdem noch Tags, die in vielen Operationen als source-tags und/oder target-tags angegeben werden können. Diese dienen zwar ebenfalls dem Zweck Videoelemente zu kennzeichnen, können aber freier eingesetzt werden. Zum Beispiel können einem Videoelement mehrere Tags zugewiesen werden, welche dann wiederum von verschiedenen anderen Operationen aufgegriffen werden können.

    Es gibt je nach Operation diverse weitere Konfigurationsmöglichkeiten, die in der jeweiligen Dokumentation beschrieben werden. Im obigen Beispiel wird mit dem encoding-profile festgelegt, welches hinterlegte Profil zur Kodierung des Videos genutzt werden soll.

    Schritt 2: Inside Workflows - So sieht der Aufbau aus

    Gehen wir nun dazu über, uns den Aufbau eines kompletten Workflows genauer anzuschauen. Zu Beginn des Workflows werden noch allgemeine Informationen und Konfigurationsmöglichkeiten definiert. Schauen wir uns ein Beispiel anhand von Auszügen des Standard-Upload-Workflows "Process upon upload and schedule" an. Zur besseren Lesbarkeit wird das yaml-Format verwendet. Der vollständige Workflow im xml-Format lässt sich im offiziellen GitHub Repository finden.

    ---
    id: schedule-and-upload
    title: Process upon upload and schedule
    tags:
      - upload
      - schedule
    displayOrder: 100
    description: |-
        The default workflow for processing media.
        If straight to publishing is checked, then the uploaded media will be published without cutting.

    Die id kann frei gewählt werden, muss jedoch einzigartig sein, damit Opencast den Workflow korrekt erkennt.
    Der titel wiederum kann komplett frei gewählt werden und definiert, unter welchem Namen der Workflow in den Nutzeranzeigen erscheint.
    Die tags geben an, wo der Workflow angezeigt wird, also beispielsweise im Upload Formular, im Editor oder beim Planen von Videoaufzeichnungen. Sie können auch komplett ausgelassen werden, damit der Workflow gar nicht direkt von Nutzenden ausgewählt werden kann. Intern kann er, wie wir später noch sehen werden, dann trotzdem durch andere Workflows eingebunden und verwendet werden.
    Die displayOrder bestimmt die Reihenfolge, in der die Workflows angezeigt werden.
    Letztlich wird über die description eine kurze Beschreibung des Workflows für die Nutzenden gegeben.

    configuration_panel_json: |-
      [{
        "fieldset": [
          {
            "type": "checkbox",
            "name": "straightToPublishing",
            "label": "Straight to publishing",
            "value": true
          }
        ]
      }]

    Im nächsten Abschnitt werden die Konfigurationen des Workflows definiert. Das kann hilfreich sein, damit Nutzende die Möglichkeit haben, optionale Verarbeitungsschritte auszuführen. In diesem Fall kann Nutzer durch eine Checkbox bestimmen, ob das Video direkt veröffentlicht wird. Alternativ bleibt es zunächst unveröffentlicht, um es beispielsweise vorher noch im Editor zu bearbeiten.
    Die gesetzte Variable straightToPublishing können wir in späteren Operationen aufgreifen und nutzen. So bestimmen wir, ob wir die jeweilige Operation ausführen

    So sieht das Ganze in der Admin-UI aus.

    Aus verschiedenen Operationen wird schließlich ein Workflow

    Als nächstes werden die einzelnen Operationen aneinandergereiht, damit am Ende ein Workflow entsteht. Eine kleine Auswahl zentraler Operationen wird in den folgenden Beispielen genauer vorgestellt. Für weiterführende Informationen können jeweils der entsprechende Abschnitt der Opencast Dokumentation sowie die Kommentare innerhalb der originalen Workflows betrachtet werden.

      - id: snapshot
        fail-on-error: true
        exception-handler-workflow: "partial-error"
        description: "Archive raw recording after ingest"
        configurations:
          - source-tags: "archive"

    Eine der wichtigsten Operationen ist snapshot . Damit lassen sich alle Videoelemente, die in diesem Fall zuvor mit dem Tag archive gekennzeichnet wurden, archivieren und somit sichern. Das macht sich später bemerkbar, wenn beispielsweise eine Version des Ursprungsvideos benötigt wird. Diese können wir für Neuverarbeitungen gebrauchen oder, um bereits verarbeitete Elemente zu sichern. Vorsicht: Alle Elemente, die nicht während des Workflows archiviert oder veröffentlicht werden, gehen nach Abschluss des Workflows verloren!

    Last but not least - Wir veröffentlichen unseren Workflow

      - id: include
        if: "${straightToPublishing}"
        description: "Publish the recording"
        configurations:
          - workflow-id: "partial-publish"

    Wie bereits erwähnt, lassen sich auch andere Workflows durch Operationen mit einbeziehen. Das kann eine gewisse Struktur im Aufbau gewährleisten, sodass häufige Abfolgen von Operationen erneut verwendet werden können. Im obigen Beispiel werden der Workflow partial-publish und damit alle enthaltenen Operationen berücksichtigt. Wir können außerdem sehen, wie die Variable straightToPublishing, die zuvor am Beginn des Workflows definiert wurde, verwendet wird. Sollte der Nutzer ausgewählt haben, dass das Video nicht direkt veröffentlicht wird, wird dieser Schritt komplett übersprungen.

      - id: publish-engage
        max-attempts: 2
        exception-handler-workflow: "partial-error"
        description: "Publishing to Opencast Media Module"
        configurations:
          - download-source-flavors: "dublincore/*,security/*"
          - download-source-tags: "engage-download"
          - streaming-source-tags: "engage-streaming"
          - check-availability: false

    Wird der partial-publish Workflow eingebunden, sehen wir nach diversen weiteren Operationen zur Verarbeitung am Ende die publish-engage Operation. Diese ist essenziell, um alle zuvor verarbeiteten Videoelemente zu publizieren. So können sie im PaellaPlayer, der in Opencast genutzt wird, abgespielt und ggf. heruntergeladen werden. Die Tags und Flavors werden erneut genutzt, um anzugeben, welche der zuvor verarbeiteten Elemente wohin publiziert werden sollen.

    Jetzt seid ihr dran - Probieren geht über Studieren

    Wie bereits erwähnt, war dies nur eine kleine Auswahl der Operationen, die in den Workflows genutzt werden. Ihr solltet aber nun das nötige Wissen besitzen, um selbst anzufangen, Workflows zu modifizieren oder sogar komplett neu zu schreiben. Workflows sind mächtige Werkzeuge, um den Funktionsumfang von einer Standard-Opencast Installation zu vergrößern und den eigenen Bedürfnissen anzupassen. Es lohnt sich, einen Blick auf die Liste der verfügbaren Operationen zu werfen. Hier bekommt ihr einen Überblick über alle weiteren Möglichkeiten.

    FunFact: Wie in dieser Präsentation gezeigt wurde, sind Opencast Workflows tatsächlich sogar Turing-vollständig. Das heißt, sie können theoretisch als Programmiersprache dienen und jede andere Turing-vollständige Maschine emulieren. Empfehlenswert ist dies aber eher nicht.

    Zuletzt sei noch gesagt, dass es, besonders bei komplexeren Funktionen, nicht immer leicht fällt, sofort einen perfekten, lauffähigen Workflow zu schreiben. Ich empfehle, mit den Standard-Workflows anzufangen und Schritt für Schritt Änderungen vorzunehmen. Wichtig: Zwischendurch testen und falls nötig, die Fehlermeldungen in den Log-Dateien oder der Opencast Admin-UI untersuchen.

    Einführung in Opencast Workflows
    Übersicht über ausgeführte Operationen in der Admin-UI

    Falls es doch mal zu kompliziert wird - Ein Fehler wird nicht gefunden oder ihr braucht eine ganz neue Operation: Der elan e.V. bietet natürlich auch Unterstützung an. Über unser Kontakt-Formular könnt ihr euch gerne jederzeit für ein Beratungsgespräch und ggf. weitere Unterstützung melden.

    Viel Spaß beim Ausprobieren!

    Porträt Jonas
    Autor: Jonas Dühring