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
- Наследование
- Атрибуты
- Реализации
Требования к 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 |
Происходит при изменении теплового состояния устройства захвата. |
Применяется к
См. также раздел
- Камера
- Основные принципы фото-, аудио- и видеозахвата с помощью MediaCapture
- Пример захвата мультимедиа
- Пример пользовательского интерфейса камеры
- Пример пользовательского интерфейса параметров камеры
- Пример перечисления устройств
- Пример обмена данными в режиме реального времени
- Пример расширения мультимедиа
- Поддерживаемые аудио- и видеоформаты
- Пример обмена данными в режиме реального времени (Windows 10)
- Пример предварительного просмотра кадра с камеры
- Пример стабилизации видео
- Пример захвата голографических Смешанная реальность