Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan cara menggunakan profil kamera untuk menemukan dan mengelola kemampuan perangkat pengambilan video yang berbeda. Ini termasuk tugas seperti memilih profil yang mendukung resolusi atau kecepatan bingkai tertentu, profil yang mendukung akses simultan ke beberapa kamera, dan profil yang mendukung HDR.
Tentang profil kamera
Kamera pada perangkat yang berbeda mendukung kemampuan yang berbeda termasuk serangkaian resolusi pengambilan yang didukung, kecepatan bingkai untuk pengambilan video, dan apakah HDR atau pengambilan kecepatan bingkai variabel didukung. Serangkaian kemampuan yang didukung didefinisikan dalam objek MediaCaptureVideoProfileMediaDescription . Profil kamera, yang diwakili oleh objek MediaCaptureVideoProfile , memiliki tiga koleksi deskripsi media; satu untuk pengambilan foto, satu untuk pengambilan video, dan satu lagi untuk pratinjau video.
Sebelum menginisialisasi objek MediaCapture , Anda dapat mengkueri perangkat pengambilan di perangkat saat ini untuk melihat profil apa yang didukung. Dengan memilih profil yang didukung, Anda dapat memastikan bahwa perangkat pengambilan mendukung semua kemampuan dalam deskripsi media dari profil tersebut. Ini menghilangkan kebutuhan akan pendekatan percobaan dan kesalahan untuk menentukan kombinasi kemampuan mana yang didukung pada perangkat tertentu.
Menemukan kamera yang mendukung profil kamera
Untuk menggunakan profil kamera, Anda harus terlebih dahulu memeriksa perangkat kamera yang mendukung penggunaan profil kamera. Contoh di bawah ini menunjukkan cara menggunakan metode DeviceInformation.FindAllAsync untuk mengambil daftar semua perangkat pengambilan video yang tersedia di panel depan atau belakang perangkat saat ini. Melalui semua perangkat dalam daftar, memanggil metode statis, IsVideoProfileSupported, untuk setiap perangkat guna memeriksa apakah perangkat tersebut mendukung profil video.
Jika perangkat yang mendukung profil kamera ditemukan di panel yang ditentukan, nilai Id , yang berisi string ID perangkat, dikembalikan.
public async Task<string> GetVideoProfileSupportedDeviceIdAsync(Windows.Devices.Enumeration.Panel panel)
{
string deviceId = string.Empty;
// Finds all video capture devices
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
foreach (var device in devices)
{
// Check if the device on the requested panel supports Video Profile
if (MediaCapture.IsVideoProfileSupported(device.Id) && device.EnclosureLocation.Panel == panel)
{
// We've located a device that supports Video Profiles on expected panel
deviceId = device.Id;
break;
}
}
return deviceId;
}
Jika ID perangkat yang dikembalikan dari metode pembantu GetVideoProfileSupportedDeviceIdAsync adalah null atau string kosong, tidak ada perangkat pada panel yang ditentukan yang mendukung profil kamera. Dalam hal ini, Anda harus menginisialisasi perangkat penangkapan media tanpa menggunakan profil.
string videoDeviceId = await GetVideoProfileSupportedDeviceIdAsync(Windows.Devices.Enumeration.Panel.Back);
if (string.IsNullOrEmpty(videoDeviceId))
{
// No devices on the specified panel support video profiles. .
return;
}
Pilih profil berdasarkan resolusi dan kecepatan bingkai yang didukung
Untuk memilih profil dengan kemampuan tertentu, seperti dengan kemampuan untuk mencapai resolusi dan kecepatan bingkai tertentu, gunakan metode yang ditunjukkan sebelumnya dalam artikel ini untuk mendapatkan ID perangkat tangkapan yang mendukung penggunaan profil kamera.
Buat objek MediaCaptureInitializationSettings baru dengan ID perangkat yang dipilih. Panggil metode statis MediaCapture.FindAllVideoProfiles untuk mendapatkan daftar semua profil kamera yang didukung oleh perangkat.
Contoh ini memilih profil yang berisi objek SupportedRecordMediaDescription di mana properti Lebar, Tinggi, dan FrameRate cocok dengan nilai yang diminta. Jika kecocokan ditemukan, VideoProfile dan RecordMediaDescription dari MediaCaptureInitializationSettings diatur ke nilai yang dikembalikan dari kueri. Jika tidak ada kecocokan yang ditemukan, profil default akan digunakan.
var mediaInitSettings = new MediaCaptureInitializationSettings { VideoDeviceId = videoDeviceId };
IReadOnlyList<MediaCaptureVideoProfile> profiles = MediaCapture.FindAllVideoProfiles(videoDeviceId);
var match = (from profile in profiles
from desc in profile.SupportedRecordMediaDescription
where desc.Width == 640 && desc.Height == 480 && Math.Round(desc.FrameRate) == 30
select new { profile, desc }).FirstOrDefault();
if (match != null)
{
mediaInitSettings.VideoProfile = match.profile;
mediaInitSettings.RecordMediaDescription = match.desc;
}
else
{
// Could not locate a WVGA 30FPS profile, use default video recording profile
mediaInitSettings.VideoProfile = profiles[0];
}
Setelah Anda mengisi MediaCaptureInitializationSettings dengan profil kamera yang Anda inginkan, Anda cukup memanggil InitializeAsync pada objek pengambilan media Anda untuk mengonfigurasinya ke profil yang diinginkan.
await m_mediaCapture.InitializeAsync(mediaInitSettings);
Pilih perangkat dengan KnownVideoProfile
Anda dapat menggunakan kelas MediaFrameSourceGroup untuk mendapatkan profil kamera dengan kemampuan tertentu sebelum menginisialisasi objek MediaCapture . Grup sumber bingkai memungkinkan produsen perangkat untuk mewakili grup sensor atau kemampuan pengambilan sebagai satu perangkat virtual. Ini memungkinkan skenario fotografi komputasi seperti menggunakan kamera kedalaman dan warna bersama-sama, tetapi juga dapat digunakan untuk memilih profil kamera untuk skenario pengambilan sederhana. Untuk informasi selengkapnya tentang menggunakan MediaFrameSourceGroup, lihat Memproses bingkai media dengan MediaFrameReader.
Contoh di bawah ini menunjukkan cara menggunakan MediaFrameSourceGroup untuk menemukan profil kamera yang mendukung yang mendukung skenario yang diinginkan. Panggil MediaFrameSourceGroup.FindAllAsync untuk mendapatkan daftar semua grup sumber bingkai media yang tersedia di perangkat saat ini. Perulangan melalui setiap grup sumber dan panggil MediaCapture.FindKnownVideoProfiles untuk mendapatkan daftar semua profil video untuk grup sumber saat ini yang mendukung KnownCameraProfile yang ditentukan, dalam contoh ini nilai KnownVideoProfile.HighQualityPhoto digunakan. Nilai lain termasuk dukungan untuk HDR dan urutan foto variabel, misalnya. Jika profil yang memenuhi kriteria yang diminta ditemukan, buat objek MediaCaptureInitializationSettings baru dan atur VideoProfile ke profil pilih dan VideoDeviceId ke properti Id dari grup sumber bingkai media saat ini. Gunakan objek MediaCaptureInitializationSettings ini untuk menginisialisasi objek MediaCapture .
IReadOnlyList<MediaFrameSourceGroup> sourceGroups = await MediaFrameSourceGroup.FindAllAsync();
MediaCaptureInitializationSettings settings = null;
foreach (MediaFrameSourceGroup sg in sourceGroups)
{
IReadOnlyList<MediaCaptureVideoProfile> profileList = MediaCapture.FindKnownVideoProfiles(
sg.Id,
KnownVideoProfile.HighQualityPhoto);
if (profileList.Count > 0)
{
settings = new MediaCaptureInitializationSettings();
settings.VideoProfile = profileList[0];
settings.VideoDeviceId = sg.Id;
break;
}
}
Menentukan apakah perangkat mendukung pengambilan foto dan video secara bersamaan
Banyak perangkat mendukung pengambilan foto dan video secara bersamaan. Untuk menentukan apakah perangkat pengambilan mendukung ini, panggil MediaCapture.FindAllVideoProfiles untuk mendapatkan semua profil kamera yang didukung oleh perangkat. Gunakan kueri tautan untuk menemukan profil yang memiliki setidaknya satu entri untuk SupportedPhotoMediaDescription dan SupportedRecordMediaDescription yang berarti bahwa profil mendukung pengambilan simultan.
bool simultaneousPhotoAndVideoSupported = false;
IReadOnlyList<MediaCaptureVideoProfile> profiles = MediaCapture.FindAllVideoProfiles(videoDeviceId);
var match = (from profile in profiles
where profile.SupportedPhotoMediaDescription.Any() &&
profile.SupportedRecordMediaDescription.Any()
select profile).FirstOrDefault();
if (match != null)
{
// Simultaneous photo and video supported
simultaneousPhotoAndVideoSupported = true;
}
else
{
// Simultaneous photo and video not supported
simultaneousPhotoAndVideoSupported = false;
}
Anda dapat menyempurnakan kueri ini untuk mencari profil yang mendukung resolusi tertentu atau kemampuan lain selain rekaman video simultan. Anda juga dapat menggunakan MediaCapture.FindKnownVideoProfiles dan menentukan nilai BalancedVideoAndPhoto untuk mengambil profil yang mendukung pengambilan simultan, tetapi mengkueri semua profil akan memberikan hasil yang lebih lengkap.
Topik terkait
Windows developer