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