Kurmann.Videoschnitt.Engine 0.1.1

Additional Details

Dieses NuGet-Package wird nicht mehr aktiv weiterentwickelt und ist archiviert. Die Entwicklung wird nun in https://github.com/kurmann/videoschnitt fortgeführt.

There is a newer version of this package available.
See the version list below for details.
dotnet add package Kurmann.Videoschnitt.Engine --version 0.1.1                
NuGet\Install-Package Kurmann.Videoschnitt.Engine -Version 0.1.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Kurmann.Videoschnitt.Engine" Version="0.1.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Kurmann.Videoschnitt.Engine --version 0.1.1                
#r "nuget: Kurmann.Videoschnitt.Engine, 0.1.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Kurmann.Videoschnitt.Engine as a Cake Addin
#addin nuget:?package=Kurmann.Videoschnitt.Engine&version=0.1.1

// Install Kurmann.Videoschnitt.Engine as a Cake Tool
#tool nuget:?package=Kurmann.Videoschnitt.Engine&version=0.1.1                

Videoschnitt-Steuereinheit

Die Kurmann.Videoschnitt.Engine, der zentralen Steuereinheit für die Videobearbeitungsplattform von Kurmann, ist das Herzstück des modularen Systems und koordiniert die verschiedenen spezialisierten Module, die zusammenarbeiten, um umfassende Lösungen im Bereich Videoschnitt zu bieten.

Über die Engine

Die Kurmann.Videoschnitt.Engine ist entworfen, um eine robuste und flexible Plattform bereitzustellen, die die Integration verschiedener Videobearbeitungsmodule ermöglicht. Diese Engine ist nicht nur eine Laufzeitumgebung, sondern orchestriert auch die Ausführung von Aufgaben, verwaltet den Datenfluss zwischen Modulen und sorgt für die Einhaltung der Geschäftslogiken über das gesamte System.

Kernfunktionen

  • Modulintegration: Die Engine verwendet IServiceCollection für die flexible und konfigurierbare Integration von Modulen. Jedes Modul kann spezifische Funktionen wie Rendering, Schnitt, Effekte und mehr handhaben.

  • Businesslogik-Orchestrierung: Neben der technischen Koordination der Module steuert die Engine auch die Geschäftslogik, die die Entscheidungsfindung innerhalb des gesamten Systems leitet.

  • Workflow-Management: Die Engine ist verantwortlich für die Steuerung der Workflows, die notwendig sind, um Videoprojekte von Anfang bis Ende zu managen.

Architektur

Die Engine ist als modularer Monolith konzipiert, was bedeutet, dass sie zwar aus einzelnen, unabhängigen Modulen besteht, diese jedoch innerhalb eines einzigen, einheitlichen Prozesses laufen. Dieser Ansatz kombiniert die Einfachheit und Effizienz eines monolithischen Designs mit der Flexibilität und Skalierbarkeit modularer Komponenten.

Natürlich! Hier ist ein Teilkapitel für deine Dokumentation, das die API-Mechanismen der einzelnen Module beschreibt. Dieses Kapitel bietet eine klare Anleitung, wie die Module implementiert werden sollten, um effektiv mit der Kurmann.Videoschnitt.Engine zu kommunizieren.

Natürlich! Hier ist eine überarbeitete Version des Kapitels über den API-Mechanismus der Module, die die Trennung von Command- und Query-Operationen gemäß dem CQRS-Prinzip klarer hervorhebt. Dies wird für eine konsistente und integrierte Darstellung in der Dokumentation sorgen.

API-Mechanismus der Module

Jedes Modul in der Kurmann.Videoschnitt.Engine ist dafür ausgelegt, über eine gut definierte API mit der zentralen Engine zu kommunizieren. Diese Schnittstellen sind entscheidend für die effiziente und fehlerfreie Interaktion innerhalb des Gesamtsystems. Die folgenden Richtlinien sollen Entwicklern helfen, ihre Module so zu implementieren, dass sie nahtlos in die Engine integriert werden können.

Allgemeine Prinzipien

  1. Interface-Definition: Jedes Modul muss ein klar definiertes Interface implementieren, das seine Funktionen und die Art und Weise, wie es mit der Engine kommuniziert, beschreibt. Diese Interfaces sollten spezifische Methoden für die Aufgaben enthalten, die das Modul ausführen kann.

  2. Dependency Injection: Module sollten so gestaltet sein, dass sie ihre Abhängigkeiten über Konstruktoren oder öffentliche Eigenschaften injizieren lassen können. IServiceCollection wird genutzt, um diese Abhängigkeiten zur Laufzeit bereitzustellen und zu verwalten.

  3. Callback-Mechanismen: Um asynchrone Operationen zu unterstützen, sollten Module Callbacks oder ähnliche Mechanismen verwenden, um die Ergebnisse von Operationen zurück an die Engine zu kommunizieren.

  4. Fehlerbehandlung: Jedes Modul sollte robuste Fehlerbehandlungsmechanismen implementieren, um sicherzustellen, dass Fehler ordnungsgemäß erfasst und behandelt werden, ohne dass sie das Gesamtsystem beeinträchtigen.

Command und Query Trennung (CQRS)

Die API-Struktur jedes Moduls basiert auf dem Prinzip der Command Query Responsibility Segregation (CQRS), das eine klare Trennung zwischen Befehlen (Commands), die den Systemzustand ändern, und Abfragen (Queries), die Daten zurückgeben, vorsieht:

  • Commands: Methoden, die eine Veränderung oder eine Aktion im System bewirken und einen Result-Typ zurückgeben, der den Erfolg oder Misserfolg der Operation anzeigt.

  • Queries: Methoden, die Informationen abrufen und in Form von Result<T> zurückgeben, wobei T den Typ der angeforderten Daten darstellt.

Beispielhafte API-Struktur

Hier ist ein Beispiel für eine mögliche API-Struktur eines Moduls:

public interface IVideoProcessingModule
{
    void ProcessCommand(CommandParams parameters, Action<Result> onResult);
    void FetchData(QueryParams query, Action<Result<IEnumerable<VideoData>>> onResult);
}

In diesem Beispiel:

  • CommandParams und QueryParams sind spezifische Parameterklassen für Commands und Queries.
  • Action<Result> und Action<Result<T>> sind Callbacks, die verwendet werden, um das Ergebnis der Operationen zurück an die Engine zu melden.

Integration in die Engine

  • Registrierung: Module müssen sich bei ihrer Initialisierung selbst bei der Engine registrieren, indem sie ihre Dienste zur IServiceCollection hinzufügen.
  • Konfiguration: Konfigurationseinstellungen für jedes Modul sollten über die Engine zugänglich gemacht werden, idealerweise durch Umgebungsvariablen oder Konfigurationsdateien.
  • Lebenszyklus-Management: Die Engine sollte die Fähigkeit haben, den Lebenszyklus jedes Moduls zu steuern, einschließlich Starten, Stoppen und Neustarten bei Bedarf.

Dokumentation und Standards

  • Jedes Modul sollte eine umfassende Dokumentation seiner API bereitstellen, die klare Anweisungen zu den erwarteten Parametern, den Rückgabewerten und dem Fehlerverhalten enthält.
  • Die Einhaltung von Coding-Standards und Best Practices ist entscheidend, um die Qualität und Wartbarkeit des Gesamtsystems zu gewährleisten.

Die Implementierung dieser API-Prinzipien stellt sicher, dass alle Module effizient mit der Kurmann.Videoschnitt.Engine kommunizieren und integrieren können, wodurch das Gesamtsystem zuverlässiger und einfacher zu verwalten ist.

Warum diese API-Struktur?

Die Architektur der API für die Module der Kurmann.Videoschnitt.Engine folgt einem bewussten Designprinzip, das darauf abzielt, die Entwicklung effizient und die Integration sicher zu gestalten. Die Entscheidung für eine Trennung von Command- und Query-Operationen, gepaart mit einer klaren Callback-Struktur, stützt sich auf mehrere zentrale Überlegungen:

1. Klare Trennung von Commands und Queries (CQRS-Prinzip)

Die Anwendung des Command Query Responsibility Segregation (CQRS) Prinzips ermöglicht es, dass:

  • Commands (Schreiboperationen) klare Aktionen auslösen und Seiteneffekte verursachen können, deren Ergebnisse durch den Rückgabetyp Result ohne zusätzliche Daten (also ohne generisches T) kommuniziert werden.
  • Queries (Leseoperationen) Daten abfragen und in Form von Result<T> zurückgeben, wobei T den Typ der angeforderten Daten darstellt.

Diese Trennung fördert nicht nur die Übersichtlichkeit und Wartbarkeit des Codes, sondern erleichtert auch die Optimierung der Datenverwaltung und die Skalierbarkeit der Anwendung.

2. Immediate Response Handling durch Callbacks

Durch das direkte Einbeziehen von Callbacks (Action<Result> oder Action<Result<T>>) in die API-Definition wird sichergestellt, dass Entwickler:

  • Unmittelbar über das Ergebnis einer Operation informiert werden.
  • Gezwungen sind, sich bereits bei der Implementierung des Moduls mit der Verarbeitung von Erfolg und Misserfolg auseinanderzusetzen.
  • Fehlerbehandlungsstrategien frühzeitig in den Entwicklungsprozess integrieren können, was die Robustheit des Gesamtsystems verbessert.
3. Förderung der Fehlerresilienz

Die explizite Rückgabe von Result oder Result<T> ermöglicht eine differenzierte Fehlerbehandlung:

  • Erfolg und Fehler werden als Teil des normalen Programmflusses behandelt, nicht als Ausnahmen, was zu einer stabileren und vorhersehbareren Software führt.
  • Entwickler können auf Basis des Rückgabewerts entscheiden, wie im Fehlerfall verfahren werden soll, beispielsweise durch Wiederholung des Befehls, Benutzerbenachrichtigungen oder andere Kompensationslogiken.
4. Unterstützung asynchroner Verarbeitung

Obwohl die aktuelle Implementierung Callbacks verwendet, ist das Muster so gewählt, dass es leicht zu asynchronen Patterns erweitert werden kann, die auf Task oder Task<T> basieren:

  • Dies bietet Flexibilität für zukünftige Erweiterungen, ohne die bestehende Modulstruktur umfassend anpassen zu müssen.
  • Asynchrone Verarbeitung ist besonders kritisch in Umgebungen mit hoher Last oder bei Operationen, die signifikante Latenz verursachen können (z.B. Netzwerkaufrufe, I/O-Operationen).
Zusammenfassung

Die gewählte API-Struktur mit ihrem Schwerpunkt auf dem CQRS-Prinzip, der direkten Integration von Response-Handling und der klaren Fehlerbehandlung trägt entscheidend zur Effizienz, Sicherheit und Robustheit der Kurmann.Videoschnitt.Engine bei. Sie stellt sicher, dass das System nicht nur funktionell vollständig, sondern auch in der Lage ist, sich dynamisch an veränderte Anforderungen anzupassen.

Dokumentation und Standards

  • Jedes Modul sollte eine umfassende Dokumentation seiner API bereitstellen, die klare Anweisungen zu den erwarteten Parametern, den Rückgabewerten und dem Fehlerverhalten enthält.
  • Die Einhaltung von Coding-Standards und Best Practices ist entscheidend, um die Qualität und Wartbarkeit des Gesamtsystems zu gewährleisten.

Die Implementierung dieser API-Prinzipien stellt sicher, dass alle Module effizient mit der Kurmann.Videoschnitt.Engine kommunizieren und integrieren können, wodurch das Gesamtsystem zuverlässiger und einfacher zu verwalten ist.

Lebenszyklusmanagement durch .NET's Hosted Service

Um ein effizientes Management des Lebenszyklus für alle Module in der Kurmann.Videoschnitt.Engine zu gewährleisten, nutzen wir die Funktionalitäten von .NET's Hosted Service. Dieser Ansatz bietet eine robuste und standardisierte Methode, um Start, Ausführung und Beendigung von Diensten innerhalb der Anwendung zu steuern.

Integration in die Engine

Jedes Modul erbt von IHostedService, das spezielle Methoden zur Verwaltung des Lebenszyklus bereitstellt:

  • StartAsync: Wird aufgerufen, wenn die Anwendung startet. Hier können Module ihre Initialisierung und den Start ihrer Operationen durchführen.
  • StopAsync: Wird aufgerufen, wenn die Anwendung eine ordnungsgemäße Beendigung durchführt. Module können hier Bereinigungen und notwendige Abschlüsse ihrer Operationen vornehmen.

Durch die Vererbung dieser Schnittstelle erhalten die Module einen strukturierten und zuverlässigen Rahmen, um ihre Lebenszyklusereignisse in Einklang mit dem Gesamtsystem zu handhaben.

Vorteile des Hosted Service

  • Konsistenz: Das Verhalten der Module während des Startens und Beendens wird durch das .NET Framework standardisiert, was die Konsistenz über alle Module hinweg sicherstellt.
  • Zuverlässigkeit: Durch die Verwendung standardisierter Methoden reduziert sich das Risiko von Fehlern bei der Implementierung des Lebenszyklusmanagements.
  • Einfachheit: Entwickler müssen sich nicht um die Details der Lebenszyklussteuerung kümmern, sondern können sich auf die Kernlogik der Module konzentrieren.

Beispiel für ein Modul als Hosted Service

public class VideoProcessingService : IHostedService
{
    public Task StartAsync(CancellationToken cancellationToken)
    {
        // Initialisierungslogik hier
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        // Bereinigungslogik hier
        return Task.CompletedTask;
    }
}

Beitrag

Beiträge zur Kurmann.Videoschnitt.Engine sind willkommen. Wenn Sie Fehler finden oder neue Features vorschlagen möchten, eröffnen Sie bitte ein Issue im Repository.

Lizenz

Dieses Projekt ist unter der MIT Lizenz lizenziert.

Kontakt

Für weitere Informationen oder Unterstützung kontaktieren Sie mich bitte über info@kurmann.com.

Vielen Dank für Ihr Interesse an der Kurmann.Videoschnitt.Engine. Wir hoffen, dass dieses Projekt Ihre Erwartungen erfüllt und zur Verbesserung Ihrer Videobearbeitungsprojekte beiträgt.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.4.2 159 5/31/2024 0.4.2 is deprecated because it is no longer maintained.
0.4.1 149 5/24/2024 0.4.1 is deprecated because it is no longer maintained.
0.4.0 183 5/13/2024 0.4.0 is deprecated because it is no longer maintained.
0.4.0-preview-9 103 5/12/2024 0.4.0-preview-9 is deprecated because it is no longer maintained.
0.4.0-preview-8 107 5/12/2024 0.4.0-preview-8 is deprecated because it is no longer maintained.
0.4.0-preview-7 108 5/12/2024 0.4.0-preview-7 is deprecated because it is no longer maintained.
0.4.0-preview-6 99 5/12/2024 0.4.0-preview-6 is deprecated because it is no longer maintained.
0.4.0-preview-5 100 5/12/2024 0.4.0-preview-5 is deprecated because it is no longer maintained.
0.4.0-preview-4 103 5/12/2024 0.4.0-preview-4 is deprecated because it is no longer maintained.
0.4.0-preview-3 108 5/12/2024 0.4.0-preview-3 is deprecated because it is no longer maintained.
0.4.0-preview-2 101 5/12/2024 0.4.0-preview-2 is deprecated because it is no longer maintained.
0.4.0-preview-18 106 5/13/2024 0.4.0-preview-18 is deprecated because it is no longer maintained.
0.4.0-preview-17 112 5/13/2024 0.4.0-preview-17 is deprecated because it is no longer maintained.
0.4.0-preview-16 106 5/13/2024 0.4.0-preview-16 is deprecated because it is no longer maintained.
0.4.0-preview-15 103 5/13/2024 0.4.0-preview-15 is deprecated because it is no longer maintained.
0.4.0-preview-14 107 5/13/2024 0.4.0-preview-14 is deprecated because it is no longer maintained.
0.4.0-preview-13 107 5/13/2024 0.4.0-preview-13 is deprecated because it is no longer maintained.
0.4.0-preview-12 101 5/13/2024 0.4.0-preview-12 is deprecated because it is no longer maintained.
0.4.0-preview-11 99 5/13/2024 0.4.0-preview-11 is deprecated because it is no longer maintained.
0.4.0-preview-10 102 5/13/2024 0.4.0-preview-10 is deprecated because it is no longer maintained.
0.4.0-preview 103 5/12/2024 0.4.0-preview is deprecated because it is no longer maintained.
0.3.0 129 5/12/2024 0.3.0 is deprecated because it is no longer maintained.
0.3.0-preview-3 103 5/12/2024 0.3.0-preview-3 is deprecated because it is no longer maintained.
0.3.0-preview-2 100 5/12/2024 0.3.0-preview-2 is deprecated because it is no longer maintained.
0.3.0-preview 101 5/12/2024 0.3.0-preview is deprecated because it is no longer maintained.
0.2.1 135 5/10/2024 0.2.1 is deprecated because it is no longer maintained.
0.2.0 128 5/9/2024 0.2.0 is deprecated because it is no longer maintained.
0.1.2 99 5/3/2024 0.1.2 is deprecated because it is no longer maintained.
0.1.1 98 5/3/2024 0.1.1 is deprecated because it is no longer maintained.