Partager via


MediaCapture Classe

Définition

Fournit des fonctionnalités pour capturer des photos, de l’audio et des vidéos à partir d’un appareil de capture, tel qu’une 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
Héritage
Object Platform::Object IInspectable MediaCapture
Attributs
Implémente

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v1.0)
Fonctionnalités de l’application
backgroundMediaRecording microphone webcam

Exemples

L’exemple de code suivant montre comment créer et initialiser un objet 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();
}

Pour plus d’informations sur la gestion de la suspension, consultez Gérer la suspension d’application.

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

Remarques

La classe MediaCapture est utilisée pour capturer de l’audio, de la vidéo et des images à partir d’une caméra. Pour obtenir des instructions pratiques sur l’affichage de l’aperçu de l’appareil photo, consultez Afficher l’aperçu de l’appareil photo. Pour commencer rapidement à capturer des photos, de l’audio ou de la vidéo, consultez Capture photo, vidéo et audio de base avec MediaCapture.

La page Appareil photo est le hub main pour obtenir des conseils pratiques sur l’utilisation de MediaCapture dans votre application. En plus des tâches de base de l’appareil photo, cette page renvoie à des articles pratiques pour les scénarios avancés, notamment :

  • Utilisation du bouton de la caméra matérielle sur les appareils qui en ont un
  • Gestion de l’orientation de l’appareil et de l’écran
  • Utilisation de profils d’appareil photo pour déterminer les fonctionnalités de l’appareil
  • Définition du format, de la résolution et de la fréquence d’images de la vidéo capturée
  • Utilisation d’AdvancedPhotoCapture pour capturer des photos HDR ou en basse lumière
  • Utilisation de VideoDeviceController pour accéder aux contrôles manuels de l’appareil photo comme l’exposition, la balance des blancs, le focus automatique et le flash
  • Utilisation d’effets lors de la capture vidéo
  • Capture de séquences de photos
  • Utilisation de MediaFrameReader pour obtenir un flux d’images à partir d’une ou plusieurs caméras, notamment des caméras rvb, infrarouges et de profondeur
  • Obtention d’une image à partir du flux d’aperçu

L’article Appareil photo renvoie également à tous les exemples du KIT de développement logiciel (SDK) UWP pour l’appareil photo, tels que l’exemple du kit de démarrage appareil photo .

La méthode InitializeAsync , qui initialise l’objet MediaCapture , doit être appelée avant de pouvoir commencer à prévisualiser ou à capturer à partir de l’appareil. Dans les applications C# ou C++, la première utilisation de l’objet MediaCapture pour appeler InitializeAsync doit se trouver sur le thread STA. Les appels d’un thread MTA peuvent entraîner un comportement non défini. InitializeAsync lance une invite de consentement pour obtenir l’autorisation de l’utilisateur pour que l’application accède au microphone ou à la caméra. InitializeAsync doit être appelé à partir du thread d’interface utilisateur main de votre application. Les applications doivent gérer la suspension ou l’arrêt des applications en nettoyant correctement les ressources de capture multimédia. Pour plus d’informations sur l’arrêt correct de l’objet MediaCapture , consultez Capture photo, vidéo et audio de base avec MediaCapture.

Sur Windows, les applications de capture de musique et multimédia doivent surveiller SystemMediaTransportControls.SoundLevel pour déterminer si les flux audio de l’application ont été désactivés. Pour les applications utilisant l’objet MediaCapture, la capture est automatiquement arrêtée lorsque les flux de capture de l’application sont désactivés. La capture n’étant pas redémarrée automatiquement lorsque les flux audio sont désactivés, la notification de modification SoundLevel peut être utilisée pour redémarrer la capture. Utilisez l’événement SystemMediaTransportControls.PropertyChanged pour déterminer quand la propriété SoundLevel change.

Pour Windows Phone applications 8.x, les applications de musique et de média doivent propre l’objet MediaCapture et les ressources associées dans le gestionnaire d’événements Suspending et les recréer dans le gestionnaire d’événements Reprise.

Dans Windows 8.1 applications audio uniquement, si le paramètre MediaCategory est Autre, le mode de latence élevée est utilisé. Pour une faible latence, définissez le paramètre MediaCategory sur Communications.

L’ajout d’un effet de transformation Media Foundation sur place dans l’aperçu de capture n’aura aucun effet sur le flux.

Windows 8 applications UWP qui ont déclaré les fonctionnalités de webcam et de microphone ne fonctionnent pas dans Windows 8.1 si l’utilisateur n’a pas activé les paramètres de confidentialité de la webcam et du microphone.

MediaCapture ne prend en charge qu’un seul encodage CBR de passage.

Remarques sur JPEG : Les types JPEG sont passthrough uniquement. Pour capturer une image, le profil d’encodage d’image peut être défini sur Auto ou vous devez spécifier un profil d’encodage qui correspond au type natif. Pour ajouter un effet, vous devez basculer vers un type de média vidéo natif non compressé, tel que NV12 ou RGB32.

Remarques sur H.264 : Si le type natif est H.264, vous pouvez enregistrer à l’aide d’un type de média vidéo de type identique au type natif. Vous ne pouvez pas ajouter un effet à un flux de type natif H.264. Pour capturer la vidéo, le profil d’encodage d’image peut être défini sur Auto ou vous devez spécifier un profil d’encodage qui correspond au type natif.

Notes

Cette classe n’est pas agile, ce qui signifie que vous devez prendre en compte son modèle de thread et son comportement de marshaling. Pour plus d’informations, consultez Threading and Marshaling (C++/CX) et Utilisation d’objets Windows Runtime dans un environnement multithread (.NET).

Historique des versions

Version de Windows Version du SDK Valeur ajoutée
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

Constructeurs

MediaCapture()

Crée une instance de l’objet MediaCapture.

Propriétés

AudioDeviceController

Obtient un objet qui contrôle les paramètres du microphone.

CameraStreamState

Obtient l’état actuel du flux de caméra.

FrameSources

Obtient un dictionnaire en lecture seule d’objets MediaFrameSource qui peuvent être utilisés simultanément pour acquérir des images multimédias.

MediaCaptureSettings

Obtient les paramètres de configuration de l’objet MediaCapture .

ThermalStatus

Obtient une valeur qui indique la status thermique actuelle de l’appareil de capture.

VideoDeviceController

Obtient un objet qui contrôle les paramètres de la caméra vidéo.

Méthodes

AddAudioEffectAsync(IAudioEffectDefinition)

Ajoute un effet audio au pipeline de capture.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Ajoute un effet audio ou vidéo.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Ajoute un effet vidéo au pipeline de capture.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Capture une photo dans un fichier de stockage.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Capture une photo dans un flux d’accès aléatoire.

ClearEffectsAsync(MediaStreamType)

Supprime tous les effets audio et vidéo d’un flux.

Close()

Ferme l’objet de capture multimédia.

CreateFrameReaderAsync(MediaFrameSource)

Crée un MediaFrameReader utilisé pour acquérir des images à partir d’un MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String)

Crée un MediaFrameReader utilisé pour acquérir des images avec le sous-type d’encodage multimédia spécifié à partir d’un MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Crée un MediaFrameReader utilisé pour acquérir des images avec le sous-type et la taille d’encodage multimédia spécifiés à partir d’un MediaFrameSource.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Crée un MultiSourceMediaFrameReader qui est utilisé pour acquérir des images corrélées dans le temps à partir d’un ou plusieurs objets MediaFrameSource .

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Crée une nouvelle instance de la classe MediaCaptureRelativePanelWatcher, qui surveille le panneau associé au DisplayRegion fourni, afin que l’application reçoive des notifications lorsque l’emplacement relatif du panneau change.

Dispose()

Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées.

FindAllVideoProfiles(String)

Récupère la liste de tous les profils vidéo pris en charge par l’appareil de capture vidéo spécifié.

FindConcurrentProfiles(String)

Récupère la liste des profils vidéo pris en charge par l’appareil de capture vidéo spécifié qui peut être utilisé alors qu’un autre profil est utilisé sur un autre appareil de capture.

FindKnownVideoProfiles(String, KnownVideoProfile)

Récupère la liste de tous les profils vidéo pris en charge par l’appareil de capture vidéo spécifié qui correspondent à la valeur KnownVideoProfile spécifiée.

GetEncoderProperty(MediaStreamType, Guid)

Obtient la valeur d’une propriété d’encodage.

GetPreviewFrameAsync()

Obtient une image d’aperçu à partir de l’appareil de capture.

GetPreviewFrameAsync(VideoFrame)

Obtient une image d’aperçu à partir de l’appareil de capture, copiée dans le VideoFrame de destination fourni et convertie dans le format de l’image de destination.

GetPreviewMirroring()

Demande si le flux vidéo est mis en miroir horizontalement.

GetPreviewRotation()

Obtient la rotation du flux d’aperçu vidéo.

GetRecordRotation()

Obtient la rotation de la vidéo enregistrée.

InitializeAsync()

Initialise l’objet MediaCapture à l’aide des paramètres par défaut.

InitializeAsync(MediaCaptureInitializationSettings)

Initialise l’objet MediaCapture .

IsVideoProfileSupported(String)

Obtient une valeur booléenne indiquant si les profils vidéo sont pris en charge par l’appareil de capture vidéo spécifié.

PauseRecordAsync(MediaCapturePauseBehavior)

Interrompt une opération d’enregistrement en cours.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Interrompt une opération d’enregistrement multimédia en cours et fournit un MediaCapturePauseResult qui peut être utilisé pour aider l’utilisateur à aligner l’appareil photo sur la dernière image capturée lors de la reprise de l’enregistrement.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Initialise la capture de photo avancée et fournit l’objet AdvancedPhotoCapture utilisé pour gérer l’enregistrement.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Initialise la capture photo à faible décalage de l’obturateur et fournit l’objet LowLagPhotoCapture utilisé pour gérer l’enregistrement.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Initialise la capture de séquence photo à faible décalage d’obturation et fournit l’objet LowLagPhotoSequenceCapture utilisé pour gérer l’enregistrement.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Initialise l’enregistrement à faible décalage à l’aide du récepteur personnalisé spécifié pour stocker l’enregistrement. Cette méthode fournit l’objet LowLagMediaRecording utilisé pour gérer la capture.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Initialise l’enregistrement à faible décalage à l’aide du récepteur personnalisé spécifié pour stocker l’enregistrement. Cette méthode fournit l’objet LowLagMediaRecording utilisé pour gérer l’enregistrement.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Initialise l’enregistrement à faible décalage à l’aide du fichier spécifié pour stocker l’enregistrement. Cette méthode fournit l’objet LowLagMediaRecording utilisé pour gérer l’enregistrement.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Initialise l’enregistrement à faible décalage à l’aide du flux d’accès aléatoire spécifié pour stocker l’enregistrement. Cette méthode fournit l’objet LowLagMediaRecording utilisé pour gérer l’enregistrement.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Initialise la capture de séquence de photos variables et fournit l’objet VariablePhotoSequenceCapture utilisé pour gérer l’enregistrement.

RemoveEffectAsync(IMediaExtension)

Supprime l’effet spécifié du pipeline de capture.

ResumeRecordAsync()

Reprend une opération d’enregistrement en pause.

SetEncoderProperty(MediaStreamType, Guid, Object)

Définit une propriété d’encodage.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Définit de manière asynchrone les propriétés d’encodage multimédia.

SetPreviewMirroring(Boolean)

Active ou désactive la mise en miroir horizontale du flux d’aperçu vidéo. Il ne s’agit pas de la méthode préférée pour la mise en miroir. Pour plus d’informations, consultez la section Remarques ci-dessous.

SetPreviewRotation(VideoRotation)

Fait pivoter le flux d’aperçu vidéo.

SetRecordRotation(VideoRotation)

Effectue une rotation de la vidéo enregistrée.

StartPreviewAsync()

Démarre la préversion.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Commence à envoyer un flux d’aperçu à un récepteur multimédia personnalisé à l’aide du profil d’encodage spécifié.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Commence à envoyer un flux d’aperçu à un récepteur multimédia personnalisé à l’aide du profil d’encodage et des paramètres de récepteur spécifiés.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Démarrez l’enregistrement sur un récepteur multimédia personnalisé à l’aide du profil d’encodage spécifié.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Démarrez l’enregistrement sur un récepteur multimédia personnalisé à l’aide du profil d’encodage et des paramètres de récepteur spécifiés.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Démarre l’enregistrement de manière asynchrone dans un fichier de stockage.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Démarre l’enregistrement dans un flux d’accès aléatoire.

StopPreviewAsync()

Arrête la préversion.

StopRecordAsync()

Arrête l’enregistrement.

StopRecordWithResultAsync()

Arrête de manière asynchrone l’enregistrement multimédia et fournit un MediaCaptureStopResult qui peut être utilisé pour aider l’utilisateur à aligner l’appareil photo sur la dernière image capturée lors du redémarrage de l’enregistrement.

Événements

CameraStreamStateChanged

Se produit lorsque l’état du flux de caméra change.

CaptureDeviceExclusiveControlStatusChanged

Se produit lorsque le contrôle exclusif status de l’appareil de capture change.

Failed

Déclenché lorsqu’une erreur se produit pendant la capture multimédia.

FocusChanged

Se produit lorsque l’appareil de capture change de focus.

PhotoConfirmationCaptured

Se produit lorsqu’un cadre de confirmation de photo est capturé.

RecordLimitationExceeded

Se produit lorsque la limite d’enregistrement est dépassée.

ThermalStatusChanged

Se produit lorsque le status thermique de l’appareil de capture change.

S’applique à

Voir aussi