MediaCapture Класс

Определение

Предоставляет функциональные возможности для записи фотографий, аудио и видео с устройства захвата, например веб-камеры.

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
Наследование
Object IInspectable MediaCapture
Атрибуты
Реализации

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)
Возможности приложения
backgroundMediaRecording microphone webcam

Примеры

В следующем примере кода показано, как создать и инициализировать объект 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();
}

Сведения об обработке приостановки см. в разделе "Обработка приостановки приложения".

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

Комментарии

Класс MediaCapture используется для записи аудио, видео и изображений с камеры. Инструкции по отображению предварительного просмотра камеры см. в разделе "Отображение предварительного просмотра камеры". Чтобы быстро приступить к записи фотографий, аудио или видео, ознакомьтесь с основными фото, видео и аудиозахватом с помощью MediaCapture.

Страница "Камера" — это основной центр инструкций по использованию MediaCapture в приложении. Помимо основных задач камеры, эта страница содержит ссылки на статьи о практических руководствах для сложных сценариев, в том числе:

  • Использование кнопки аппаратной камеры на устройствах с одним из них
  • Обработка ориентации устройства и экрана
  • Использование профилей камеры для определения возможностей устройства
  • Настройка формата, разрешения и частоты кадров захваченного видео
  • Использование AdvancedPhotoCapture для захвата HDR или фотографий с низким светом
  • Использование ручных VideoDeviceController элементов управления камерой, таких как экспозиция, баланс белого баланса, автофокусировка и вспышка
  • Использование эффектов при записи видео
  • Запись последовательностей фотографий
  • Использование MediaFrameReader для получения потока кадров с одной или нескольких камер, включая rgb, инфракрасные и глубинные камеры
  • Получение кадра из потока предварительного просмотра

В статье "Камера" также приводятся ссылки на все примеры пакета SDK UWP для камеры, например пример начального набора камеры .

Метод InitializeAsync , который инициализирует объект MediaCapture , необходимо вызвать перед началом предварительного просмотра или записи с устройства. В приложениях C# или C++ первое использование объекта MediaCapture для вызова InitializeAsync должно находиться в потоке STA. Вызовы из потока MTA могут привести к неопределенному поведению. InitializeAsync запустит запрос согласия, чтобы получить разрешение пользователя на доступ к микрофону или камере. ИнициализацияAsync должна вызываться из основного потока пользовательского интерфейса приложения. Приложения должны обрабатывать приостановку или завершение работы приложений путем правильной очистки ресурсов захвата мультимедиа. Сведения о правильном завершении работы объекта MediaCapture см. в разделе Basic photo, video и audio capture with MediaCapture.

В Windows приложения для записи музыки и мультимедиа должны отслеживаться SystemMediaTransportControls.SoundLevel , чтобы определить, были Mutedли звуковые потоки в приложении. Для приложений, использующих объект MediaCapture, захват будет автоматически остановлен при отключении потоков захвата приложения. Запись не запускается автоматически, когда аудиопотоки не подключены, поэтому SoundLevel для перезапуска записи можно использовать уведомление об изменении. SystemMediaTransportControls.PropertyChanged Используйте событие, чтобы определить, когда SoundLevel изменяется свойство.

Для приложений Windows Phone 8.x музыкальные и мультимедийные приложения должны очистить объект MediaCapture и связанные ресурсы в обработчике Suspending событий и воссоздать их в обработчике Resuming событий.

В приложениях только для звука Windows 8.1, если задан параметр MediaCategory Other, используется режим высокой задержки. Для низкой задержки задайте MediaCategory для параметра значение Communications.

Добавление эффекта преобразования Media Foundation на месте в предварительную версию захвата не повлияет на поток.

Приложения UWP для Windows 8, которые объявили возможности веб-камеры и микрофона, не будут работать в Windows 8.1, если пользователь не включил параметры конфиденциальности веб-камеры и микрофона.

MediaCapture поддерживает только одну сквозную кодировку CBR.

Примечания к JPEG: Типы JPEG доступны только для сквозного использования. Чтобы записать изображение, для профиля кодирования изображения можно задать значение "Авто" или указать профиль кодирования, соответствующий собственному типу. Чтобы добавить эффект, необходимо переключиться на несжатый собственный тип мультимедиа видео, например NV12 или RGB32.

Примечания о H.264: Если собственный тип — H.264, можно записать с помощью типа видеофайла с типом, идентичным собственному типу. Невозможно добавить эффект в поток собственного типа H.264. Чтобы записать видео, для профиля кодирования изображения можно задать значение "Авто" или указать профиль кодирования, соответствующий собственному типу.

Примечание

Этот класс не является гибким, что означает, что необходимо учитывать его модель потоков и поведение маршалинга. Дополнительные сведения см. в разделе "Потоки и маршалинг" (C++/CX) и использование объектов среды выполнения Windows в многопоточной среде (.NET).

Журнал версий

Версия Windows Версия пакета SDK Добавлено значение
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

Конструкторы

MediaCapture()

Создает новый экземпляр объекта MediaCapture.

Свойства

AudioDeviceController

Возвращает объект, который управляет параметрами микрофона.

CameraStreamState

Возвращает текущее состояние потока камеры.

FrameSources

Получает словарь объектов, доступных MediaFrameSource только для чтения, которые можно использовать одновременно для получения кадров мультимедиа.

MediaCaptureSettings

Возвращает параметры конфигурации для MediaCapture объекта.

ThermalStatus

Возвращает значение, указывающее текущее тепловое состояние устройства захвата.

VideoDeviceController

Возвращает объект, который управляет параметрами для видеокамеры.

Методы

AddAudioEffectAsync(IAudioEffectDefinition)

Добавляет звуковой эффект в конвейер захвата.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Добавляет звуковой или видеоэффект.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Добавляет видеоэффект в конвейер захвата.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Записывает фотографию в файл хранилища.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Записывает фотографию в поток произвольного доступа.

ClearEffectsAsync(MediaStreamType)

Удаляет из потока все звуковые и видеоэффекты.

Close()

Закрывает объект захвата мультимедиа.

CreateFrameReaderAsync(MediaFrameSource)

Создает объектMediaFrameReader, который используется для получения кадров из .MediaFrameSource

CreateFrameReaderAsync(MediaFrameSource, String)

Создает объект, используемый MediaFrameReader для получения кадров с указанным подтипом MediaFrameSourceкодирования мультимедиа из .

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Создает объектMediaFrameReader, который используется для получения кадров с указанным подтипом кодировки мультимедиа и размером из .MediaFrameSource

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Создает объект, используемый MultiSourceMediaFrameReader для получения кадров, связанных с временем, из одного или нескольких MediaFrameSource объектов.

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Создает новый экземпляр MediaCaptureRelativePanelWatcher класса, который отслеживает панель, связанную с предоставленным DisplayRegion, чтобы приложение получало уведомления при изменении относительного расположения панели.

FindAllVideoProfiles(String)

Извлекает список всех профилей видео, поддерживаемых указанным устройством захвата видео.

FindConcurrentProfiles(String)

Извлекает список профилей видео, поддерживаемых указанным устройством захвата видео, которое может использоваться в то время как другой профиль используется на другом устройстве захвата.

FindKnownVideoProfiles(String, KnownVideoProfile)

Извлекает список всех профилей видео, поддерживаемых указанным устройством захвата видео, которое соответствует указанному KnownVideoProfile значению.

GetEncoderProperty(MediaStreamType, Guid)

Возвращает значение свойства кодировки.

GetPreviewFrameAsync()

Получает кадр предварительного просмотра с устройства захвата.

GetPreviewFrameAsync(VideoFrame)

Получает кадр предварительного просмотра с устройства захвата, скопированный в предоставленное назначение VideoFrame и преобразованный в формат целевого кадра.

GetPreviewMirroring()

Запрашивает, является ли видеопоток зеркальным по горизонтали.

GetPreviewRotation()

Получает поворот потока предварительного просмотра видео.

GetRecordRotation()

Получает поворот записанного видео.

InitializeAsync()

Инициализирует MediaCapture объект с помощью параметров по умолчанию.

InitializeAsync(MediaCaptureInitializationSettings)

Выполняет инициализацию объекта MediaCapture.

IsVideoProfileSupported(String)

Возвращает логическое значение, указывающее, поддерживаются ли профили видео указанным устройством захвата видео.

PauseRecordAsync(MediaCapturePauseBehavior)

Приостанавливает текущую операцию записи.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Приостанавливает текущую операцию записи мультимедиа и предоставляет MediaCapturePauseResult возможность использования, чтобы помочь пользователю выровнять камеру с последним захваченным кадром при возобновлении записи.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Инициализирует расширенное фотозахват и предоставляет AdvancedPhotoCapture объект, используемый для управления записью.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Инициализирует фотозахват с низкой задержкой затвора и предоставляет объект, LowLagPhotoCapture используемый для управления записью.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Инициализирует запись с низкой задержкой и предоставляет LowLagPhotoSequenceCapture объект, используемый для управления записью.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Инициализирует запись с низкой задержкой с помощью указанного настраиваемого приемника для хранения записи. Этот метод предоставляет объект, используемый LowLagMediaRecording для управления записью.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Инициализирует запись с низкой задержкой с помощью указанного настраиваемого приемника для хранения записи. Этот метод предоставляет объект, используемый LowLagMediaRecording для управления записью.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Инициализирует запись с низкой задержкой, используя указанный файл для хранения записи. Этот метод предоставляет объект, используемый LowLagMediaRecording для управления записью.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Инициализирует запись с низкой задержкой, используя указанный поток произвольного доступа для хранения записи. Этот метод предоставляет объект, используемый LowLagMediaRecording для управления записью.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Инициализирует запись переменной последовательности фотографий и предоставляет VariablePhotoSequenceCapture объект, используемый для управления записью.

RemoveEffectAsync(IMediaExtension)

Удаляет указанный эффект из конвейера захвата.

ResumeRecordAsync()

Возобновляет приостановленную операцию записи.

SetEncoderProperty(MediaStreamType, Guid, Object)

Задает свойство кодировки.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Асинхронно задает свойства кодирования мультимедиа.

SetPreviewMirroring(Boolean)

Включает или отключает горизонтальное зеркальное отображение потока предварительного просмотра видео. Это не предпочтительный метод для зеркального отображения. Дополнительные сведения см. в разделе "Примечания" ниже.

SetPreviewRotation(VideoRotation)

Сменяет поток предварительного просмотра видео.

SetRecordRotation(VideoRotation)

Поворачивает записанное видео.

StartPreviewAsync()

Запускает предварительную версию.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Начинает отправку потока предварительного просмотра в пользовательский приемник мультимедиа с помощью указанного профиля кодирования.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Начинает отправку потока предварительного просмотра в пользовательский приемник мультимедиа с помощью указанных параметров кодирования и приемника.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Начните запись в пользовательский приемник мультимедиа с помощью указанного профиля кодирования.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Начните запись в пользовательский приемник мультимедиа, используя указанные параметры кодирования и приемника.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Начинает асинхронную запись в файл хранилища.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Начинает запись в поток произвольного доступа.

StopPreviewAsync()

Останавливает предварительный просмотр.

StopRecordAsync()

Останавливает запись.

StopRecordWithResultAsync()

Асинхронно останавливает запись мультимедиа и предоставляет MediaCaptureStopResult возможность использования, чтобы помочь пользователю выровнять камеру с последним захваченным кадром при перезапуске записи.

События

CameraStreamStateChanged

Происходит при изменении состояния потока камеры.

CaptureDeviceExclusiveControlStatusChanged

Происходит при изменении состояния монопольного управления устройства захвата.

Failed

Возникает при возникновении ошибки во время захвата мультимедиа.

FocusChanged

Происходит при изменении фокуса устройства захвата.

PhotoConfirmationCaptured

Происходит при захвате кадра подтверждения фотографии.

RecordLimitationExceeded

Происходит при превышении предела записи.

ThermalStatusChanged

Происходит при изменении теплового состояния устройства захвата.

Применяется к

См. также раздел