Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhat kameraprofilokat a különböző videorögzítési eszközök képességeinek felderítésére és kezelésére. Ez olyan feladatokat is magában foglal, mint a meghatározott felbontásokat vagy képkockasebességeket támogató profilok kiválasztása, a több kamerához való egyidejű hozzáférést támogató profilok és a HDR-t támogató profilok.
Tudnivalók a kameraprofilokról
A különböző eszközök kamerái különböző képességeket támogatnak, beleértve a támogatott rögzítési felbontásokat, a videórögzítések képkockasebességét, valamint azt, hogy a HDR vagy a változó képkockasebesség-rögzítés támogatott-e. A támogatott képességek készlete egy MediaCaptureVideoProfileMediaDescription objektumban van definiálva. A MediaCaptureVideoProfile objektum által ábrázolt kameraprofil három médialeírás-gyűjteményből áll; az egyik a fényképrögzítéshez, egy a videófelvételhez, a másik pedig a videó előnézetéhez.
A MediaCapture-objektum inicializálása előtt lekérdezheti az aktuális eszközön lévő rögzítési eszközöket, hogy lássa, mely profilok támogatottak. Ha kiválaszt egy támogatott profilt, tudja, hogy a rögzítési eszköz támogatja a profil médialeírásaiban szereplő összes képességet. Így nincs szükség próbaverziós és hibakeresési megközelítésre annak meghatározásához, hogy az adott eszközön mely képességeket támogatja a rendszer.
Kameraprofilokat támogató kamera keresése
A kameraprofilok használatához először ellenőriznie kell, hogy van-e olyan kameraeszköz, amely támogatja a kameraprofilok használatát. Az alábbi példa bemutatja, hogyan használhatja a DeviceInformation.FindAllAsync metódust az összes rendelkezésre álló videorögzítési eszköz listájának lekéréséhez az aktuális eszköz előlapján vagy hátlapján. A lista összes eszközén végighalad, és meghívja az IsVideoProfileSupported statikus metódust, hogy ellenőrizze, támogatja-e a videóprofilokat.
Ha egy kameraprofilokat támogató eszköz található a megadott panelen, a rendszer visszaadja az eszköz azonosító sztringjét tartalmazó azonosítóértéket .
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;
}
Ha a GetVideoProfileSupportedDeviceIdAsync segédmetódusból visszaadott eszközazonosító null értékű vagy üres sztring, a megadott panelen nincs olyan eszköz, amely támogatja a kameraprofilokat. Ebben az esetben profilok használata nélkül kell inicializálnia a médiarögzítő eszközt.
string videoDeviceId = await GetVideoProfileSupportedDeviceIdAsync(Windows.Devices.Enumeration.Panel.Back);
if (string.IsNullOrEmpty(videoDeviceId))
{
// No devices on the specified panel support video profiles. .
return;
}
Profil kiválasztása a támogatott felbontás és a keretsebesség alapján
Ha olyan profilt szeretne kiválasztani, amely bizonyos képességekkel rendelkezik, például egy adott felbontás és képkockasebesség elérésére, használja a cikkben korábban bemutatott módszert egy olyan rögzítőeszköz azonosítójának lekéréséhez, amely támogatja a kameraprofilok használatát.
Hozzon létre egy új MediaCaptureInitializationSettings objektumot, amely a kijelölt eszközazonosítót adja át. Hívja meg a MediaCapture.FindAllVideoProfiles statikus metódust az eszköz által támogatott összes kameraprofil listájának lekéréséhez.
Ez a példa kiválaszt egy olyan profilt, amely egy SupportedRecordMediaDescription objektumot tartalmaz, ahol a Szélesség, Magasság és FrameRate tulajdonságok megfelelnek a kért értékeknek. Ha talál egyezést, a MediaCaptureInitializationSettingsVideoProfile és RecordMediaDescription értéke a lekérdezésből visszaadott értékekre lesz beállítva. Ha nem található egyezés, a rendszer az alapértelmezett profilt használja.
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];
}
Miután feltöltötte a MediaCaptureInitializationSettingst a kívánt kameraprofillal, egyszerűen hívja meg az InitializeAsync-et a médiarögzítési objektumon, hogy konfigurálja a kívánt profilra.
await m_mediaCapture.InitializeAsync(mediaInitSettings);
Eszközök kiválasztása a KnownVideoProfile használatával
A MediaFrameSourceGroup osztály használatával a MediaCapture objektum inicializálása előtt lekérheti az adott képességekkel rendelkező kameraprofilokat. A keretforráscsoportok lehetővé teszik az eszközgyártók számára, hogy érzékelők csoportjait képviseljenek, vagy hogy egyetlen virtuális eszközként rögzítsék a képességeket. Ez lehetővé teszi a számítási fotózási forgatókönyveket, például a mélység- és színkamerák együttes használatát, de a kameraprofilok egyszerű rögzítési forgatókönyvekhez való kiválasztására is használható. További információ a MediaFrameSourceGroup használatáról: Médiakeretek feldolgozása a MediaFrameReaderrel.
Az alábbi példa bemutatja, hogyan kereshet olyan kameraprofilt a MediaFrameSourceGroup használatával, amely támogatja a kívánt forgatókönyvet. Hívja meg a MediaFrameSourceGroup.FindAllAsync parancsot az aktuális eszközön elérhető összes médiakeret-forráscsoport listájának lekéréséhez. Futtasson végig az egyes forráscsoportokon, és hívja meg a MediaCapture.FindKnownVideoProfiles parancsot, hogy lekérje a megadott KnownCameraProfile-t támogató aktuális forráscsoport összes videoprofiljának listáját. Ebben a példában a KnownVideoProfile.HighQualityPhoto értéket használjuk. Egyéb értékek például a HDR és a változó fotósorozatok támogatása. Ha a kért feltételeknek megfelelő profilt talál, hozzon létre egy új MediaCaptureInitializationSettings objektumot, és állítsa a VideoProfile-t a kiválasztási profilra, a VideoDeviceId azonosítót pedig az aktuális médiakeret-forráscsoport Azonosító tulajdonságára. Ezzel a MediaCaptureInitializationSettings objektummal inicializálhatja a MediaCapture objektumot.
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;
}
}
Annak megállapítása, hogy egy eszköz támogatja-e az egyidejű fénykép- és videofelvételt
Számos eszköz támogatja a fényképek és videók egyidejű rögzítését. Annak megállapításához, hogy egy rögzítőeszköz támogatja-e ezt, hívja meg a MediaCapture.FindAllVideoProfiles-t , hogy megkapja az eszköz által támogatott összes kameraprofilt. Hivatkozáslekérdezéssel olyan profilt kereshet, amely legalább egy bejegyzéssel rendelkezik mind a SupportedPhotoMediaDescription , mind a SupportedRecordMediaDescription esetében, ami azt jelenti, hogy a profil támogatja az egyidejű rögzítést.
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;
}
Ezt a lekérdezést finomíthatja, hogy olyan profilokat keressen, amelyek támogatják az adott megoldásokat vagy egyéb képességeket az egyidejű videorekord mellett. Használhatja a MediaCapture.FindKnownVideoProfiles értéket is, és megadhatja a BalancedVideoAndPhoto értéket az egyidejű rögzítést támogató profilok lekéréséhez, de az összes profil lekérdezése teljesebb eredményeket biztosít.
Kapcsolódó témakörök
Windows developer