MediaCapture Clase

Definición

Proporciona funcionalidad para capturar fotos, audio y vídeos desde un dispositivo de captura, como una cámara web.

public ref class MediaCapture sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
class MediaCapture final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class MediaCapture final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
public sealed class MediaCapture : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class MediaCapture : System.IDisposable
function MediaCapture()
Public NotInheritable Class MediaCapture
Implements IDisposable
Herencia
Object Platform::Object IInspectable MediaCapture
Atributos
Implementaciones

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
Características de aplicaciones
backgroundMediaRecording microphone webcam

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear e inicializar un objeto MediaCapture .

// Create and initialze the MediaCapture object.
public async void InitMediaCapture()
{
    _mediaCapture = null;
    _mediaCapture = new Windows.Media.Capture.MediaCapture();

    // Set the MediaCapture to a variable in App.xaml.cs to handle suspension.
    (App.Current as App).MediaCapture = _mediaCapture;

    await _mediaCapture.InitializeAsync(_captureInitSettings);

    CreateProfile();
}

Para obtener información sobre cómo controlar la suspensión, consulta Controlar la suspensión de la aplicación.

<StackPanel Orientation="Horizontal">
    <CaptureElement x:Name="capturePreview" Width="320" Height="240" />
    <Image x:Name="imagePreview" Stretch="None" Width="320" Height="240" />
</StackPanel>

<StackPanel Orientation="Horizontal">
    <Button Click="InitCamera_Click" Content="Initialize Camera" />
    <Button Click="StartCapturePreview_Click" Content="Start Capture Preview" />
    <Button Click="CapturePhoto_Click" Content="Capture Photo"/>
    <Button Click="StopCapturePreview_Click" Content="Stop Capture Preview" />
</StackPanel>
Windows.Media.Capture.MediaCapture captureManager;

async private void InitCamera_Click(object sender, RoutedEventArgs e)
{
    captureManager = new MediaCapture();
    await captureManager.InitializeAsync();
}

async private void StartCapturePreview_Click(object sender, RoutedEventArgs e)
{
    capturePreview.Source = captureManager;
    await captureManager.StartPreviewAsync();
}

async private void StopCapturePreview_Click(object sender, RoutedEventArgs e)
{
    await captureManager.StopPreviewAsync();
}

async private void CapturePhoto_Click(object sender, RoutedEventArgs e)
{
    ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();

    // create storage file in local app storage
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        "TestPhoto.jpg",
        CreationCollisionOption.GenerateUniqueName);

    // take photo
    await captureManager.CapturePhotoToStorageFileAsync(imgFormat, file);

    // Get photo as a BitmapImage
    BitmapImage bmpImage = new BitmapImage(new Uri(file.Path));

    // imagePreview is a <Image> object defined in XAML
    imagePreview.Source = bmpImage;
}

Comentarios

La clase MediaCapture se usa para capturar audio, vídeo e imágenes de una cámara. Para obtener instrucciones paso a paso para mostrar la vista previa de la cámara, consulte Visualización de la vista previa de la cámara. Para empezar rápidamente a capturar fotos, audio o vídeo, consulte Captura básica de fotos, vídeos y audio con MediaCapture.

La página Cámara es el centro principal para obtener instrucciones paso a paso para usar MediaCapture en la aplicación. Además de las tareas básicas de cámara, en esta página se incluyen vínculos a artículos de procedimientos para escenarios avanzados, entre los que se incluyen:

  • Uso del botón de cámara de hardware en los dispositivos que tienen una
  • Control de la orientación del dispositivo y la pantalla
  • Uso de perfiles de cámara para determinar las funcionalidades del dispositivo
  • Establecimiento del formato, la resolución y la velocidad de fotogramas del vídeo capturado
  • Uso de AdvancedPhotoCapture para capturar fotos HDR o de poca luz
  • Uso de VideoDeviceController para acceder a controles manuales de cámara, como la exposición, el balance de blancos, el enfoque automático y el flash
  • Uso de efectos al capturar vídeo
  • Captura de secuencias de fotos
  • Uso de MediaFrameReader para obtener una secuencia de fotogramas de una o varias cámaras, incluidas las cámaras rgb, infrarrojos y de profundidad
  • Obtención de un fotograma de la secuencia de vista previa

En el artículo Cámara también se incluyen vínculos a todos los ejemplos del SDK para UWP para la cámara, como el ejemplo del kit de inicio de cámara.

Se debe llamar al método InitializeAsync , que inicializa el objeto MediaCapture , para poder empezar a obtener una vista previa o capturar desde el dispositivo. En las aplicaciones de C# o C++, el primer uso del objeto MediaCapture para llamar a InitializeAsync debe estar en el subproceso STA. Las llamadas desde un subproceso de MTA pueden dar lugar a un comportamiento indefinido. InitializeAsync iniciará una petición de consentimiento para obtener el permiso del usuario para que la aplicación acceda al micrófono o la cámara. Se debe llamar a InitializeAsync desde el subproceso principal de la interfaz de usuario de la aplicación. Las aplicaciones deben controlar la suspensión o la finalización de la aplicación limpiando correctamente los recursos de captura de medios. Para obtener información sobre cómo apagar correctamente el objeto MediaCapture , consulte Captura básica de fotos, vídeos y audio con MediaCapture.

En Windows, las aplicaciones de captura de música y multimedia deben supervisar SystemMediaTransportControls.SoundLevel para determinar si las secuencias de audio de la aplicación se han silenciado. En el caso de las aplicaciones que usan el objeto MediaCapture, la captura se detendrá automáticamente cuando se silencian las secuencias de captura de la aplicación. La captura no se vuelve a iniciar automáticamente cuando se desmutan las secuencias de audio, por lo que se puede usar la notificación de cambio SoundLevel para reiniciar la captura. Use el evento SystemMediaTransportControls.PropertyChanged para determinar cuándo cambia la propiedad SoundLevel .

Para Windows Phone aplicaciones 8.x, las aplicaciones de música y multimedia deben limpiar el objeto MediaCapture y los recursos asociados en el controlador de eventos Suspending y volver a crearlos en el controlador de eventos Resuming.

En Windows 8.1 solo aplicaciones de audio, si la configuración MediaCategory es Other, se usa el modo de latencia alta. Para una latencia baja, establezca la opción MediaCategory en Comunicaciones.

Agregar un efecto de edición local de Media Foundation Transform a la vista previa de captura no tendrá ningún efecto en la secuencia.

Windows 8 aplicaciones para UWP que han declarado las funcionalidades de cámara web y micrófono no funcionarán en Windows 8.1 si el usuario no ha habilitado la configuración de privacidad de la cámara web y del micrófono.

MediaCapture solo admite una codificación CBR de paso.

Notas sobre JPEG: Los tipos JPEG son solo de paso a través. Para capturar una imagen, el perfil de codificación de imágenes se puede establecer en Auto o debe especificar un perfil de codificación que coincida con el tipo nativo. Para agregar un efecto, debe cambiar a un tipo de medio nativo de vídeo sin comprimir, como NV12 o RGB32.

Notas sobre H.264: Si el tipo nativo es H.264, puede grabar mediante un tipo de medio de vídeo con el tipo idéntico al tipo nativo. No se puede agregar un efecto a una secuencia de tipo nativo H.264. Para capturar vídeo, el perfil de codificación de imágenes se puede establecer en Auto o debe especificar un perfil de codificación que coincida con el tipo nativo.

Nota

Esta clase no es ágil, lo que significa que debe tener en cuenta su modelo de subprocesos y el comportamiento de serialización. Para obtener más información, vea Subprocesos y serialización (C++/CX) y Uso de objetos Windows Runtime en un entorno multiproceso (.NET).

Historial de versiones

Versión de Windows Versión del SDK Valor agregado
1607 14393 CreateFrameReaderAsync(MediaFrameSource)
1607 14393 CreateFrameReaderAsync(MediaFrameSource,String)
1607 14393 CreateFrameReaderAsync(MediaFrameSource,String,BitmapSize)
1607 14393 FrameSources
1607 14393 PauseRecordWithResultAsync
1607 14393 RemoveEffectAsync
1607 14393 StopRecordWithResultAsync
1703 15063 CaptureDeviceExclusiveControlStatusChanged
1703 15063 CreateMultiSourceFrameReaderAsync
2004 19041 CreateRelativePanelWatcher

Constructores

MediaCapture()

Crea una nueva instancia del objeto MediaCapture .

Propiedades

AudioDeviceController

Obtiene un objeto que controla la configuración del micrófono.

CameraStreamState

Obtiene el estado actual de la secuencia de la cámara.

FrameSources

Obtiene un diccionario de solo lectura de objetos MediaFrameSource que se pueden usar simultáneamente para adquirir fotogramas multimedia.

MediaCaptureSettings

Obtiene los valores de configuración del objeto MediaCapture .

ThermalStatus

Obtiene un valor que indica el estado térmico actual del dispositivo de captura.

VideoDeviceController

Obtiene un objeto que controla la configuración de la cámara de vídeo.

Métodos

AddAudioEffectAsync(IAudioEffectDefinition)

Agrega un efecto de audio a la canalización de captura.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Agrega un efecto de audio o vídeo.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Agrega un efecto de vídeo a la canalización de captura.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Captura una foto en un archivo de almacenamiento.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Captura una foto en una secuencia de acceso aleatorio.

ClearEffectsAsync(MediaStreamType)

Quita todos los efectos de audio y vídeo de una secuencia.

Close()

Cierra el objeto de captura multimedia.

CreateFrameReaderAsync(MediaFrameSource)

Crea un objeto MediaFrameReader que se usa para adquirir fotogramas de un objeto MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String)

Crea un objeto MediaFrameReader que se usa para adquirir fotogramas con el subtipo de codificación multimedia especificado de un objeto MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Crea un objeto MediaFrameReader que se usa para adquirir fotogramas con el subtipo de codificación multimedia y el tamaño especificados de un objeto MediaFrameSource.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Crea un objeto MultiSourceMediaFrameReader que se usa para adquirir fotogramas correlacionados con tiempo a partir de uno o varios objetos MediaFrameSource .

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Crea una nueva instancia de la clase MediaCaptureRelativePanelWatcher , que supervisa el panel asociado al DisplayRegion proporcionado, de modo que la aplicación reciba notificaciones cuando cambie la ubicación relativa del panel.

Dispose()

Realiza tareas definidas por la aplicación asociadas a la liberación o al restablecimiento de recursos no administrados.

FindAllVideoProfiles(String)

Recupera la lista de todos los perfiles de vídeo admitidos por el dispositivo de captura de vídeo especificado.

FindConcurrentProfiles(String)

Recupera la lista de perfiles de vídeo admitidos por el dispositivo de captura de vídeo especificado que se puede usar mientras se usa otro perfil en un dispositivo de captura diferente.

FindKnownVideoProfiles(String, KnownVideoProfile)

Recupera la lista de todos los perfiles de vídeo admitidos por el dispositivo de captura de vídeo especificado que coincida con el valor knownVideoProfile especificado.

GetEncoderProperty(MediaStreamType, Guid)

Obtiene el valor de una propiedad de codificación.

GetPreviewFrameAsync()

Obtiene un marco de vista previa del dispositivo de captura.

GetPreviewFrameAsync(VideoFrame)

Obtiene un marco de vista previa del dispositivo de captura, copiado en el videoframe de destino proporcionado y convertido en el formato del marco de destino.

GetPreviewMirroring()

Consulta si la secuencia de vídeo se refleja horizontalmente.

GetPreviewRotation()

Obtiene la rotación de la secuencia de vista previa de vídeo.

GetRecordRotation()

Obtiene la rotación del vídeo grabado.

InitializeAsync()

Inicializa el objeto MediaCapture con la configuración predeterminada.

InitializeAsync(MediaCaptureInitializationSettings)

Inicializa el objeto MediaCapture .

IsVideoProfileSupported(String)

Obtiene un valor booleano que indica si el dispositivo de captura de vídeo especificado admite perfiles de vídeo.

PauseRecordAsync(MediaCapturePauseBehavior)

Pausa una operación de registro en curso.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Pausa una operación de grabación multimedia en curso y proporciona un objeto MediaCapturePauseResult que se puede usar para ayudar al usuario a alinear la cámara con el último fotograma capturado al reanudar la grabación.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Inicializa la captura de fotos avanzada y proporciona el objeto AdvancedPhotoCapture usado para administrar la grabación.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Inicializa la captura de fotos de retardo de obturación baja y proporciona el objeto LowLagPhotoCapture usado para administrar la grabación.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Inicializa la captura de la secuencia de fotos de retardo de obturación baja y proporciona el objeto LowLagPhotoSequenceCapture utilizado para administrar la grabación.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Inicializa la grabación de retraso bajo con el receptor personalizado especificado para almacenar la grabación. Este método proporciona el objeto LowLagMediaRecording usado para administrar la captura.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Inicializa la grabación de retraso bajo con el receptor personalizado especificado para almacenar la grabación. Este método proporciona el objeto LowLagMediaRecording usado para administrar la grabación.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Inicializa la grabación de retraso bajo con el archivo especificado para almacenar la grabación. Este método proporciona el objeto LowLagMediaRecording usado para administrar la grabación.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Inicializa la grabación de retraso bajo mediante el flujo de acceso aleatorio especificado para almacenar la grabación. Este método proporciona el objeto LowLagMediaRecording usado para administrar la grabación.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Inicializa la captura de secuencia de fotos variable y proporciona el objeto VariablePhotoSequenceCapture usado para administrar la grabación.

RemoveEffectAsync(IMediaExtension)

Quita el efecto especificado de la canalización de captura.

ResumeRecordAsync()

Reanuda una operación de grabación en pausa.

SetEncoderProperty(MediaStreamType, Guid, Object)

Establece una propiedad de codificación.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Establece de forma asincrónica las propiedades de codificación multimedia.

SetPreviewMirroring(Boolean)

Habilita o deshabilita la creación de reflejo horizontal de la secuencia de vista previa de vídeo. Este no es el método preferido para la creación de reflejo. Consulte la sección Comentarios a continuación para obtener más información.

SetPreviewRotation(VideoRotation)

Gira la secuencia de vista previa de vídeo.

SetRecordRotation(VideoRotation)

Gira el vídeo grabado.

StartPreviewAsync()

Inicia la versión preliminar.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Comienza a enviar una secuencia de vista previa a un receptor multimedia personalizado mediante el perfil de codificación especificado.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Comienza a enviar una secuencia de vista previa a un receptor de medios personalizado mediante la configuración especificada del perfil de codificación y del receptor.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Inicie la grabación en un receptor de medios personalizado mediante el perfil de codificación especificado.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Inicie la grabación en un receptor de medios personalizado mediante la configuración especificada del perfil de codificación y el receptor.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Inicia la grabación de forma asincrónica en un archivo de almacenamiento.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Inicia la grabación en una secuencia de acceso aleatorio.

StopPreviewAsync()

Detiene la vista previa.

StopRecordAsync()

Detiene la grabación.

StopRecordWithResultAsync()

Detiene de forma asincrónica la grabación multimedia y proporciona un objeto MediaCaptureStopResult que se puede usar para ayudar al usuario a alinear la cámara con el último fotograma capturado al reiniciar la grabación.

Eventos

CameraStreamStateChanged

Se produce cuando cambia el estado de la secuencia de cámara.

CaptureDeviceExclusiveControlStatusChanged

Se produce cuando cambia el estado de control exclusivo del dispositivo de captura.

Failed

Se genera cuando se produce un error durante la captura multimedia.

FocusChanged

Se produce cuando el dispositivo de captura cambia el foco.

PhotoConfirmationCaptured

Se produce cuando se captura un marco de confirmación de fotos.

RecordLimitationExceeded

Se produce cuando se supera el límite de registros.

ThermalStatusChanged

Se produce cuando cambia el estado térmico del dispositivo de captura.

Se aplica a

Consulte también