Поделиться через


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 Platform::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.

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

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

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

Метод InitializeAsync , который инициализирует объект MediaCapture , необходимо вызвать, прежде чем можно будет начать предварительный просмотр или запись с устройства. В приложениях C# или C++ первое использование объекта MediaCapture для вызова InitializeAsync должно быть в потоке STA. Вызовы из потока MTA могут привести к неопределенному поведению. InitializeAsync запустит запрос согласия, чтобы получить разрешение пользователя для приложения на доступ к микрофону или камере. Метод InitializeAsync должен вызываться из потока пользовательского интерфейса main приложения. Приложения должны обрабатывать приостановку или завершение работы приложения путем правильной очистки ресурсов захвата мультимедиа. Сведения о том, как правильно завершить работу объекта MediaCapture , см. в статье Основные функции фото, видео и аудиозахвата с помощью MediaCapture.

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

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

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

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

Windows 8 приложения UWP, которые объявили возможности веб-камеры и микрофона, не будут работать в 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, чтобы приложение получало уведомления при изменении относительного расположения панели.

Dispose()

Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов.

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

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

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

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