Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, farklı video yakalama cihazlarının özelliklerini keşfetmek ve yönetmek için kamera profillerinin nasıl kullanılacağı gösterilmektedir. Bu, belirli çözünürlükleri veya kare hızlarını destekleyen profilleri seçme, birden çok kameraya eşzamanlı erişimi destekleyen profiller ve HDR'yi destekleyen profiller gibi görevleri içerir.
Kamera profilleri hakkında
Farklı cihazlardaki kameralar desteklenen yakalama çözünürlükleri kümesi, video yakalamalar için kare hızı ve HDR veya değişken kare hızı yakalamalarının desteklenip desteklenmediği gibi farklı özellikleri destekler. Desteklenen özellikler kümesi, MediaCaptureVideoProfileMediaDescription nesnesinde tanımlanır. MediaCaptureVideoProfile nesnesiyle temsil edilen kamera profilinin üç medya açıklaması koleksiyonu vardır; biri fotoğraf yakalama, diğeri video yakalama ve diğeri de video önizlemesi için.
MediaCapture nesnenizi başlatmadan önce, hangi profillerin desteklendiğine bakmak için geçerli cihazdaki yakalama cihazlarını sorgulayabilirsiniz. Desteklenen bir profil seçtiğinizde, yakalama cihazının profilin medya açıklamalarındaki tüm özellikleri desteklediğini bilirsiniz. Bu, belirli bir cihazda hangi özellik bileşimlerinin desteklendiğine karar vermek için deneme ve hata yaklaşımı gereksinimini ortadan kaldırır.
Kamera profillerini destekleyen bir kamera bulma
Kamera profillerini kullanmak için önce kamera profillerinin kullanımını destekleyen bir kamera cihazı olup olmadığını denetlemeniz gerekir. Aşağıdaki örnekte, geçerli cihazın ön veya arka panelindeki tüm kullanılabilir video yakalama cihazlarının listesini almak için DeviceInformation.FindAllAsync yönteminin nasıl kullanılacağı gösterilmektedir. Her cihazın video profillerini desteklenip desteklemediğini görmek için isVideoProfileSupported
Belirtilen panelde kamera profillerini destekleyen bir cihaz bulunursa, cihazın kimlik dizesini içeren Kimliği değeri döndürülür.
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;
}
GetVideoProfileSupportedDeviceIdAsync yardımcı yönteminin
string videoDeviceId = await GetVideoProfileSupportedDeviceIdAsync(Windows.Devices.Enumeration.Panel.Back);
if (string.IsNullOrEmpty(videoDeviceId))
{
// No devices on the specified panel support video profiles. .
return;
}
Desteklenen çözünürlük ve kare hızına göre bir profil seçin
Belirli bir çözünürlük ve kare hızı elde etme gibi belirli özelliklere sahip bir profil seçmek için, kamera profillerini kullanmayı destekleyen bir yakalama cihazının kimliğini almak için bu makalede daha önce gösterilen yöntemi kullanın.
Yeni bir MediaCaptureInitializationSettings nesnesi oluşturun ve seçili cihaz kimliğini geçirin. Cihaz tarafından desteklenen tüm kamera profillerinin listesini almak için MediaCapture.FindAllVideoProfiles
Bu örnekte, Width, Heightve FrameRate özelliklerinin istenen değerlerle eşleştiği SupportedRecordMediaDescription nesnesi içeren bir profil seçilir. Eğer bir eşleşme bulunursa, VideoProfile ve RecordMediaDescription, MediaCaptureInitializationSettings, sorgudan döndürülen değerlere ayarlanır. Eşleşme bulunmazsa varsayılan profil kullanılır.
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];
}
MediaCaptureInitializationSettings
await m_mediaCapture.InitializeAsync(mediaInitSettings);
BilinenVideoProfile ile cihazları seçme
MediaCapture nesnesini başlatmadan önce belirli özelliklere sahip kamera profillerini almak için MediaFrameSourceGroup sınıfını kullanabilirsiniz. Çerçeve kaynak grupları, cihaz üreticilerinin algılayıcı gruplarını veya yakalama özelliklerini tek bir sanal cihaz olarak temsil etmelerini sağlar. Bu, derinlik ve renk kameralarını birlikte kullanma gibi hesaplamalı fotoğraf senaryolarına olanak tanır, ancak basit yakalama senaryoları için kamera profillerini seçmek için de kullanılabilir. MediaFrameSourceGroupkullanma hakkında daha fazla bilgi için bkz. MediaFrameReader ile medya çerçevelerini işleme.
Aşağıdaki örnekte, istenen senaryoyu destekleyen bir kamera profili bulmak için MediaFrameSourceGroup
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;
}
}
Bir cihazın eşzamanlı fotoğraf ve video yakalamayı destekleyip desteklemediğini belirleme
Birçok cihaz aynı anda fotoğraf ve video yakalamayı destekler. Yakalama cihazının bunu destekleyip desteklemediğini belirlemek için, cihaz tarafından desteklenen tüm kamera profillerini almak için MediaCapture.FindAllVideoProfiles
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;
}
Bu sorguyu, aynı anda video kaydına ek olarak belirli çözünürlükleri veya diğer özellikleri destekleyen profilleri aramak için geliştirebilirsiniz. MediaCapture.FindKnownVideoProfiles kullanabilir ve eşzamanlı yakalamayı destekleyen profilleri almak için BalancedVideoAndPhoto değerini belirtebilirsiniz, ancak tüm profilleri sorgulamak daha eksiksiz sonuçlar sağlar.
İlgili konular
- Kamera
- MediaCapture ile Temel fotoğraf, video ve ses yakalama
Windows developer