Zurück zur Startseite

SkiaCamera: Videoeffekte und Untertitel in .NET MAUI

Der Artikel beschreibt die Integration von SkiaCamera in .NET MAUI für Echtzeit-Videoverarbeitung: KI-Untertitel, SKSL-Shaders, Voraufzeichnung und Overlays. Aufschlüsselung der Installation, ProcessFrame/Preview-Callbacks und UI-Einstellungen. Code-Beispiel für Foto/Video mit GPU-Beschleunigung.

KI-Untertitel und Shaders für Video in .NET MAUI SkiaCamera
Advertisement 728x90

Echtzeit-Videoverarbeitung und KI-Untertitel in .NET MAUI mit SkiaCamera

SkiaCamera ermöglicht das Aufnehmen von Fotos und Videos direkt von den Mobilgerätekameras, während Effekte, Overlays und KI-generierte Untertitel in Echtzeit angewendet werden. Jeder Frame läuft über eine Skia-Canvas, bevor er encodiert wird, und integriert die bearbeiteten Daten nahtlos in die finale MP4-Datei – ganz ohne Nachbearbeitung. Zum Einstieg installieren Sie das NuGet-Paket DrawnUi.Maui.Camera und initialisieren DrawnUI in MauiProgram.cs mit builder.UseDrawnUi().

Platziert die Komponente in einem draw:Canvas mit RenderingMode="Accelerated":

<Grid VerticalOptions="Fill" HorizontalOptions="Fill">
    <draw:Canvas RenderingMode="Accelerated" Gestures="Lock">
        <camera:SkiaCamera x:Name="Camera" CaptureMode="Video" />
    </draw:Canvas>
</Grid>

Fixieren Sie den Container auf Fill, um Rendering-Artefakte zu vermeiden. Für korrekte Videoausrichtung sperren Sie die App im Hochformat: Auf Android über ScreenOrientation.SensorPortrait in MainActivity.cs, auf iOS via UISupportedInterfaceOrientations in Info.plist.

Google AdInline article slot

Legen Sie die erforderlichen Berechtigungen fest:

Camera.NeedPermissionsSet = NeedPermissions.Camera | NeedPermissions.Gallery | NeedPermissions.Microphone;

Starten Sie die Kamera nach dem ersten Rendering der Canvas oder bei Navigationsereignissen.

Kamera-Steuerung und Frame-Verarbeitung

Die Eigenschaft IsOn regelt Start/Stopp. Die Kamera pausiert automatisch, wenn die App in den Hintergrund wechselt. Die Vorschau wird über SkiaImage in der Display-Eigenschaft gerendert – ideal für Blur-Effekte oder Ähnliches.

Google AdInline article slot

Aktivieren Sie Echtzeit-Verarbeitung:

UseRealtimeVideoProcessing = true;
ProcessFrame = OnFrameProcessing;
ProcessPreview = OnFrameProcessing;

Die Handler erhalten ein DrawableFrame mit SKCanvas, SKImage, Scale und einem IsPreview-Flag. Während der Aufnahme zeigt die Vorschau eine skalierte Version des bearbeiteten Frames – was du siehst, ist was du bekommst (WYSIWYG).

Hier ein Beispiel für einen benutzerdefinierten Controller AppCamera:

Google AdInline article slot
public partial class AppCamera : SkiaCamera
{
    public AppCamera()
    {
        NeedPermissionsSet = NeedPermissions.Camera | NeedPermissions.Gallery | NeedPermissions.Microphone;
        InjectGpsLocation = true;
        UseRealtimeVideoProcessing = true;
        VideoQuality = VideoQuality.Standard;
        EnableAudioRecording = true;
        ProcessFrame = OnFrameProcessing;
        ProcessPreview = OnFrameProcessing;
    }
}

Videoaufnahme mit Voraufzeichnung

Starten Sie die Aufnahme:

if (CameraControl.IsRecording)
    await CameraControl.StopVideoRecording();
else
    await CameraControl.StartVideoRecording();

Verschieben Sie das Video nach Abschluss in die Galerie:

private async void OnVideoRecordingSuccess(object sender, CapturedVideo capturedVideo)
{
    var publicPath = await CameraControl.MoveVideoToGalleryAsync(capturedVideo, MauiProgram.Album);
}

Die Voraufzeichnung nutzt einen In-Memory-Ringpuffer, um 3–10 Sekunden vor dem REC-Druck einzufangen:

CameraControl.EnablePreRecording = true;
CameraControl.PreRecordDuration = TimeSpan.FromSeconds(5);

Die Eigenschaften IsPreRecording und IsRecording sind bindbar für UI-Updates. Beim Abbrechen wird der Puffer geleert: StopVideoRecording(true).

Perfekt für unvorhersehbare Action wie Sport, Wildtiere oder bewegungsgesteuerte Sicherheitskameras.

SKSL-Shader für Videoeffekte

Wenden Sie Filter auf Vorschauen, Fotos und Videos mit SKSL-Shaders an. Überschreiben Sie RenderPreviewForProcessing und RenderFrameForRecording:

CameraControl.VideoEffect = ShaderEffect.Movie;

Shaders werden auf SKPaint vor der Kodierung gerendert und backen den Effekt direkt in die MP4 ein. Die UI-Demo enthält einen Filter-Wechsler: Noir, Movie und mehr.

KI-Untertitel und Audio-Visualisierung

OpenAI-gestützte Untertitel-Generierung integriert sich in Echtzeit und wird direkt in Videos eingebettet. Ein Audio-Visualisierer (EQ) überlagert als responsives Element und reagiert auf Gerätedrehung via RotationChanged.

Einstellungsbereiche:

  • Eingabe: Kamerawahl, Format, Modus.
  • Verarbeitung: Audio-Überwachung, Untertitel, Shader.
  • Ausgabe: Audio/Video, Voraufzeichnung, Qualität.

Die UI dreht Button-Icons unabhängig vom Bildschirmsperre.

Wichtige Erkenntnisse

  • SkiaCamera verarbeitet Frames auf der GPU via Skia-Canvas für Echtzeit-Effekte, die direkt in das finale Video gebacken werden.
  • Voraufzeichnung mit Ringpuffer fängt Ereignisse vor dem Auslöser ein, ohne ständiges Schreiben auf die Festplatte.
  • SKSL-Shader gelten für Vorschauen und Aufnahmen ohne Nachbearbeitung; ProcessFrame/Preview-Callbacks unterscheiden Modi.
  • OpenAI-KI-Untertitel und EQ-Overlays werden in MP4 eingebettet; UI passt sich der Ausrichtung an.
  • Automatisches Pausieren im Hintergrund, bindbare Eigenschaften für Aufnahme/Voraufzeichnung.

— Editorial Team

Advertisement 728x90

Weiterlesen