Kurmann.Videoschnitt.Engine
0.2.0
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.2.0
NuGet\Install-Package Kurmann.Videoschnitt.Engine -Version 0.2.0
<PackageReference Include="Kurmann.Videoschnitt.Engine" Version="0.2.0" />
paket add Kurmann.Videoschnitt.Engine --version 0.2.0
#r "nuget: Kurmann.Videoschnitt.Engine, 0.2.0"
// Install Kurmann.Videoschnitt.Engine as a Cake Addin #addin nuget:?package=Kurmann.Videoschnitt.Engine&version=0.2.0 // Install Kurmann.Videoschnitt.Engine as a Cake Tool #tool nuget:?package=Kurmann.Videoschnitt.Engine&version=0.2.0
Kurmann.Videoschnitt.Engine
Überblick
Die Kurmann.Videoschnitt.Engine ist das Kernstück unserer Videobearbeitungsplattform und dient als zentrale Steuereinheit, die die verschiedenen spezialisierten Module koordiniert. Diese Module arbeiten zusammen, um umfassende Lösungen im Bereich des Videoschnitts zu bieten. Entwickelt mit dem Ziel, Flexibilität und Robustheit zu maximieren, bietet die Engine eine Plattform für die Integration von Videobearbeitungsmodulen wie Rendering, Schnitt, Effekte und mehr.
Architektur
Modularer Aufbau
Die Kurmann.Videoschnitt.Engine ist als modularer Monolith konzipiert, was bedeutet, dass sie aus einzelnen, unabhängigen Modulen besteht, die innerhalb eines einzigen, einheitlichen Prozesses laufen. Dieser Ansatz kombiniert die Einfachheit und Effizienz eines monolithischen Designs mit der Flexibilität und Skalierbarkeit modularer Komponenten. Jedes Modul ist darauf ausgelegt, spezifische Aufgaben innerhalb der Videobearbeitungsplattform zu übernehmen und über eine klar definierte API mit der zentralen Engine zu kommunizieren.
Engine als Koordinator
Die Hauptrolle der Engine ist es, als Koordinator zu fungieren, der die Ausführung von Aufgaben überwacht, den Datenfluss zwischen den Modulen verwaltet und die Einhaltung der Geschäftslogiken über das gesamte System sicherstellt. Sie ist nicht nur eine Laufzeitumgebung, sondern orchestriert auch die technischen und geschäftlichen Aspekte der Videobearbeitungsprozesse. Durch die zentrale Steuerung der Workflows und die Koordination der Interaktionen zwischen den Modulen sorgt die Engine dafür, dass die Videoprojekte effizient und fehlerfrei von Anfang bis Ende verwaltet werden.
Diese Architektur erleichtert die Wartung und Skalierung der Plattform, indem sie eine klare Trennung der Verantwortlichkeiten ermöglicht und gleichzeitig die Interdependenzen zwischen den Modulen minimiert. So können Entwickler und Techniker schnell auf Veränderungen reagieren und neue Funktionen oder Verbesserungen mit minimalen Störungen für den Gesamtbetrieb implementieren.
Kernfunktionen
Die Kurmann.Videoschnitt.Engine bietet eine Vielzahl von Kernfunktionen, die darauf ausgelegt sind, eine leistungsfähige und flexible Videobearbeitungsplattform bereitzustellen. Jede dieser Funktionen trägt dazu bei, die Produktivität zu steigern und die Benutzerfreundlichkeit zu verbessern. Hier sind die wichtigsten Funktionen, die von unserer Engine angeboten werden:
Modulintegration
Die Engine verwendet das IServiceCollection
-Framework, um die Integration verschiedener Videobearbeitungsmodule flexibel und konfigurierbar zu gestalten. Jedes Modul, wie z.B. Rendering, Schnitt oder Effekte, ist speziell darauf ausgelegt, bestimmte Funktionen zu handhaben und kann nach Bedarf in das Gesamtsystem eingefügt oder entfernt werden. Dies ermöglicht eine anpassbare Lösung, die sich sowohl an kleine als auch an große Produktionsumgebungen anpassen lässt.
Businesslogik-Orchestrierung
Neben der technischen Koordination der Module steuert die Engine die Geschäftslogik, die die Entscheidungsfindung innerhalb des gesamten Systems leitet. Dies umfasst das Management von Benutzeranforderungen, die Priorisierung von Aufgaben und die Optimierung der Ressourcennutzung. Durch diese zentrale Steuerung wird sichergestellt, dass alle Aktionen im Einklang mit den Geschäftszielen und Kundenanforderungen stehen.
Workflow-Management
Die Engine ist verantwortlich für die Steuerung der Workflows, die notwendig sind, um Videoprojekte von Anfang bis Ende zu managen. Dies beinhaltet die Planung und Ausführung von Aufgaben, das Management von Abhängigkeiten zwischen den Aufgaben und die Überwachung des Fortschritts. Die Workflow-Management-Funktionen sind darauf ausgerichtet, eine effiziente Durchführung der Videobearbeitungsprozesse zu gewährleisten und die Einhaltung der Projektpläne sicherzustellen.
Event-Handling und Messaging
Durch die Integration der Kurmann.Messaging
-Bibliothek unterstützt die Engine ein leistungsstarkes, asynchrones Event-Handling, das eine lose Kopplung zwischen den Komponenten ermöglicht. Die Engine und die Module nutzen diese Funktion, um Zustandsänderungen, wichtige Ereignisse und andere relevante Informationen zu kommunizieren, wodurch eine reaktive und adaptive Systemumgebung geschaffen wird.
API-Mechanismus der Module
Die Kurmann.Videoschnitt.Engine ist darauf ausgelegt, durch eine gut definierte API die Kommunikation und Interaktion zwischen den einzelnen Modulen und der zentralen Engine zu ermöglichen. Dieses Kapitel beschreibt die verschiedenen Aspekte der API-Struktur, die es Entwicklern ermöglicht, ihre Module so zu implementieren, dass sie nahtlos in die Engine integriert werden können.
Allgemeine Prinzipien
Die API jedes Moduls ist so gestaltet, dass sie eine klare Trennung zwischen verschiedenen Operationstypen bietet und sich an die Command Query Responsibility Segregation (CQRS) hält. Dieses Prinzip trennt die Befehle (Commands), die den Systemzustand ändern, von den Abfragen (Queries), die Daten abrufen, ohne den Zustand zu ändern. Durch diese Trennung wird die Effizienz gesteigert und die Klarheit der Operationen verbessert.
Commands
Commands sind Operationen, die eine Änderung im System bewirken. Sie können synchron oder asynchron ausgeführt werden:
- Initiate Commands: Asynchrone Befehle, die einen Prozess starten, und eine Bestätigung über dessen Initiierung zurückgeben. Der Endstatus oder das Ergebnis wird über Events kommuniziert.
Task<Result> InitiateCommand(CommandParams parameters);
- Direct Commands: Synchrone Befehle, die sofort ausgeführt werden und direkt eine Antwort auf das Ergebnis der Operation liefern.
Result ExecuteCommand(CommandParams parameters);
Queries
Queries sind Anfragen, die Informationen aus dem System abrufen, ohne den Zustand zu verändern. Sie können ebenfalls synchron oder asynchron sein:
- Direct Queries: Synchrone Abfragen, die sofort Daten zurückliefern.
Result<T> ExecuteQuery<T>(QueryParams parameters);
- Initiate Queries: Asynchrone Abfragen, deren Ergebnisse später bereitgestellt werden.
Task<Result> InitiateQuery(QueryParams parameters);
Event-Driven APIs
Um die Interaktionen innerhalb der Plattform effizient und reaktionsfähig zu gestalten, unterstützt die API auch ein eventgesteuertes Modell. Dieses Modell ermöglicht es Modulen, Events zu generieren, die von der Engine oder anderen Modulen abonniert und verarbeitet werden können, um eine lose Kopplung und hohe Reaktionsfähigkeit des Gesamtsystems zu gewährleisten.
API-Dokumentation und Standards
Eine umfassende Dokumentation jeder API ist unerlässlich, um eine korrekte und effiziente Nutzung der bereitgestellten Funktionalitäten sicherzustellen. Die Dokumentation sollte detaillierte Informationen zu den erwarteten Parametern, den Rückgabewerten, und dem Verhalten bei Fehlern für jede Art von Command oder Query enthalten. Dies stellt sicher, dass Entwickler klare und präzise Anleitungen haben, wie sie die APIs nutzen können, um eine nahtlose Integration und optimale Leistung zu erreichen.
Lebenszyklusmanagement durch .NET's Hosted Service
Ein effizientes Management des Lebenszyklus für alle Module innerhalb der Kurmann.Videoschnitt.Engine ist entscheidend für die Aufrechterhaltung einer stabilen und zuverlässigen Plattform. Um dieses Ziel zu erreichen, setzen wir auf die Funktionalitäten von .NET's Hosted Service
. Dieser Ansatz bietet eine robuste und standardisierte Methode, um den Start, die Ausführung und die Beendigung von Diensten innerhalb der Anwendung zu steuern.
Integration in die Engine
Jedes Modul in der Kurmann.Videoschnitt.Engine implementiert das IHostedService
-Interface, welches spezielle Methoden zur Verwaltung des Lebenszyklus bereitstellt. Diese Schnittstelle erlaubt es, Module als Dienste zu behandeln, die durch das .NET Core Hosting Framework verwaltet werden.
StartAsync und StopAsync Methoden
Die IHostedService
-Schnittstelle definiert zwei Hauptmethoden, die für das Lebenszyklusmanagement von Modulen entscheidend sind:
StartAsync: Diese Methode wird aufgerufen, wenn die Anwendung startet. Hier können Module ihre Initialisierungslogik durchführen, Ressourcen allokieren und notwendige Startkonfigurationen einstellen. Dies ist der ideale Ort für Module, um Verbindungen zu Datenbanken herzustellen, Netzwerkressourcen zu initialisieren oder einfach ihre interne Zustände vorzubereiten.
public Task StartAsync(CancellationToken cancellationToken) { // Initialisierungslogik hier return Task.CompletedTask; }
StopAsync: Diese Methode wird aufgerufen, wenn die Anwendung eine ordnungsgemäße Beendigung durchführt. Hier können Module ihre Bereinigungslogik durchführen, offene Ressourcen freigeben und sicherstellen, dass alle Daten korrekt gespeichert sind, bevor die Anwendung vollständig herunterfährt.
public Task StopAsync(CancellationToken cancellationToken) { // Bereinigungslogik hier return Task.CompletedTask; }
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
Hier ist ein Beispiel, wie ein typisches Modul als IHostedService
implementiert werden könnte:
public class VideoProcessingService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
// Initialisierungslogik für das Videoverarbeitungsmodul
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
// Bereinigungslogik für das Videoverarbeitungsmodul
return Task.CompletedTask;
}
}
Konfiguration
Die Konfiguration der Kurmann.Videoschnitt.Engine ist ein zentraler Aspekt, um die Plattform an verschiedene Anforderungen anzupassen. Die Engine profitiert von einer starken Modularität und Flexibilität in der Konfigurationsgestaltung. Durch die Vereinfachung der Konfigurationsnamen wird die Übersichtlichkeit verbessert, indem nur der Projektnamen als Präfix verwendet wird.
Konfigurationsmanagement
Das Management der Konfiguration erfolgt durch den Einsatz von Umgebungsvariablen, wodurch sich die Einstellungen je nach Deployment-Umgebung einfach anpassen lassen. Durch die Konzentration auf einfache und direkte Namenskonventionen, die auf dem Projektnamen basieren, kann die Plattform effektiv auf spezifische Bedürfnisse zugeschnitten werden, ohne unnötige Komplexität.
Vereinfachte Konfigurationsnamen
Jedes Modul der Videobearbeitungsplattform verwendet nun einen dedizierten, einfachen Namen, der direkt auf den Zweck des Moduls verweist. Dies erleichtert das Verständnis und die Verwaltung der Konfigurationsparameter.
Beispiel für vereinfachte Umgebungsvariablen:
Für das Modul MediaFileWatcher
könnten die Einstellungen wie folgt definiert sein:
MediaFileWatcher_WatchDirectories__0=/pfad/zu/verzeichnis1
MediaFileWatcher_WatchDirectories__1=/pfad/zu/verzeichnis2
Für das Modul VideoFileProcessor
könnten ähnliche Einstellungen wie folgt aussehen:
VideoFileProcessor_DefaultCodec=HEVC
VideoFileProcessor_Resolution=4K
Integration in die Engine
Zur Laufzeit werden diese Konfigurationen durch das .NET Core DI-System injiziert und in die entsprechenden Modulkomponenten geladen. Dies erfolgt über das IServiceCollection
-Framework, welches eine starke Typisierung und eine einfache Verwaltung der Konfigurationsdaten ermöglicht.
services.Configure<MediaFileWatcherSettings>(Configuration.GetSection("MediaFileWatcher"));
services.Configure<VideoFileProcessorSettings>(Configuration.GetSection("VideoFileProcessor"));
Best Practices für die Konfiguration
- Klare Vertragsdefinition: Jeder Konfigurationsbereich sollte durch eine klare und gut definierte Schnittstelle repräsentiert werden, um die Integration und das Management der Konfigurationsdaten zu vereinfachen.
- Einsatz von Umgebungsvariablen für übergreifende Einstellungen: Umgebungsvariablen bieten Flexibilität und Sicherheit und sollten daher für generelle oder sicherheitssensible Konfigurationen verwendet werden.
- Konsistente und einfache Namenskonventionen: Die Namen der Konfigurationsbereiche sollten sorgfältig gewählt werden, um Klarheit und Konsistenz zu gewährleisten. Die Verwendung des Modulnamens als Präfix hilft dabei, die Konfiguration übersichtlich und direkt verständlich zu gestalten.
Handling von Arrays in Umgebungsvariablen
Die Handhabung von Arrays in Umgebungsvariablen erfordert weiterhin die Verwendung des doppelten Unterstrichs (__
) für die Indizierung, um eine klare Struktur und eine korrekte Interpretation der Daten zu gewährleisten. Hier ein Beispiel, wie dies in der Praxis umgesetzt wird:
MediaFileWatcher_WatchDirectories__0=/pfad/zu/verzeichnis1
MediaFileWatcher_WatchDirectories__1=/pfad/zu/verzeichnis2
Die Neugestaltung der Konfigurationsstrategie der Kurmann.Videoschnitt.Engine trägt zur effizienten Skalierung und Anpassung an sich ändernde Anforderungen bei und gewährleistet gleichzeitig eine robuste und fehlerresistente Plattform für die Videobearbeitung.
Mitwirken
- Issue einreichen: Wenn Sie einen Fehler finden oder eine Funktion anfordern möchten, eröffnen Sie ein Issue im GitHub-Repository.
- Pull Requests: Wenn Sie eine direkte Änderung oder Ergänzung vorschlagen möchten, senden Sie einen Pull Request mit einer klaren Beschreibung Ihrer Änderungen.
Lizenz
Dieses Projekt ist unter der Apache-2.0-Lizenz lizenziert. Weitere Details finden Sie in der Datei LICENSE im GitHub-Repository. Diese Lizenz ermöglicht es sowohl kommerziellen als auch nicht-kommerziellen Nutzern, die Software frei zu verwenden, zu modifizieren und weiterzuverbreiten, unter der Bedingung, dass Änderungen und Erweiterungen unter der gleichen Lizenz bleiben.
Kontakt
Falls Sie Fragen haben oder Unterstützung benötigen, zögern Sie nicht, ein Issue im GitHub-Repository zu eröffnen oder uns direkt zu kontaktieren. Unsere Kontaktinformationen finden Sie auf der GitHub-Projektseite.
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 |