Zpracování videa v reálném čase a AI titulky v .NET MAUI pomocí SkiaCamera
SkiaCamera umožňuje zachytávat fotografie a video z kamery na mobilních zařízeních, aplikovat efekty, překryvy a AI titulky v reálném čase. Každý snímek prochází přes Skia plátno před kódováním, což zajišťuje integraci zpracovaných dat do výsledného MP4 bez dodatečného zpracování. Pro začátek nainstalujte balíček DrawnUi.Maui.Camera a inicializujte DrawnUI v MauiProgram.cs pomocí builder.UseDrawnUi().
Umístěte komponentu uvnitř draw:Canvas s RenderingMode="Accelerated":
<Grid VerticalOptions="Fill" HorizontalOptions="Fill">
<draw:Canvas RenderingMode="Accelerated" Gestures="Lock">
<camera:SkiaCamera x:Name="Camera" CaptureMode="Video" />
</draw:Canvas>
</Grid>
Zafixujte kontejner na Fill, abyste předešli artefaktům. Pro správnou orientaci videa zablokujte aplikaci v portrétním režimu: na Androidu pomocí ScreenOrientation.SensorPortrait v MainActivity.cs, na iOS – nastavením UISupportedInterfaceOrientations v Info.plist.
Zadejte oprávnění:
Camera.NeedPermissionsSet = NeedPermissions.Camera | NeedPermissions.Gallery | NeedPermissions.Microphone;
Zapněte kameru po prvním vykreslení plátna nebo podle navigačních událostí.
Řízení kamery a zpracování snímků
Vlastnost IsOn řídí spuštění/zastavení. Při přechodu do pozadí se kamera automaticky pozastaví. Náhled se vykresluje přes SkiaImage ve vlastnosti Display, dostupné pro rozostření nebo efekty.
Povolte zpracování v reálném čase:
UseRealtimeVideoProcessing = true;
ProcessFrame = OnFrameProcessing;
ProcessPreview = OnFrameProcessing;
Zpracovatelé přijímají DrawableFrame s SKCanvas, SKImage, Scale a příznakem IsPreview. Při nahrávání náhled zobrazuje zpracovaný snímek zmenšené velikosti – princip WYSIWYG.
Příklad vlastního kontroleru AppCamera:
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;
}
}
Nahrávání videa s předzáznamem
Spuštění nahrávání:
if (CameraControl.IsRecording)
await CameraControl.StopVideoRecording();
else
await CameraControl.StartVideoRecording();
Přenos do galerie po dokončení:
private async void OnVideoRecordingSuccess(object sender, CapturedVideo capturedVideo)
{
var publicPath = await CameraControl.MoveVideoToGalleryAsync(capturedVideo, MauiProgram.Album);
}
Předzáznam využívá kruhový buffer v paměti pro zachycení 3–10 sekund před stisknutím REC:
CameraControl.EnablePreRecording = true;
CameraControl.PreRecordDuration = TimeSpan.FromSeconds(5);
Vlastnosti IsPreRecording a IsRecording jsou bindable pro UI. Zrušení vymaže buffer: StopVideoRecording(true).
Užitečné pro scénáře s nepředvídatelným začátkem: sport, wildlife, bezpečnostní kamery s detekcí pohybu.
SKSL shadery pro video efekty
Aplikujte filtry na náhled, fotografie a video přes SKSL shadery. Přepište RenderPreviewForProcessing a RenderFrameForRecording:
CameraControl.VideoEffect = ShaderEffect.Movie;
Shadery se vykreslují na SKPaint před kódováním, efekt je fixován v MP4. UI příklad obsahuje přepínač filtrů: Noir, Movie a další.
AI titulky a audio vizualizace
Generování titulků na bázi OpenAI se integruje v reálném čase a vkládá do videa. Audio vizualizér (EQ) se překrývá jako overlay, reaguje na otočení zařízení přes RotationChanged.
Sekce nastavení:
- Input: výběr kamery, formát, režim.
- Processing: audio monitoring, titulky, shadery.
- Output: audio/video, předzáznam, kvalita.
UI otáčí ikony tlačítek nezávisle na fixaci obrazovky.
Co je důležité
- SkiaCamera zpracovává snímky na GPU přes Skia plátno, zajišťuje efekty v reálném čase ve výsledném videu.
- Předzáznam s kruhovým bufferem zachytává události před spouštěčem bez trvalého ukládání na disk.
- SKSL shadery se aplikují na náhled a nahrávání bez dodatečného zpracování; callbacky
ProcessFrame/Previewrozlišují režimy. - AI titulky od OpenAI a EQ overlaye se vkládají do MP4; UI se přizpůsobuje orientaci.
- Automatická pauza v pozadí, bindable vlastnosti pro nahrávání/předzáznam.
— Editorial Team
Zatím žádné komentáře.