Kurmann.Videoschnitt.Engine
0.1.2
Dieses NuGet-Package wird nicht mehr aktiv weiterentwickelt und ist archiviert. Die Entwicklung wird nun in https://github.com/kurmann/videoschnitt fortgeführt.
See the version list below for details.
dotnet add package Kurmann.Videoschnitt.Engine --version 0.1.2
NuGet\Install-Package Kurmann.Videoschnitt.Engine -Version 0.1.2
<PackageReference Include="Kurmann.Videoschnitt.Engine" Version="0.1.2" />
paket add Kurmann.Videoschnitt.Engine --version 0.1.2
#r "nuget: Kurmann.Videoschnitt.Engine, 0.1.2"
// Install Kurmann.Videoschnitt.Engine as a Cake Addin #addin nuget:?package=Kurmann.Videoschnitt.Engine&version=0.1.2 // Install Kurmann.Videoschnitt.Engine as a Cake Tool #tool nuget:?package=Kurmann.Videoschnitt.Engine&version=0.1.2
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
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.
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.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.
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, wobeiT
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
undQueryParams
sind spezifische Parameterklassen für Commands und Queries.Action<Result>
undAction<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 generischesT
) kommuniziert werden. - Queries (Leseoperationen) Daten abfragen und in Form von
Result<T>
zurückgeben, wobeiT
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;
}
}
Konfiguration
Die Kurmann.Videoschnitt.Engine setzt auf hohe Modularität und Flexibilität in der Konfiguration der verschiedenen Bereiche ihrer Architektur. Durch die Nutzung des Options-Patterns von .NET können Bereiche unabhängig konfiguriert werden, ohne dass sich Einstellungen gegenseitig überschreiben oder zentral definiert werden müssen. Dies fördert die Entkopplung innerhalb des Systems und minimiert Abhängigkeiten.
Unabhängige Konfiguration der Bereiche
Jeder Bereich der Videobearbeitungsplattform besitzt eine dedizierte Konfigurationssektion, die spezifisch auf seine Anforderungen zugeschnitten ist. Dies wird durch separate Konfigurationsabschnitte innerhalb der appsettings.json
oder anderer Konfigurationsquellen ermöglicht.
Beispiel für bereichsspezifische Konfigurationen:
{
"InfuseMediaLibrary": {
"LibraryRootPath": "/media/library/root"
},
"FinalCutPro": {
"ExportPath": "/exports/finalcut"
}
}
In diesem Beispiel hat jeder Bereich (InfuseMediaLibrary und FinalCutPro) seine eigene Sektion, was sicherstellt, dass die Konfigurationen isoliert voneinander bleiben.
Vorteile der isolierten Konfigurationsabschnitte
- Keine Überschneidungen: Durch die isolierte Speicherung der Konfigurationsdaten in eigenen Abschnitten wird vermieden, dass Einstellungen anderer Bereiche unbeabsichtigt überschrieben werden.
- Reduzierte Abhängigkeiten: Jeder Bereich kann seine Konfigurationsdaten unabhängig von anderen Teilen des Systems beziehen, was die Komplexität reduziert.
- Skalierbarkeit: Neue Bereiche können einfach durch Hinzufügen neuer Konfigurationsabschnitte integriert werden, ohne bestehende Bereiche zu beeinflussen.
Implementierung in .NET
Die Konfigurationen für jeden Bereich werden in der Startup-Konfiguration der Anwendung registriert und über IServiceCollection
bereitgestellt, wodurch eine starke Typisierung und eine einfache Verwaltung der Konfigurationsdaten ermöglicht wird.
services.Configure<MediaLibraryOptions>(Configuration.GetSection("InfuseMediaLibrary"));
services.Configure<FinalCutProOptions>(Configuration.GetSection("FinalCutPro"));
Diese Methode gewährleistet, dass jeder Bereich nur auf die für ihn relevanten Einstellungen zugreift und zentrale Abhängigkeiten vermieden werden.
Best Practices für die Konfiguration
- Klare Vertragsdefinition: Jeder Bereich sollte eine klar definierte Schnittstelle für seine Konfigurationsoptionen haben, repräsentiert durch entsprechende Klassen in C#.
- Einsatz von Umgebungsvariablen für übergreifende Einstellungen: Für allgemeine oder sicherheitssensible Konfigurationen sollten Umgebungsvariablen verwendet werden, um die Flexibilität und Sicherheit zu erhöhen.
- Konsistente Namenskonventionen: Die Namen der Konfigurationsbereiche und deren Schlüssel sollten sorgfältig gewählt werden, um Klarheit und Konsistenz sicherzustellen.
Durch diese strukturierte Herangehensweise an die Konfiguration unterstützt die Kurmann.Videoschnitt.Engine eine effiziente Skalierung und Anpassung an sich ändernde Anforderungen, während sie eine robuste und fehlerresistente Plattform für die Videobearbeitung bietet.
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 | Versions 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. |
-
net8.0
- CSharpFunctionalExtensions (>= 2.41.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- Microsoft.Extensions.Hosting (>= 8.0.0)
- Microsoft.Extensions.Logging (>= 8.0.0)
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 | 157 | 5/31/2024 | |
0.4.1 | 147 | 5/24/2024 | |
0.4.0 | 181 | 5/13/2024 | |
0.4.0-preview-9 | 103 | 5/12/2024 | |
0.4.0-preview-8 | 107 | 5/12/2024 | |
0.4.0-preview-7 | 108 | 5/12/2024 | |
0.4.0-preview-6 | 99 | 5/12/2024 | |
0.4.0-preview-5 | 100 | 5/12/2024 | |
0.4.0-preview-4 | 103 | 5/12/2024 | |
0.4.0-preview-3 | 108 | 5/12/2024 | |
0.4.0-preview-2 | 101 | 5/12/2024 | |
0.4.0-preview-18 | 106 | 5/13/2024 | |
0.4.0-preview-17 | 112 | 5/13/2024 | |
0.4.0-preview-16 | 106 | 5/13/2024 | |
0.4.0-preview-15 | 103 | 5/13/2024 | |
0.4.0-preview-14 | 107 | 5/13/2024 | |
0.4.0-preview-13 | 107 | 5/13/2024 | |
0.4.0-preview-12 | 101 | 5/13/2024 | |
0.4.0-preview-11 | 99 | 5/13/2024 | |
0.4.0-preview-10 | 102 | 5/13/2024 | |
0.4.0-preview | 103 | 5/12/2024 | |
0.3.0 | 127 | 5/12/2024 | |
0.3.0-preview-3 | 103 | 5/12/2024 | |
0.3.0-preview-2 | 100 | 5/12/2024 | |
0.3.0-preview | 101 | 5/12/2024 | |
0.2.1 | 133 | 5/10/2024 | |
0.2.0 | 126 | 5/9/2024 | |
0.1.2 | 97 | 5/3/2024 | |
0.1.1 | 96 | 5/3/2024 |