Volver al inicio

SkiaCamera: efectos de video y subtítulos en .NET MAUI

El artículo describe la integración de SkiaCamera en .NET MAUI para procesamiento de video en tiempo real: subtítulos de IA, shaders SKSL, pregrabación y superposiciones. Desglose de la instalación, callbacks ProcessFrame/Preview y configuraciones de UI. Ejemplo de código para foto/video con aceleración GPU.

Subtítulos de IA y shaders para video en SkiaCamera de .NET MAUI
Advertisement 728x90

Procesamiento de Video en Tiempo Real y Subtítulos IA en .NET MAUI con SkiaCamera

SkiaCamera te permite capturar fotos y videos desde las cámaras de dispositivos móviles mientras aplicas efectos, superposiciones y subtítulos generados por IA en tiempo real. Cada fotograma pasa por un lienzo de Skia antes de codificarse, integrando los datos procesados de forma fluida en el MP4 final sin necesidad de posproducción. Para empezar, instala el paquete NuGet DrawnUi.Maui.Camera e inicializa DrawnUI en MauiProgram.cs con builder.UseDrawnUi().

Coloca el componente dentro de un draw:Canvas con RenderingMode="Accelerated":

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

Fija el contenedor en Fill para evitar artefactos de renderizado. Para una orientación correcta del video, bloquea la app en modo retrato: en Android mediante ScreenOrientation.SensorPortrait en MainActivity.cs, y en iOS a través de UISupportedInterfaceOrientations en Info.plist.

Google AdInline article slot

Configura los permisos necesarios:

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

Inicia la cámara tras el primer renderizado del lienzo o en eventos de navegación.

Control de Cámara y Procesamiento de Fotogramas

La propiedad IsOn gestiona inicio/parada. La cámara se pausa automáticamente al enviar la app al fondo. La previsualización se renderiza mediante SkiaImage en la propiedad Display, ideal para agregar desenfoque u otros efectos.

Google AdInline article slot

Activa el procesamiento en tiempo real:

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

Los manejadores reciben un DrawableFrame con SKCanvas, SKImage, Scale y un indicador IsPreview. Durante la grabación, la previsualización muestra una versión reducida del fotograma procesado: lo que ves es lo que obtienes (WYSIWYG).

Aquí un ejemplo de controlador personalizado 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;
    }
}

Grabación de Video con Pregrabación

Inicia la grabación:

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

Mueve el video a la galería al finalizar:

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

La pregrabación usa un búfer circular en memoria para capturar 3–10 segundos antes de pulsar REC:

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

Las propiedades IsPreRecording e IsRecording son vinculables para actualizar la UI. Cancelar limpia el búfer: StopVideoRecording(true).

Ideal para acciones impredecibles como deportes, vida silvestre o cámaras de seguridad activadas por movimiento.

Shaders SKSL para Efectos de Video

Aplica filtros a previsualizaciones, fotos y videos con shaders SKSL. Sobrescribe RenderPreviewForProcessing y RenderFrameForRecording:

CameraControl.VideoEffect = ShaderEffect.Movie;

Los shaders se renderizan en SKPaint antes de codificar, integrando el efecto en el MP4. La demo de UI incluye un selector de filtros: Noir, Movie y más.

Subtítulos IA y Visualización de Audio

La generación de subtítulos impulsada por OpenAI se integra en tiempo real y se incrusta directamente en los videos. Un visualizador de audio (EQ) se superpone como elemento responsivo, reaccionando a la rotación del dispositivo mediante RotationChanged.

Secciones de configuración:

  • Entrada: selección de cámara, formato, modo.
  • Procesamiento: monitoreo de audio, subtítulos, shaders.
  • Salida: audio/video, pregrabación, calidad.

La UI rota los iconos de botones independientemente del bloqueo de pantalla.

Puntos Clave

  • SkiaCamera procesa fotogramas en GPU mediante lienzo Skia para efectos en tiempo real integrados en el video final.
  • Pregrabación con búfer circular captura eventos antes del disparador sin escrituras constantes al disco.
  • Shaders SKSL se aplican a previsualizaciones y grabaciones sin posprocesado; callbacks ProcessFrame/Preview distinguen modos.
  • Subtítulos IA de OpenAI y superposiciones EQ se incrustan en MP4; UI se adapta a la orientación.
  • Pausa automática en segundo plano, propiedades vinculables para grabación/pregrabación.

— Editorial Team

Advertisement 728x90

Leer después