Bloques de Plataforma Apple - VisioForge Media Blocks SDK .Net¶
Los bloques de plataforma Apple proporcionan funcionalidad específica para dispositivos iOS y macOS. Estos bloques aprovechan los frameworks nativos de Apple como AVFoundation y VideoToolbox para proporcionar captura y procesamiento de medios optimizados.
Bloques de Fuente iOS¶
Bloque de Fuente de Video iOS¶
El IOSVideoSourceBlock proporciona captura de video desde la cámara del dispositivo en plataformas iOS.
Información del bloque¶
Nombre: IOSVideoSourceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Salida video | Video sin comprimir | 1 |
Configuración¶
IOSVideoSourceBlock se configura usando VideoCaptureDeviceSourceSettings que hereda de configuraciones genéricas de captura de video.
Propiedades clave:
- Device (VideoCaptureDeviceInfo): El dispositivo de cámara a usar.
- Format (VideoCaptureDeviceFormat): El formato de video seleccionado incluyendo resolución y tasa de fotogramas.
Enumerar dispositivos disponibles¶
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
foreach (var device in devices)
{
Console.WriteLine($"Dispositivo: {device.Name}");
foreach (var format in device.VideoFormats)
{
Console.WriteLine($" Formato: {format.Width}x{format.Height}");
}
}
Código de ejemplo¶
// crear pipeline
var pipeline = new MediaBlocksPipeline();
// seleccionar el primer dispositivo de video disponible
var device = (await DeviceEnumerator.Shared.VideoSourcesAsync())[0];
VideoCaptureDeviceSourceSettings videoSourceSettings = null;
if (device != null)
{
var formatItem = device.VideoFormats[0];
if (formatItem != null)
{
videoSourceSettings = new VideoCaptureDeviceSourceSettings(device)
{
Format = formatItem.ToFormat()
};
videoSourceSettings.Format.FrameRate = formatItem.FrameRateList[0];
}
}
// crear bloque de fuente de video iOS
var videoSource = new IOSVideoSourceBlock(videoSourceSettings);
// crear bloque de renderizado de video
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
// conectar bloques
pipeline.Connect(videoSource.Output, videoRenderer.Input);
// iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
iOS (no disponible en macOS Catalyst)
Bloque de Fuente de Pantalla iOS¶
El IOSScreenSourceBlock permite capturar la pantalla del dispositivo iOS. Esto es útil para aplicaciones de grabación de pantalla.
Información del bloque¶
Nombre: IOSScreenSourceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Salida video | Video sin comprimir | 1 |
Configuración¶
IOSScreenSourceBlock se configura usando IOSScreenSourceSettings.
Propiedades clave:
- FrameRate (VideoFrameRate): La tasa de fotogramas de captura deseada.
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Configurar fuente de pantalla iOS
var screenSettings = new IOSScreenSourceSettings
{
FrameRate = new VideoFrameRate(30)
};
var screenSource = new IOSScreenSourceBlock(screenSettings);
// Codificador H264
var h264Encoder = new H264EncoderBlock(new OpenH264EncoderSettings());
pipeline.Connect(screenSource.Output, h264Encoder.Input);
// Sink MP4
var mp4Sink = new MP4SinkBlock(new MP4SinkSettings("screen_recording.mp4"));
pipeline.Connect(h264Encoder.Output, mp4Sink.CreateNewInput(MediaBlockPadMediaType.Video));
await pipeline.StartAsync();
Plataformas¶
iOS
Bloques de Fuente macOS¶
Bloque de Fuente de Audio macOS¶
El OSXAudioSourceBlock proporciona captura de audio desde dispositivos de entrada en plataformas macOS.
Información del bloque¶
Nombre: OSXAudioSourceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Salida audio | Audio sin comprimir | 1 |
Configuración¶
OSXAudioSourceBlock se configura usando OSXAudioSourceSettings.
Propiedades clave:
- DeviceID (int): ID del dispositivo de audio.
- Format (AudioCaptureDeviceFormat): Formato de audio (tasa de muestreo, canales, etc.).
Enumerar dispositivos disponibles¶
var devices = await DeviceEnumerator.Shared.AudioSourcesAsync();
foreach (var device in devices)
{
Console.WriteLine($"Dispositivo de Audio: {device.Name}, ID: {device.DeviceID}");
foreach (var format in device.Formats)
{
Console.WriteLine($" Formato: {format.SampleRate}Hz, {format.Channels} canales");
}
}
Código de ejemplo¶
// crear pipeline
var pipeline = new MediaBlocksPipeline();
// seleccionar el primer dispositivo de audio disponible
var devices = await DeviceEnumerator.Shared.AudioSourcesAsync();
var device = devices.Length > 0 ? devices[0] : null;
OSXAudioSourceSettings audioSourceSettings = null;
if (device != null)
{
var formatItem = device.Formats[0];
if (formatItem != null)
{
audioSourceSettings = new OSXAudioSourceSettings(device.DeviceID, formatItem);
}
}
// crear bloque de fuente de audio macOS
var audioSource = new OSXAudioSourceBlock(audioSourceSettings);
// crear bloque de renderizado de audio
var audioRenderer = new AudioRendererBlock();
// conectar bloques
pipeline.Connect(audioSource.Output, audioRenderer.Input);
// iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
macOS (no disponible en iOS)
Bloque de Fuente de Video macOS¶
El OSXVideoSourceBlock proporciona captura de video desde cámaras y otros dispositivos de captura de video en plataformas macOS.
Información del bloque¶
Nombre: OSXVideoSourceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Salida video | Video sin comprimir | 1 |
Configuración¶
OSXVideoSourceBlock utiliza las configuraciones estándar de VideoCaptureDeviceSourceSettings.
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Enumerar y seleccionar dispositivo de video
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
var device = devices[0];
var videoSettings = new VideoCaptureDeviceSourceSettings(device)
{
Format = device.VideoFormats[0].ToFormat()
};
videoSettings.Format.FrameRate = device.VideoFormats[0].FrameRateList[0];
var videoSource = new OSXVideoSourceBlock(videoSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(videoSource.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
macOS
Codificadores Específicos de Apple¶
Bloque Codificador Apple ProRes¶
El AppleProResEncoderBlock codifica video usando el códec Apple ProRes, que es ampliamente usado en flujos de trabajo de producción de video profesional.
Información del bloque¶
Nombre: AppleProResEncoderBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video sin comprimir | 1 |
| Salida | ProRes | 1 |
Configuración¶
AppleProResEncoderBlock se configura usando AppleProResEncoderSettings.
Propiedades clave:
- Profile (AppleProResProfile): El perfil ProRes a usar. Opciones incluyen:
- ProRes422Proxy: Menor bitrate, proxy de edición.
- ProRes422LT: Bitrate ligero.
- ProRes422: Estándar.
- ProRes422HQ: Alta calidad.
- ProRes4444: Con canal alfa.
- ProRes4444XQ: Máxima calidad con alfa.
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AppleProResEncoderBlock;
AppleProResEncoderBlock-->MOVSinkBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp4";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Configurar codificador ProRes con perfil de alta calidad
var proResSettings = new AppleProResEncoderSettings
{
Profile = AppleProResProfile.ProRes422HQ
};
var proResEncoder = new AppleProResEncoderBlock(proResSettings);
pipeline.Connect(fileSource.VideoOutput, proResEncoder.Input);
// Guardar a archivo MOV
var movSink = new MOVSinkBlock(new MOVSinkSettings(@"output.mov"));
pipeline.Connect(proResEncoder.Output, movSink.CreateNewInput(MediaBlockPadMediaType.Video));
await pipeline.StartAsync();
Disponibilidad¶
Puede verificar si el codificador Apple ProRes está disponible usando:
Plataformas¶
macOS, iOS.
Decodificadores Específicos de Apple¶
Bloque Decodificador VideoToolbox H.264¶
El decodificador VideoToolbox H.264 utiliza la aceleración por hardware de Apple para decodificación de video de alto rendimiento.
Información del bloque¶
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video codificado H.264 | 1 |
| Salida video | Video sin comprimir | 1 |
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri("video_h264.mp4")));
// El SDK selecciona automáticamente VideoToolbox cuando está disponible en plataformas Apple
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(fileSource.VideoOutput, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
macOS, iOS.
Bloque Decodificador VideoToolbox HEVC¶
El decodificador VideoToolbox HEVC proporciona decodificación acelerada por hardware para contenido H.265/HEVC.
Información del bloque¶
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video codificado H.265/HEVC | 1 |
| Salida video | Video sin comprimir | 1 |
Plataformas¶
macOS, iOS (en dispositivos con soporte de hardware HEVC).
Renderizadores Específicos de Apple¶
Renderizador de Video Metal¶
En plataformas Apple, el SDK puede usar Metal para renderizado de video de alto rendimiento. Esto se configura automáticamente cuando está disponible.
Características¶
- Renderizado acelerado por GPU usando el framework Metal de Apple
- Soporte para HDR y amplia gama de colores
- Escalado y transformación eficientes
- Bajo consumo de batería en dispositivos móviles
Uso¶
El renderizador Metal se selecciona automáticamente cuando usa VideoRendererBlock en plataformas Apple compatibles.
var pipeline = new MediaBlocksPipeline();
var videoSource = new IOSVideoSourceBlock(videoSettings);
// El renderizador usará Metal automáticamente cuando esté disponible
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(videoSource.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
macOS 10.11+, iOS 8+.
Consideraciones para Plataformas Apple¶
Permisos de Cámara y Micrófono¶
En iOS y macOS, debe declarar el uso de cámara y micrófono en el archivo Info.plist:
<key>NSCameraUsageDescription</key>
<string>Esta app necesita acceso a la cámara para captura de video.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Esta app necesita acceso al micrófono para captura de audio.</string>
Grabación de Pantalla en iOS¶
Para captura de pantalla en iOS, debe configurar las capacidades apropiadas de Broadcast Extension en su proyecto Xcode.
Rendimiento en Batería¶
El SDK utiliza automáticamente codificadores/decodificadores de hardware cuando están disponibles para minimizar el consumo de batería en dispositivos móviles Apple.
Formatos Soportados¶
Los dispositivos Apple soportan eficientemente los siguientes formatos: - Video: H.264, HEVC (H.265), ProRes - Audio: AAC, ALAC, MP3 - Contenedores: MOV, MP4, M4A