MediaCapture Classe

Definição

Fornece funcionalidade para capturar fotos, áudio e vídeos de um dispositivo de captura, como uma webcam.

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
Herança
Object Platform::Object IInspectable MediaCapture
Atributos
Implementações

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
Funcionalidades do aplicativo
backgroundMediaRecording microphone webcam

Exemplos

O exemplo de código a seguir mostra como criar e inicializar um 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 obter informações sobre como lidar com a suspensão, consulte Manipular a suspensão do aplicativo.

<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;
}

Comentários

A classe MediaCapture é usada para capturar áudio, vídeo e imagens de uma câmera. Para obter diretrizes de instruções para exibir a visualização da câmera, consulte Exibir a visualização da câmera. Para começar rapidamente a capturar fotos, áudio ou vídeo, consulte Captura básica de foto, vídeo e áudio com MediaCapture.

A página Câmera é o hub main para obter diretrizes de instruções para usar o MediaCapture em seu aplicativo. Além das tarefas básicas da câmera, esta página é vinculada a artigos de instruções para cenários avançados, incluindo:

  • Usando o botão de câmera de hardware em dispositivos que têm um
  • Manipulando orientação de dispositivo e tela
  • Usando perfis de câmera para determinar as funcionalidades do dispositivo
  • Definir o formato, a resolução e a taxa de quadros do vídeo capturado
  • Usando AdvancedPhotoCapture para capturar fotos HDR ou de pouca luz
  • Usando o VideoDeviceController para acessar controles manuais de câmera, como exposição, equilíbrio em branco, foco automático e flash
  • Usando efeitos durante a captura de vídeo
  • Capturando sequências de fotos
  • Usando MediaFrameReader para obter um fluxo de quadros de uma ou mais câmeras, incluindo câmeras rgb, infravermelhas e de profundidade
  • Obtendo um quadro do fluxo de visualização

O artigo Câmera também é vinculado a todos os exemplos do SDK da UWP para câmera, como o exemplo de kit inicial da câmera .

O método InitializeAsync , que inicializa o objeto MediaCapture , deve ser chamado antes de começar a visualizar ou capturar do dispositivo. Em aplicativos C# ou C++, o primeiro uso do objeto MediaCapture para chamar InitializeAsync deve estar no thread STA. Chamadas de um thread MTA podem resultar em um comportamento indefinido. InitializeAsync iniciará um prompt de consentimento para obter a permissão do usuário para que o aplicativo acesse o microfone ou a câmera. InitializeAsync deve ser chamado do thread de interface do usuário main do aplicativo. Os aplicativos devem lidar com a suspensão ou o encerramento do aplicativo limpando corretamente os recursos de captura de mídia. Para obter informações sobre como desligar o objeto MediaCapture corretamente, consulte Captura básica de foto, vídeo e áudio com MediaCapture.

No Windows, os aplicativos de captura de música e mídia devem monitorar o SystemMediaTransportControls.SoundLevel para determinar se os fluxos de áudio no aplicativo foram silenciados. Para aplicativos que usam o objeto MediaCapture, a captura será interrompida automaticamente quando os fluxos de captura do aplicativo forem ativados. A captura não é reiniciada automaticamente quando os fluxos de áudio são desativados, portanto, a notificação alterada soundLevel pode ser usada para reiniciar a captura. Use o evento SystemMediaTransportControls.PropertyChanged para determinar quando a propriedade SoundLevel é alterada.

Para aplicativos Windows Phone 8.x, os aplicativos de música e mídia devem limpo o objeto MediaCapture e os recursos associados no manipulador de eventos Suspending e recriá-los no manipulador de eventos Resuming.

Em Windows 8.1 somente aplicativos de áudio, se a configuração MediaCategory for Outros, o modo de alta latência será usado. Para baixa latência, defina a configuração MediaCategory como Comunicações.

Adicionar um efeito in-loco de edição do Media Foundation Transform à visualização de captura não terá efeito sobre o fluxo.

Windows 8 aplicativos UWP que declararam que os recursos de webcam e microfone não funcionarão em Windows 8.1 se o usuário não tiver habilitado as configurações de privacidade da webcam e do microfone.

O MediaCapture dá suporte apenas a uma codificação CBR de passagem.

Observações sobre JPEG: Os tipos JPEG são apenas passagem. Para capturar uma imagem, o perfil de codificação de imagem pode ser definido como Automático ou você precisa especificar um perfil de codificação que corresponda ao tipo nativo. Para adicionar um efeito, você precisa alternar para um tipo de mídia nativa de vídeo descompactado, como NV12 ou RGB32.

Observações sobre H.264: Se o tipo nativo for H.264, você poderá gravar usando um tipo de mídia de vídeo com tipo idêntico ao tipo nativo. Não é possível adicionar um efeito a um fluxo de tipo nativo H.264. Para capturar vídeo, o perfil de codificação de imagem pode ser definido como Automático ou você precisa especificar um perfil de codificação que corresponda ao tipo nativo.

Observação

Essa classe não é ágil, o que significa que você precisa considerar seu modelo de threading e o comportamento de marshaling. Para obter mais informações, consulte Threading and Marshaling (C++/CX) e Using Windows Runtime objects in a multithreaded environment (.NET).

Histórico de versão

Versão do Windows Versão do SDK Valor adicionado
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

Construtores

MediaCapture()

Cria uma nova instância do objeto MediaCapture .

Propriedades

AudioDeviceController

Obtém um objeto que controla as configurações do microfone.

CameraStreamState

Obtém o estado do fluxo atual do fluxo da câmera.

FrameSources

Obtém um dicionário somente leitura de objetos MediaFrameSource que podem ser usados simultaneamente para adquirir quadros de mídia.

MediaCaptureSettings

Obtém as configurações do objeto MediaCapture .

ThermalStatus

Obtém um valor que indica o status térmico atual do dispositivo de captura.

VideoDeviceController

Obtém um objeto que controla as configurações da câmera de vídeo.

Métodos

AddAudioEffectAsync(IAudioEffectDefinition)

Adiciona um efeito de áudio ao pipeline de captura.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Adiciona um efeito de áudio ou vídeo.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Adiciona um efeito de vídeo ao pipeline de captura.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Captura uma foto em um arquivo de armazenamento.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Captura uma foto em um fluxo de acesso aleatório.

ClearEffectsAsync(MediaStreamType)

Remove todos os efeitos de áudio e vídeo de um fluxo.

Close()

Fecha o objeto de captura de mídia.

CreateFrameReaderAsync(MediaFrameSource)

Cria um MediaFrameReader que é usado para adquirir quadros de um MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String)

Cria um MediaFrameReader que é usado para adquirir quadros com o subtipo de codificação de mídia especificado de um MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Cria um MediaFrameReader que é usado para adquirir quadros com o subtipo e o tamanho de codificação de mídia especificados de um MediaFrameSource.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Cria um MultiSourceMediaFrameReader que é usado para adquirir quadros correlacionados com o tempo de um ou mais objetos MediaFrameSource .

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Cria uma nova instância da classe MediaCaptureRelativePanelWatcher , que monitora o painel associado à DisplayRegion fornecida, para que o aplicativo receba notificações quando o local relativo do painel for alterado.

Dispose()

Realiza tarefas definidas pelo aplicativo associadas à liberação ou à redefinição de recursos não gerenciados.

FindAllVideoProfiles(String)

Recupera a lista de todos os perfis de vídeo compatíveis com o dispositivo de captura de vídeo especificado.

FindConcurrentProfiles(String)

Recupera a lista de perfis de vídeo compatíveis com o dispositivo de captura de vídeo especificado que pode ser usado enquanto outro perfil é usado em um dispositivo de captura diferente.

FindKnownVideoProfiles(String, KnownVideoProfile)

Recupera a lista de todos os perfis de vídeo compatíveis com o dispositivo de captura de vídeo especificado que corresponde ao valor de KnownVideoProfile especificado.

GetEncoderProperty(MediaStreamType, Guid)

Obtém o valor de uma propriedade de codificação.

GetPreviewFrameAsync()

Obtém um quadro de visualização do dispositivo de captura.

GetPreviewFrameAsync(VideoFrame)

Obtém um quadro de visualização do dispositivo de captura, copiado para o VideoFrame de destino fornecido e convertido no formato do quadro de destino.

GetPreviewMirroring()

Consulta se o fluxo de vídeo é espelhado horizontalmente.

GetPreviewRotation()

Obtém a rotação do fluxo de visualização de vídeo.

GetRecordRotation()

Obtém a rotação do vídeo gravado.

InitializeAsync()

Inicializa o objeto MediaCapture usando as configurações padrão.

InitializeAsync(MediaCaptureInitializationSettings)

Inicializa o objeto MediaCapture .

IsVideoProfileSupported(String)

Obtém um valor booliano que indica se os perfis de vídeo são compatíveis com o dispositivo de captura de vídeo especificado.

PauseRecordAsync(MediaCapturePauseBehavior)

Pausa uma operação de registro em andamento.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Pausa uma operação de registro de mídia em andamento e fornece um MediaCapturePauseResult que pode ser usado para ajudar o usuário a alinhar a câmera com o último quadro capturado ao retomar a gravação.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Inicializa a captura de fotos avançada e fornece o objeto AdvancedPhotoCapture usado para gerenciar a gravação.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Inicializa a captura de fotos de retardo do obturador baixo e fornece o objeto LowLagPhotoCapture usado para gerenciar a gravação.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Inicializa a captura de sequência de fotos de retardo do obturador baixo e fornece o objeto LowLagPhotoSequenceCapture usado para gerenciar a gravação.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Inicializa a gravação de baixo atraso usando o coletor personalizado especificado para armazenar a gravação. Esse método fornece o objeto LowLagMediaRecording usado para gerenciar a captura.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Inicializa a gravação de baixo atraso usando o coletor personalizado especificado para armazenar a gravação. Esse método fornece o objeto LowLagMediaRecording usado para gerenciar a gravação.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Inicializa a gravação de baixo atraso usando o arquivo especificado para armazenar a gravação. Esse método fornece o objeto LowLagMediaRecording usado para gerenciar a gravação.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Inicializa a gravação de baixo atraso usando o fluxo de acesso aleatório especificado para armazenar a gravação. Esse método fornece o objeto LowLagMediaRecording usado para gerenciar a gravação.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Inicializa a captura de sequência de fotos variável e fornece o objeto VariablePhotoSequenceCapture usado para gerenciar a gravação.

RemoveEffectAsync(IMediaExtension)

Remove o efeito especificado do pipeline de captura.

ResumeRecordAsync()

Retoma uma operação de gravação pausada.

SetEncoderProperty(MediaStreamType, Guid, Object)

Define uma propriedade de codificação.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Define as propriedades de codificação de mídia de forma assíncrona.

SetPreviewMirroring(Boolean)

Habilita ou desabilita o espelhamento horizontal do fluxo de visualização de vídeo. Esse não é o método preferencial para espelhamento. Consulte a seção Comentários abaixo para obter detalhes.

SetPreviewRotation(VideoRotation)

Gira o fluxo de visualização de vídeo.

SetRecordRotation(VideoRotation)

Gira o vídeo gravado.

StartPreviewAsync()

Inicia a visualização.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Começa a enviar um fluxo de visualização para um coletor de mídia personalizado usando o perfil de codificação especificado.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Começa a enviar um fluxo de visualização para um coletor de mídia personalizado usando o perfil de codificação e as configurações do coletor especificados.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Inicie a gravação em um coletor de mídia personalizado usando o perfil de codificação especificado.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Inicie a gravação em um coletor de mídia personalizado usando o perfil de codificação e as configurações do coletor especificados.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Inicia a gravação de forma assíncrona em um arquivo de armazenamento.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Inicia a gravação em um fluxo de acesso aleatório.

StopPreviewAsync()

Interrompe a visualização.

StopRecordAsync()

Interrompe a gravação.

StopRecordWithResultAsync()

Interrompe de forma assíncrona a gravação de mídia e fornece um MediaCaptureStopResult que pode ser usado para ajudar o usuário a alinhar a câmera com o último quadro capturado ao reiniciar a gravação.

Eventos

CameraStreamStateChanged

Ocorre quando o estado do fluxo da câmera é alterado.

CaptureDeviceExclusiveControlStatusChanged

Ocorre quando o controle exclusivo status do dispositivo de captura é alterado.

Failed

Gerado quando ocorre um erro durante a captura de mídia.

FocusChanged

Ocorre quando o dispositivo de captura altera o foco.

PhotoConfirmationCaptured

Ocorre quando um quadro de confirmação de foto é capturado.

RecordLimitationExceeded

Ocorre quando o limite de registro é excedido.

ThermalStatusChanged

Ocorre quando o status térmico do dispositivo de captura é alterado.

Aplica-se a

Confira também