MediaCapture Kelas

Definisi

Menyediakan fungsionalitas untuk mengambil foto, audio, dan video dari perangkat pengambilan, seperti webcam.

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
Warisan
Object Platform::Object IInspectable MediaCapture
Atribut
Penerapan

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)
Kemampuan aplikasi
backgroundMediaRecording microphone webcam

Contoh

Contoh kode berikut menunjukkan cara membuat dan menginisialisasi objek 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();
}

Untuk informasi tentang cara menangani penangguhan, lihat Menangani penangguhan aplikasi.

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

Keterangan

Kelas MediaCapture digunakan untuk mengambil audio, video, dan gambar dari kamera. Untuk panduan cara menampilkan pratinjau kamera, lihat Menampilkan pratinjau kamera. Untuk mulai mengambil foto, audio, atau video dengan cepat, lihat Pengambilan foto, video, dan audio dasar dengan MediaCapture.

Halaman Kamera adalah hub utama untuk panduan cara menggunakan MediaCapture di aplikasi Anda. Selain tugas kamera dasar, halaman ini menautkan ke artikel petunjuk untuk skenario tingkat lanjut termasuk:

  • Menggunakan tombol kamera perangkat keras pada perangkat yang memilikinya
  • Menangani orientasi perangkat dan layar
  • Menggunakan profil kamera untuk menentukan kemampuan perangkat
  • Mengatur format, resolusi, dan kecepatan bingkai video yang diambil
  • Menggunakan AdvancedPhotoCapture untuk mengambil foto HDR atau low-light
  • Menggunakan VideoDeviceController untuk mengakses kontrol kamera manual seperti pencahayaan, keseimbangan putih, fokus otomatis, dan lampu kilat
  • Menggunakan efek saat mengambil video
  • Menangkap urutan foto
  • Menggunakan MediaFrameReader untuk mendapatkan aliran bingkai dari satu atau beberapa kamera, termasuk kamera rgb, inframerah, dan kedalaman
  • Mendapatkan bingkai dari aliran pratinjau

Artikel Kamera juga menautkan ke semua sampel UWP SDK untuk kamera, seperti sampel Kit starter kamera .

Metode InitializeAsync , yang menginisialisasi objek MediaCapture , harus dipanggil sebelum Anda dapat mulai mempratinjau atau menangkap dari perangkat. Di aplikasi C# atau C++, penggunaan pertama objek MediaCapture untuk memanggil InitializeAsync harus berada di utas STA. Panggilan dari utas MTA dapat mengakibatkan perilaku yang tidak terdefinisi. InitializeAsync akan meluncurkan permintaan persetujuan untuk mendapatkan izin pengguna agar aplikasi dapat mengakses mikrofon atau kamera. InitializeAsync harus dipanggil dari utas UI utama aplikasi Anda. Aplikasi harus menangani penangguhan atau penghentian aplikasi dengan membersihkan sumber daya pengambilan media dengan benar. Untuk informasi tentang mematikan objek MediaCapture dengan benar, lihat Pengambilan foto, video, dan audio dasar dengan MediaCapture.

Di Windows, aplikasi pengambilan musik dan media harus memantau SystemMediaTransportControls.SoundLevel untuk menentukan apakah aliran audio pada aplikasi telah Dimatikan Suaranya. Untuk aplikasi yang menggunakan objek MediaCapture, pengambilan akan dihentikan secara otomatis saat aliran pengambilan aplikasi dibisukan. Capture tidak dimulai ulang secara otomatis saat aliran audio dinyalakan, sehingga pemberitahuan yang diubah SoundLevel dapat digunakan untuk memulai ulang pengambilan. Gunakan peristiwa SystemMediaTransportControls.PropertyChanged untuk menentukan kapan properti SoundLevel berubah.

Untuk aplikasi Windows Phone 8.x, aplikasi musik dan media harus membersihkan objek MediaCapture dan sumber daya terkait di penanganan aktivitas Penangguhan dan membuatnya kembali di Penanganan aktivitas.

Di aplikasi audio Windows 8.1 saja, jika pengaturan MediaCategoryadalah Lainnya, mode latensi tinggi akan digunakan. Untuk latensi rendah, atur pengaturan MediaCategory ke Komunikasi.

Menambahkan efek Transformasi Media Foundation pengeditan di tempat ke pratinjau pengambilan tidak akan berpengaruh pada aliran.

Windows 8 aplikasi UWP yang telah menyatakan kemampuan webcam dan mikrofon tidak akan berfungsi di Windows 8.1 jika pengguna belum mengaktifkan pengaturan privasi webcam dan mikrofon.

MediaCapture hanya mendukung satu pengodean CBR pass.

Catatan tentang JPEG: Jenis JPEG hanya passthrough. Untuk mengambil gambar, profil pengodean gambar dapat diatur ke Otomatis atau Anda perlu menentukan profil pengodean yang cocok dengan jenis asli. Untuk menambahkan efek, Anda perlu beralih ke jenis media asli video yang tidak dikompresi, seperti NV12 atau RGB32.

Catatan tentang H.264: Jika jenis aslinya adalah H.264, Anda dapat merekam menggunakan jenis media video dengan jenis yang identik dengan jenis asli. Anda tidak dapat menambahkan efek ke aliran jenis asli H.264. Untuk mengambil video, profil pengodean gambar dapat diatur ke Otomatis atau Anda perlu menentukan profil pengodean yang cocok dengan jenis asli.

Catatan

Kelas ini tidak tangkas, yang berarti Anda perlu mempertimbangkan model utas dan perilaku marshalingnya. Untuk informasi selengkapnya, lihat Threading dan Marshaling (C++/CX) dan Menggunakan objek Windows Runtime di lingkungan multithreaded (.NET).

Riwayat versi

Versi Windows Versi SDK Nilai ditambahkan
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

Konstruktor

MediaCapture()

Membuat instans baru objek MediaCapture .

Properti

AudioDeviceController

Mendapatkan objek yang mengontrol pengaturan untuk mikrofon.

CameraStreamState

Mendapatkan status aliran aliran saat ini dari aliran kamera.

FrameSources

Mendapatkan kamus baca-saja objek MediaFrameSource yang dapat digunakan secara bersamaan untuk memperoleh bingkai media.

MediaCaptureSettings

Mendapatkan pengaturan konfigurasi untuk objek MediaCapture .

ThermalStatus

Mendapatkan nilai yang menunjukkan status termal perangkat tangkapan saat ini.

VideoDeviceController

Mendapatkan objek yang mengontrol pengaturan untuk kamera video.

Metode

AddAudioEffectAsync(IAudioEffectDefinition)

Menambahkan efek audio ke alur pengambilan.

AddEffectAsync(MediaStreamType, String, IPropertySet)

Menambahkan efek audio atau video.

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

Menambahkan efek video ke alur pengambilan.

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

Mengambil foto ke file penyimpanan.

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

Mengambil foto ke aliran akses acak.

ClearEffectsAsync(MediaStreamType)

Menghapus semua efek audio dan video dari aliran.

Close()

Menutup objek pengambilan media.

CreateFrameReaderAsync(MediaFrameSource)

Membuat MediaFrameReader yang digunakan untuk memperoleh bingkai dari MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String)

Membuat MediaFrameReader yang digunakan untuk memperoleh bingkai dengan subjenis pengodean media yang ditentukan dari MediaFrameSource.

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

Membuat MediaFrameReader yang digunakan untuk memperoleh bingkai dengan subjenis dan ukuran pengodean media yang ditentukan dari MediaFrameSource.

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

Membuat MultiSourceMediaFrameReader yang digunakan untuk memperoleh bingkai berkorelasi waktu dari satu atau beberapa objek MediaFrameSource .

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

Membuat instans baru kelas MediaCaptureRelativePanelWatcher , yang memantau panel yang terkait dengan DisplayRegion yang disediakan, sehingga aplikasi menerima pemberitahuan ketika lokasi relatif panel berubah.

Dispose()

Melakukan tugas yang ditentukan aplikasi yang terkait dengan membebaskan, merilis, atau mengatur ulang sumber daya yang tidak dikelola.

FindAllVideoProfiles(String)

Mengambil daftar semua profil video yang didukung oleh perangkat pengambilan video yang ditentukan.

FindConcurrentProfiles(String)

Mengambil daftar profil video yang didukung oleh perangkat pengambilan video yang ditentukan yang dapat digunakan saat profil lain digunakan pada perangkat pengambilan yang berbeda.

FindKnownVideoProfiles(String, KnownVideoProfile)

Mengambil daftar semua profil video yang didukung oleh perangkat pengambilan video yang ditentukan yang cocok dengan nilai KnownVideoProfile yang ditentukan.

GetEncoderProperty(MediaStreamType, Guid)

Mendapatkan nilai properti pengodean.

GetPreviewFrameAsync()

Mendapatkan bingkai pratinjau dari perangkat pengambilan.

GetPreviewFrameAsync(VideoFrame)

Mendapatkan bingkai pratinjau dari perangkat pengambilan, disalin ke tujuan yang disediakan VideoFrame dan dikonversi ke format bingkai tujuan.

GetPreviewMirroring()

Mengkueri apakah aliran video dicerminkan secara horizontal.

GetPreviewRotation()

Mendapatkan rotasi aliran pratinjau video.

GetRecordRotation()

Mendapatkan rotasi video yang direkam.

InitializeAsync()

Menginisialisasi objek MediaCapture , menggunakan pengaturan default.

InitializeAsync(MediaCaptureInitializationSettings)

Menginisialisasi objek MediaCapture .

IsVideoProfileSupported(String)

Mendapatkan nilai boolean yang menunjukkan apakah profil video didukung oleh perangkat pengambilan video yang ditentukan.

PauseRecordAsync(MediaCapturePauseBehavior)

Menjeda operasi rekaman yang sedang berlangsung.

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

Menjeda operasi rekaman media yang sedang berlangsung dan menyediakan MediaCapturePauseResult yang dapat digunakan untuk membantu pengguna menyelaraskan kamera dengan bingkai terakhir yang diambil saat melanjutkan perekaman.

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

Menginisialisasi pengambilan foto tingkat lanjut dan menyediakan objek AdvancedPhotoCapture yang digunakan untuk mengelola rekaman.

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

Menginisialisasi pengambilan foto jeda rana rendah dan menyediakan objek LowLagPhotoCapture yang digunakan untuk mengelola rekaman.

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

Menginisialisasi pengambilan urutan foto jeda rana rendah dan menyediakan objek LowLagPhotoSequenceCapture yang digunakan untuk mengelola perekaman.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Menginisialisasi rekaman jeda rendah menggunakan sink kustom yang ditentukan untuk menyimpan rekaman. Metode ini menyediakan objek LowLagMediaRecording yang digunakan untuk mengelola pengambilan.

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Menginisialisasi rekaman jeda rendah menggunakan sink kustom yang ditentukan untuk menyimpan rekaman. Metode ini menyediakan objek LowLagMediaRecording yang digunakan untuk mengelola rekaman.

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Menginisialisasi rekaman jeda rendah menggunakan file yang ditentukan untuk menyimpan rekaman. Metode ini menyediakan objek LowLagMediaRecording yang digunakan untuk mengelola rekaman.

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Menginisialisasi rekaman jeda rendah menggunakan aliran akses acak yang ditentukan untuk menyimpan rekaman. Metode ini menyediakan objek LowLagMediaRecording yang digunakan untuk mengelola rekaman.

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

Menginisialisasi pengambilan urutan foto variabel dan menyediakan objek VariablePhotoSequenceCapture yang digunakan untuk mengelola rekaman.

RemoveEffectAsync(IMediaExtension)

Menghapus efek yang ditentukan dari alur pengambilan.

ResumeRecordAsync()

Melanjutkan operasi perekaman yang dijeda.

SetEncoderProperty(MediaStreamType, Guid, Object)

Mengatur properti pengodean.

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

Secara asinkron mengatur properti pengodean media.

SetPreviewMirroring(Boolean)

Mengaktifkan atau menonaktifkan pencerminan horizontal dari aliran pratinjau video. Ini bukan metode yang disukai untuk pencerminan. Lihat bagian Keterangan di bawah ini untuk detailnya.

SetPreviewRotation(VideoRotation)

Memutar aliran pratinjau video.

SetRecordRotation(VideoRotation)

Memutar video yang direkam.

StartPreviewAsync()

Memulai pratinjau.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Mulai mengirim aliran pratinjau ke sink media kustom menggunakan profil pengodean yang ditentukan.

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Mulai mengirim aliran pratinjau ke sink media kustom menggunakan profil pengodean dan pengaturan sink yang ditentukan.

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

Mulai merekam ke sink media kustom menggunakan profil pengodean yang ditentukan.

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

Mulai merekam ke sink media kustom menggunakan profil pengodean dan pengaturan sink yang ditentukan.

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

Mulai merekam secara asinkron ke file penyimpanan.

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

Mulai merekam ke aliran akses acak.

StopPreviewAsync()

Menghentikan pratinjau.

StopRecordAsync()

Berhenti merekam.

StopRecordWithResultAsync()

Secara asinkron menghentikan perekaman media dan menyediakan MediaCaptureStopResult yang dapat digunakan untuk membantu pengguna menyelaraskan kamera dengan bingkai terakhir yang diambil saat memulai ulang perekaman.

Acara

CameraStreamStateChanged

Terjadi ketika status aliran kamera berubah.

CaptureDeviceExclusiveControlStatusChanged

Terjadi ketika status kontrol eksklusif perangkat tangkapan berubah.

Failed

Muncul ketika terjadi kesalahan selama pengambilan media.

FocusChanged

Terjadi ketika perangkat pengambilan berubah fokus.

PhotoConfirmationCaptured

Terjadi ketika bingkai konfirmasi foto diambil.

RecordLimitationExceeded

Terjadi ketika batas rekaman terlampaui.

ThermalStatusChanged

Terjadi ketika status termal perangkat tangkapan berubah.

Berlaku untuk

Lihat juga