MediaCapture Classe

Definizione

Fornisce funzionalità per l'acquisizione di foto, audio e video da un dispositivo di acquisizione, ad esempio una 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
Ereditarietà
Object Platform::Object IInspectable MediaCapture
Attributi
Implementazioni

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
Funzionalità dell'app
backgroundMediaRecording microphone webcam

Esempio

Nell'esempio di codice seguente viene illustrato come creare e inizializzare un oggetto 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();
}

Per informazioni su come gestire la sospensione, vedi Gestire la sospensione dell'app.

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

Commenti

La classe MediaCapture viene usata per acquisire audio, video e immagini da una fotocamera. Per indicazioni sulle procedure per visualizzare l'anteprima della fotocamera, vedi Visualizzare l'anteprima della fotocamera. Per iniziare rapidamente a acquisire foto, audio o video, vedi Acquisizione di foto, video e audio di base con MediaCapture.

La pagina Fotocamera è l'hub principale per indicazioni sulle procedure per l'uso di MediaCapture nell'app. Oltre alle attività di base della fotocamera, questa pagina contiene collegamenti ad articoli sulle procedure per scenari avanzati, tra cui:

  • Uso del pulsante della fotocamera hardware nei dispositivi con uno
  • Gestione dell'orientamento del dispositivo e dello schermo
  • Uso dei profili della fotocamera per determinare le funzionalità del dispositivo
  • Impostazione del formato, della risoluzione e della frequenza dei fotogrammi del video acquisito
  • Uso di AdvancedPhotoCapture per acquisire foto HDR o di scarsa illuminazione
  • Uso di VideoDeviceController per accedere a controlli manuali della fotocamera, ad esempio esposizione, bilanciamento del bianco, messa a fuoco automatica e flash
  • Uso degli effetti durante l'acquisizione di video
  • Acquisizione di sequenze fotografiche
  • Uso di MediaFrameReader per ottenere un flusso di fotogrammi da una o più fotocamere, tra cui fotocamere rgb, infrarossi e di profondità
  • Recupero di un frame dal flusso di anteprima

L'articolo Fotocamera include anche collegamenti a tutti gli esempi UWP SDK per la fotocamera, ad esempio l'esempio di kit di avvio fotocamera .

Il metodo InitializeAsync , che inizializza l'oggetto MediaCapture , deve essere chiamato prima di avviare l'anteprima o l'acquisizione dal dispositivo. Nelle app C# o C++ il primo uso dell'oggetto MediaCapture per chiamare InitializeAsync deve trovarsi nel thread STA. Le chiamate da un thread MTA possono comportare un comportamento non definito. InitializeAsync avvierà una richiesta di consenso per ottenere l'autorizzazione dell'utente per consentire all'app di accedere al microfono o alla fotocamera. InitializeAsync deve essere chiamato dal thread principale dell'interfaccia utente dell'app. Le app devono gestire la sospensione o la terminazione dell'app pulendo correttamente le risorse di acquisizione multimediale. Per informazioni sull'arresto corretto dell'oggetto MediaCapture , vedi Acquisizione di foto, video e audio di base con MediaCapture.

In Windows, le app di acquisizione di musica e multimediale devono monitorare SystemMediaTransportControls.SoundLevel per determinare se i flussi audio nell'app sono stati disattivati. Per le app che usano l'oggetto MediaCapture, l'acquisizione verrà arrestata automaticamente quando i flussi di acquisizione dell'app vengono disattivati. L'acquisizione non viene riavviata automaticamente quando i flussi audio non vengono attivati, quindi è possibile usare la notifica di modifica SoundLevel per riavviare l'acquisizione. Utilizzare l'evento SystemMediaTransportControls.PropertyChanged per determinare quando cambia la proprietà SoundLevel .

Per Windows Phone app 8.x, le app musicali e multimediali devono pulire l'oggetto MediaCapture e le risorse associate nel gestore eventi Suspending e ricrearle nel gestore eventi Ripresa.

In Windows 8.1 app solo audio, se l'impostazione MediaCategory è Other, viene usata la modalità di latenza elevata. Per bassa latenza, impostare l'impostazione MediaCategory su Comunicazioni.

L'aggiunta di un effetto di modifica sul posto di Media Foundation Transform nell'anteprima di acquisizione non avrà alcun effetto sul flusso.

Windows 8 le app UWP dichiarate sia le funzionalità webcam che del microfono non funzioneranno in Windows 8.1 se l'utente non ha abilitato sia le impostazioni di privacy della webcam che del microfono.

MediaCapture supporta solo una codifica CBR pass.

Note su JPEG: I tipi JPEG sono solo pass-through. Per acquisire un'immagine, il profilo di codifica delle immagini può essere impostato su Auto oppure è necessario specificare un profilo di codifica corrispondente al tipo nativo. Per aggiungere un effetto, è necessario passare a un tipo di supporto nativo video non compresso, ad esempio NV12 o RGB32.

Note sulla H.264: Se il tipo nativo è H.264, è possibile registrare usando un tipo di supporto video con tipo identico al tipo nativo. Non è possibile aggiungere un effetto a un flusso di tipi nativi H.264. Per acquisire video, il profilo di codifica delle immagini può essere impostato su Auto oppure è necessario specificare un profilo di codifica corrispondente al tipo nativo.

Nota

Questa classe non è agile, il che significa che è necessario considerare il modello di threading e il comportamento di marshalling. Per altre informazioni, vedere Threading e marshalling (C++/CX) e Uso di oggetti Windows Runtime in un ambiente multithreading (.NET).

Cronologia delle versioni

Versione di Windows Versione dell'SDK Valore aggiunto
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

Costruttori

MediaCapture()

Crea una nuova istanza dell'oggetto MediaCapture .

Proprietà

AudioDeviceController

Ottiene un oggetto che controlla le impostazioni per il microfono.

CameraStreamState

Ottiene lo stato corrente del flusso della fotocamera.

FrameSources

Ottiene un dizionario di sola lettura di oggetti MediaFrameSource che possono essere utilizzati contemporaneamente per acquisire fotogrammi multimediali.

MediaCaptureSettings

Ottiene le impostazioni di configurazione per l'oggetto MediaCapture .

ThermalStatus

Ottiene un valore che indica lo stato termico corrente del dispositivo di acquisizione.

VideoDeviceController

Ottiene un oggetto che controlla le impostazioni per la videocamera.

Metodi

AddAudioEffectAsync(IAudioEffectDefinition)

Aggiunge un effetto audio alla pipeline di acquisizione.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Aggiunge un effetto audio o video.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Aggiunge un effetto video alla pipeline di acquisizione.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Acquisisce una foto in un file di archiviazione.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Acquisisce una foto in un flusso ad accesso casuale.

ClearEffectsAsync(MediaStreamType)

Rimuove tutti gli effetti audio e video da un flusso.

Close()

Chiude l'oggetto di acquisizione multimediale.

CreateFrameReaderAsync(MediaFrameSource)

Crea un MediaFrameReader utilizzato per acquisire fotogrammi da MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String)

Crea un MediaFrameReader utilizzato per acquisire fotogrammi con il sottotipo di codifica multimediale specificato da MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Crea un MediaFrameReader utilizzato per acquisire fotogrammi con il sottotipo di codifica multimediale e le dimensioni specificati da MediaFrameSource.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Crea un oggetto MultiSourceMediaFrameReader utilizzato per acquisire fotogrammi correlati al tempo da uno o più oggetti MediaFrameSource .

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Crea una nuova istanza della classe MediaCaptureRelativePanelWatcher , che monitora il pannello associato all'oggetto DisplayRegion specificato, in modo che l'app riceva le notifiche quando cambia la posizione relativa del pannello.

Dispose()

Esegue attività definite dall'applicazione, come rilasciare o reimpostare risorse non gestite.

FindAllVideoProfiles(String)

Recupera l'elenco di tutti i profili video supportati dal dispositivo di acquisizione video specificato.

FindConcurrentProfiles(String)

Recupera l'elenco dei profili video supportati dal dispositivo di acquisizione video specificato che può essere usato mentre un altro profilo viene usato in un dispositivo di acquisizione diverso.

FindKnownVideoProfiles(String, KnownVideoProfile)

Recupera l'elenco di tutti i profili video supportati dal dispositivo di acquisizione video specificato che corrispondono al valore KnownVideoProfile specificato.

GetEncoderProperty(MediaStreamType, Guid)

Ottiene il valore di una proprietà di codifica.

GetPreviewFrameAsync()

Ottiene un frame di anteprima dal dispositivo di acquisizione.

GetPreviewFrameAsync(VideoFrame)

Ottiene un frame di anteprima dal dispositivo di acquisizione, copiato nel VideoFrame di destinazione specificato e convertito nel formato del frame di destinazione.

GetPreviewMirroring()

Esegue una query che indica se il flusso video viene sottoposto a mirroring orizzontalmente.

GetPreviewRotation()

Ottiene la rotazione del flusso di anteprima video.

GetRecordRotation()

Ottiene la rotazione del video registrato.

InitializeAsync()

Inizializza l'oggetto MediaCapture utilizzando le impostazioni predefinite.

InitializeAsync(MediaCaptureInitializationSettings)

Inizializza l'oggetto MediaCapture .

IsVideoProfileSupported(String)

Ottiene un valore booleano che indica se i profili video sono supportati dal dispositivo di acquisizione video specificato.

PauseRecordAsync(MediaCapturePauseBehavior)

Sospende un'operazione di record in corso.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Sospende un'operazione di registrazione multimediale in corso e fornisce un oggetto MediaCapturePauseResult che può essere usato per consentire all'utente di allineare la fotocamera con l'ultimo fotogramma acquisito durante la ripresa della registrazione.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Inizializza l'acquisizione di foto avanzata e fornisce l'oggetto AdvancedPhotoCapture utilizzato per gestire la registrazione.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Inizializza l'acquisizione di foto con ritardo dell'otturatore basso e fornisce l'oggetto LowLagPhotoCapture usato per gestire la registrazione.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Inizializza l'acquisizione della sequenza di foto con ritardo dell'otturatore basso e fornisce l'oggetto LowLagPhotoSequenceCapture usato per gestire la registrazione.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Inizializza la registrazione con ritardo basso utilizzando il sink personalizzato specificato per archiviare la registrazione. Questo metodo fornisce l'oggetto LowLagMediaRecording utilizzato per gestire l'acquisizione.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Inizializza la registrazione con ritardo basso utilizzando il sink personalizzato specificato per archiviare la registrazione. Questo metodo fornisce l'oggetto LowLagMediaRecording utilizzato per gestire la registrazione.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Inizializza la registrazione con ritardo basso utilizzando il file specificato per archiviare la registrazione. Questo metodo fornisce l'oggetto LowLagMediaRecording utilizzato per gestire la registrazione.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Inizializza la registrazione con ritardo basso usando il flusso di accesso casuale specificato per archiviare la registrazione. Questo metodo fornisce l'oggetto LowLagMediaRecording utilizzato per gestire la registrazione.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Inizializza l'acquisizione della sequenza di foto variabile e fornisce l'oggetto VariablePhotoSequenceCapture usato per gestire la registrazione.

RemoveEffectAsync(IMediaExtension)

Rimuove l'effetto specificato dalla pipeline di acquisizione.

ResumeRecordAsync()

Riprende un'operazione di registrazione sospesa.

SetEncoderProperty(MediaStreamType, Guid, Object)

Imposta una proprietà di codifica.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Imposta in modo asincrono le proprietà di codifica multimediale.

SetPreviewMirroring(Boolean)

Abilita o disabilita il mirroring orizzontale del flusso di anteprima video. Questo non è il metodo preferito per il mirroring. Per informazioni dettagliate, vedere la sezione Osservazioni di seguito.

SetPreviewRotation(VideoRotation)

Ruota il flusso di anteprima video.

SetRecordRotation(VideoRotation)

Ruota il video registrato.

StartPreviewAsync()

Avvia l'anteprima.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Avvia l'invio di un flusso di anteprima a un sink multimediale personalizzato usando il profilo di codifica specificato.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Avvia l'invio di un flusso di anteprima a un sink multimediale personalizzato usando le impostazioni del profilo di codifica e del sink specificate.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Avviare la registrazione in un sink multimediale personalizzato usando il profilo di codifica specificato.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Avviare la registrazione in un sink multimediale personalizzato usando le impostazioni del profilo di codifica e del sink specificate.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Avvia la registrazione in modo asincrono in un file di archiviazione.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Avvia la registrazione in un flusso ad accesso casuale.

StopPreviewAsync()

Arresta l'anteprima.

StopRecordAsync()

Arresta la registrazione.

StopRecordWithResultAsync()

Arresta in modo asincrono la registrazione multimediale e fornisce un mediaCaptureStopResult che può essere usato per consentire all'utente di allineare la fotocamera con l'ultimo fotogramma acquisito durante il riavvio della registrazione.

Eventi

CameraStreamStateChanged

Si verifica quando lo stato del flusso della fotocamera cambia.

CaptureDeviceExclusiveControlStatusChanged

Si verifica quando cambia lo stato esclusivo del controllo del dispositivo di acquisizione.

Failed

Generato quando si verifica un errore durante l'acquisizione multimediale.

FocusChanged

Si verifica quando il dispositivo di acquisizione cambia lo stato attivo.

PhotoConfirmationCaptured

Si verifica quando viene acquisita una cornice di conferma della foto.

RecordLimitationExceeded

Si verifica quando viene superato il limite di record.

ThermalStatusChanged

Si verifica quando cambia lo stato termico del dispositivo di acquisizione.

Si applica a

Vedi anche