# Recording Pipeline

Source: https://www.veeting.com/de/developer-documentation/recording-pipeline

## Übersicht

Wenn ein aufgezeichnetes Meeting geschlossen wird, macht die Veeting Recording Pipeline aus den Rohdaten der Teilnehmer fertige Dateien: ein Video des ganzen Meetings in der Galerie-Ansicht und, falls aktiviert, eine MP4-Kopie, eine Transkription und ein Siegel, das nachträgliche Änderungen an all diesen Dateien sichtbar macht.

Die Pipeline besteht aus mehreren Schritten. Einige laufen immer, andere werden pro Installation oder pro Kunde aktiviert. Mehrere Schritte übergeben ihre Arbeit an einen externen Dienst, einen *Anbieter*. Diese Anbieter sind austauschbar, die Pipeline ist an keinen einzelnen Anbieter gebunden. Transkription is in unserer Standardlösung Veeting Rooms *nicht* aktiviert.

## So funktioniert die Pipeline

![Die Recording Pipeline: Die Rohdaten pro Teilnehmer werden aufgezeichnet, decodiert und zu einem Galerie-Video zusammengesetzt, optional als MP4 exportiert und transkribiert, optional mit Manifest, digitaler Signatur und Zeitstempel versiegelt und per Webhook und E-Mail gemeldet](/assets/img/documentation/recording-pipeline.de.svg)

```mermaid
flowchart TB
    classDef core fill:#ffffff,stroke:#000000,stroke-width:2px,color:#000000
    classDef optional fill:#ffffff,stroke:#000000,stroke-dasharray:5 4,color:#000000
    classDef provider fill:#ffffff,stroke:#000000,color:#000000

    subgraph S1["Aufzeichnung"]
        direction LR
        REC["Audio- und Videostreams,<br/>pro Teilnehmer separat"]:::core
        ORIGIN["Prüfsummen der Rohdateien,<br/>inkl. digitaler Signatur und Zeitstempel"]:::optional
        REC -.-> ORIGIN
    end

    subgraph S2["Prozessierung"]
        direction LR
        PREP["Decodieren und Zusammenfügen der<br/>einzelnen Audio- und Videodateien"]:::core
        COMPOSE["Pausen und Unterbrüche erkennen,<br/>Galerie-Video erstellen"]:::core
        AUDIO["Reine Audio-Meetings:<br/>fertig gemixter Audiostream aller Teilnehmer"]:::core
        PREP --> COMPOSE
    end

    subgraph S3["Optionale Ausgaben"]
        direction LR
        MP4["MP4-Export"]:::optional
        TRANSCRIPT["Transkription<br/>Text, SRT, JSON"]:::optional
        TP{{"OpenAI Whisper, DeepVA,<br/>Ihr eigener Transkriptions-Service"}}:::provider
        TP --- TRANSCRIPT
    end

    subgraph S4["Ausgabe-Siegel"]
        direction LR
        MANIFEST["Integritätsmanifest<br/>SHA-256 für jede Datei"]:::optional
        SIGNATURE["Digitale Signatur"]:::optional
        TIMESTAMP["Zeitstempel-Service<br/>RFC 3161"]:::optional
        SP{{"Privater Schlüssel von Veeting,<br/>Ihr eigener Signaturservice,<br/>z. B. mit einem qualifizierten Zertifikat"}}:::provider
        TSP{{"DigiCert, SwissSign, Sigstore,<br/>Ihr eigener RFC-3161-Zeitstempel-Service"}}:::provider
        MANIFEST -.-> SIGNATURE
        MANIFEST -.-> TIMESTAMP
        SP --- SIGNATURE
        TSP --- TIMESTAMP
    end

    OUT[("Fertige Aufzeichnung<br/>Video und Audio, einzelne Videos pro Abschnitt<br/>und pro Teilnehmer, Manifest, Signaturen und Zeitstempel")]:::core
    READY["Aufzeichnung steht bereit<br/>Webhook, E-Mail"]:::core

    REC --> PREP
    REC --> AUDIO
    ORIGIN -.-> PREP
    COMPOSE --> OUT
    AUDIO --> OUT
    COMPOSE -.-> MP4
    COMPOSE -.-> TRANSCRIPT
    AUDIO -.-> TRANSCRIPT
    COMPOSE -.-> MANIFEST
    AUDIO -.-> MANIFEST
    MP4 -.-> MANIFEST
    TRANSCRIPT -.-> MANIFEST
    SIGNATURE -.-> OUT
    TIMESTAMP -.-> OUT
    OUT --> READY

    style S1 fill:#ffffff,stroke:#000000
    style S2 fill:#ffffff,stroke:#000000
    style S3 fill:#ffffff,stroke:#000000
    style S4 fill:#ffffff,stroke:#000000
```

Schritte mit durchgezogenem Rahmen laufen immer. Schritte mit gestricheltem Rahmen sind optional. Die Sechsecke sind Anbieter-Slots. Sie nennen die heute unterstützten Anbieter und zeigen, wo Ihr eigener Dienst andocken kann.

1. **Aufzeichnung.** Während des Meetings zeichnet der Medienserver Audio und Video jedes Teilnehmers als separate Rohdateien auf. *Optional:* Zu Beginn der Prozessierung, bevor sie verarbeitet oder verschoben werden, werden für diese Rohdateien Prüfsummen berechnet, signiert und mit einem Zeitstempel versehen. Das ist das *Ursprungs-Siegel*.
2. **Prozessierung.** Die Pipeline decodiert die Rohdateien und legt sie auf eine gemeinsame Zeitachse. Sie teilt das Meeting in *Abschnitte* auf, getrennt durch Unterbrüche: wenn alle das Meeting verlassen oder die Aufzeichnung gestoppt und neu gestartet wird. Für jeden Abschnitt erstellt sie ein Video in der Galerie-Ansicht, das die Teilnehmer nebeneinander zeigt. Darunter liegt das gemischte Audio aller Teilnehmer. Bei reinen Audio-Meetings entfallen die Video-Schritte. Grosse Installationen erledigen diesen Schritt auf einem eigenen Recording-Server, damit der Medienserver seine Ressourcen für die laufenden Meetings behält.
3. **Optionale Ausgaben.** Eine MP4-Kopie, die in den meisten Playern läuft. Dazu eine Transkription des ganzen Meetings und jedes Abschnitts als Text, SRT-Untertitel und JSON, erstellt vom Transkriptions-Anbieter Ihrer Wahl.
4. **Ausgabe-Siegel.** *Optional:* Ein Manifest listet jede ausgelieferte Datei mit ihrer SHA-256-Prüfsumme auf. Das Manifest wird digital signiert und danach von einer unabhängigen Zeitstempel-Stelle mit einem Zeitstempel versehen. Ändert sich danach auch nur ein Byte einer ausgelieferten Datei, schlägt die Prüfung fehl und nennt die Datei.
5. **Fertigstellung.** Die Plattform ruft den [Webhook](/de/developer-documentation/web-hooks) `onMeetingRecordingCreated` auf. So kann Ihr eigenes System die Aufzeichnung sofort in einen permanenten Speicher kopieren. Die Prüfdateien liegen neben der Aufzeichnung, am selben Ort wie `mergedRecordingUrl`. Kopieren Sie sie mit. Je nach Einstellungen des Meetings erhalten der Organisator und optional alle Teilnehmer eine E-Mail mit einem Link zur Aufzeichnung.

## Anbieter

Jeder Anbieter-Slot ist offen. Nutzen Sie einen der heute unterstützten Anbieter, oder lassen Sie uns Ihren eigenen anbinden.

| Schritt           | Heute unterstützt                        | Einen weiteren Anbieter anbinden                                                                                |
| ----------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Transkription     | OpenAI Whisper, DeepVA                   | Eine REST API, die den Upload einer Audiodatei erlaubt. Veeting ergänzt dafür ein Anbieter-Modul                |
| Digitale Signatur | Ein Schlüssel pro Veeting Server         | Ihr eigener Signaturdienst, zum Beispiel mit einem qualifizierten Zertifikat. Ergänzt durch Veeting auf Anfrage |
| Zeitstempel       | DigiCert (Standard), SwissSign, Sigstore | Jede Zeitstempel-Stelle, die RFC 3161 unterstützt. Nur Konfiguration, kein neuer Code                           |

Auch die Schritte selbst sind nicht fix: Weitere Schritte lassen sich ergänzen, wo eine Installation sie braucht. Wenn Sie etwas im Sinn haben, [sprechen Sie mit uns](mailto:info@veeting.com).

## Eine versiegelte Aufzeichnung prüfen

Eine versiegelte Aufzeichnung enthält neben den Aufzeichnungsdateien auch ihre Prüfdateien. Für eine Aufzeichnung mit dem Token `<token>`:

| Datei                   | Enthält                                                                                          | Belegt |
| ----------------------- | ------------------------------------------------------------------------------------------------ | ------ |
| `<token>.meta.json`     | Das Manifest: jede ausgelieferte Datei mit Grösse und SHA-256-Prüfsumme                          | Was    |
| `<token>.meta.sig`      | Eine digitale Signatur über das Manifest (ECDSA P-256)                                           | Wer    |
| `<token>.meta.tsr`      | Ein Zeitstempel über das Manifest (RFC 3161) von einer unabhängigen Stelle                       | Wann   |
| `<token>.origin.meta.*` | Das Ursprungs-Siegel: dieselben drei Dateien für die Rohdateien, erstellt vor jeder Verarbeitung | Woraus |

Das Siegel setzt durchgehend auf offene Standards. Jeder kann es deshalb unabhängig von Veeting mit `sha256sum` und OpenSSL 3 prüfen. Jede Plattform veröffentlicht die öffentlichen Schlüssel ihrer Server unter `https://<HOSTNAME>/api/v6/recording-integrity/signing-keys`. Archivieren Sie die Prüfdateien immer zusammen mit der Aufzeichnung.

Eine erfolgreiche Prüfung zeigt, dass sich keine der Dateien nach dem Versiegeln verändert hat, dass ein Veeting Server das Siegel signiert hat und dass es spätestens zum Zeitpunkt des Zeitstempels existierte. Über den Inhalt vor dem Versiegeln sagt sie nichts aus. Das Ursprungs-Siegel verlegt diesen Punkt zurück auf den Moment, in dem die Prüfsummen der Rohdateien berechnet wurden. Das Siegel ist kein qualifiziertes elektronisches Siegel nach Schweizer Recht (ZertES) oder EU-Recht (eIDAS). Eine qualifizierte Zeitstempel-Stelle lässt sich schon heute konfigurieren, einen qualifizierten Signaturdienst ergänzt Veeting auf Anfrage.

Für eine Schritt-für-Schritt-Anleitung zur Prüfung und das Prüf-Tool von Veeting [kontaktieren Sie uns](mailto:info@veeting.com).

---

## Die übrige Dokumentation

- [Custom Tools – eigene Widgets im Meetingraum](https://www.veeting.com/de/developer-documentation/custom-tools)
- [Externer Autorisierungsdienst](https://www.veeting.com/de/developer-documentation/external-meeting-authorization-service)
- [iFrame und Web Komponenten](https://www.veeting.com/de/developer-documentation/iframe-and-web-components)
- [JavaScript APIs](https://www.veeting.com/de/developer-documentation/javascript-apis)
- [JavaScript und Typescript APIs](https://www.veeting.com/de/veeting-blocks/apis)
- [Komponenten](https://www.veeting.com/de/veeting-blocks/components)
- [Kontrolle über die Videodarstellung](https://www.veeting.com/de/developer-documentation/video-display-calculator)
- [Parameter in der URL](https://www.veeting.com/de/developer-documentation/query-parameters)
- [Raumsystem-Steuerung](https://www.veeting.com/de/developer-documentation/room-system-control)
- [Veeting Blocks - Übersicht](https://www.veeting.com/de/veeting-blocks/introduction)
- [Veeting Rooms REST APIs](https://www.veeting.com/de/developer-documentation/api-usage)
- [Webhooks](https://www.veeting.com/de/developer-documentation/web-hooks)

Alles in einer Datei: https://www.veeting.com/llms-full.txt
