다음을 통해 공유


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를 사용하여 기본 사진, 비디오 및 오디오 캡처를 참조하세요.

카메라 페이지는 앱에서 MediaCapture를 사용하기 위한 방법 지침에 대한 기본 허브입니다. 이 페이지는 기본 카메라 작업 외에도 다음을 비롯한 고급 시나리오에 대한 방법 문서에 연결됩니다.

  • 디바이스에 하드웨어 카메라 단추 사용
  • 디바이스 및 화면 방향 처리
  • 카메라 프로필을 사용하여 디바이스 기능 확인
  • 캡처된 비디오의 형식, 해상도 및 프레임 속도 설정
  • AdvancedPhotoCapture를 사용하여 HDR 또는 저조도 사진 캡처
  • VideoDeviceController를 사용하여 노출, 흰색 균형, 자동 초점 및 플래시와 같은 수동 카메라 컨트롤에 액세스
  • 비디오를 캡처하는 동안 효과 사용
  • 사진 시퀀스 캡처
  • MediaFrameReader를 사용하여 rgb, 적외선 및 깊이 카메라를 포함하여 하나 이상의 카메라에서 프레임 스트림을 가져옵니다.
  • 미리 보기 스트림에서 프레임 가져오기

카메라 문서는 카메라시작 키트 샘플과 같은 카메라에 대한 모든 UWP SDK 샘플에도 연결됩니다.

MediaCapture 개체를 초기화하는 InitializeAsync 메서드를 호출해야 디바이스에서 미리 보기 또는 캡처를 시작할 수 있습니다. C# 또는 C++ 앱에서 InitializeAsync를 호출하는 MediaCapture 개체의 첫 번째 사용은 STA 스레드에 있어야 합니다. MTA 스레드에서 호출하면 정의되지 않은 동작이 발생할 수 있습니다. InitializeAsync 는 앱이 마이크 또는 카메라에 액세스할 수 있는 사용자의 권한을 얻기 위해 동의 프롬프트를 시작합니다. 앱의 기본 UI 스레드에서 InitializeAsync를 호출해야 합니다. 앱은 미디어 캡처 리소스를 제대로 정리하여 앱 일시 중단 또는 종료를 처리해야 합니다. MediaCapture 개체를 올바르게 종료하는 방법에 대한 자세한 내용은 MediaCapture를 사용하여 기본 사진, 비디오 및 오디오 캡처를 참조하세요.

Windows에서 음악 및 미디어 캡처 앱은 SystemMediaTransportControls.SoundLevel 을 모니터링하여 앱의 오디오 스트림이 음소거되었는지 여부를 확인해야 합니다. MediaCapture 개체를 사용하는 앱의 경우 앱의 캡처 스트림이 음소거되면 캡처가 자동으로 중지됩니다. 오디오 스트림이 음소거되지 않은 경우 캡처가 자동으로 다시 시작되지 않으므로 SoundLevel 변경 알림을 사용하여 캡처를 다시 시작할 수 있습니다. SystemMediaTransportControls.PropertyChanged 이벤트를 사용하여 SoundLevel 속성이 변경되는 시기를 확인합니다.

Windows Phone 8.x 앱의 경우 음악 및 미디어 앱은 Suspending 이벤트 처리기에서 MediaCapture 개체 및 관련 리소스를 클린 다시 시작 이벤트 처리기에서 다시 만들어야 합니다.

Windows 8.1 오디오 전용 앱에서 MediaCategory 설정이 기타이면 대기 시간이 긴 모드가 사용됩니다. 짧은 대기 시간의 경우 MediaCategory 설정을 Communications로 설정합니다.

캡처 미리 보기에 현재 위치 편집 미디어 파운데이션 변환 효과를 추가해도 스트림에는 영향을 주지 않습니다.

웹캠 및 마이크 기능을 모두 선언한 Windows 8 UWP 앱은 사용자가 웹캠 및 마이크 개인 정보 설정을 모두 사용하도록 설정하지 않은 경우 Windows 8.1 작동하지 않습니다.

MediaCapture는 하나의 패스 CBR 인코딩만 지원합니다.

JPEG에 대한 참고 사항: JPEG 형식은 통과에만 해당합니다. 이미지를 캡처하려면 이미지 인코딩 프로필을 Auto로 설정하거나 네이티브 형식과 일치하는 인코딩 프로필을 지정해야 합니다. 효과를 추가하려면 NV12 또는 RGB32와 같은 압축되지 않은 비디오 네이티브 미디어 유형으로 전환해야 합니다.

H.264에 대한 참고 사항: 네이티브 형식이 H.264인 경우 네이티브 형식과 동일한 형식의 비디오 미디어 형식을 사용하여 녹화할 수 있습니다. H.264 네이티브 형식 스트림에 효과를 추가할 수 없습니다. 비디오를 캡처하려면 이미지 인코딩 프로필을 Auto로 설정하거나 네이티브 형식과 일치하는 인코딩 프로필을 지정해야 합니다.

참고

이 클래스는 민첩하지 않으므로 스레딩 모델 및 마샬링 동작을 고려해야 합니다. 자세한 내용은 스레딩 및 마샬링(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 개체의 새 instance 만듭니다.

속성

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)

MediaFrameSource에서 프레임을 획득하는 데 사용되는 MediaFrameReader를 만듭니다.

CreateFrameReaderAsync(MediaFrameSource, String)

MediaFrameSource에서 지정된 미디어 인코딩 하위 형식을 사용하여 프레임을 획득하는 데 사용되는 MediaFrameReader를 만듭니다.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

MediaFrameSource에서 지정된 미디어 인코딩 하위 형식 및 크기로 프레임을 획득하는 데 사용되는 MediaFrameReader를 만듭니다.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

하나 이상의 MediaFrameSource 개체에서 시간 상관 프레임을 획득하는 데 사용되는 MultiSourceMediaFrameReader를 만듭니다.

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

제공된 DisplayRegion과 연결된 패널을 모니터링하여 패널의 상대 위치가 변경될 때 앱이 알림을 받을 수 있도록 MediaCaptureRelativePanelWatcher 클래스의 새 instance 만듭니다.

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

캡처 디바이스의 열 상태 변경되면 발생합니다.

적용 대상

추가 정보