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.
Important
Bu makale kullanım dışıdır. Güncelleştirilmiş yönergeler için Cihaz MFT tasarım kılavuzuna bakın.
Important
Cihaz meta verileri kullanım dışıdır ve windows'un gelecek bir sürümünde kaldırılacaktır. Bu işlevin değiştirilmesi hakkında bilgi için bkz . Sürücü Paketi Kapsayıcı Meta Verileri.
UWP cihaz uygulamaları, cihaz üreticilerinin kamera sürücüsü MFT (media foundation dönüşümü) ile kameranın video akışına özel ayarlar ve özel efektler uygulamasına olanak sağlar. This article introduces driver MFTs and uses the Driver MFT sample to show how to create one. Genel olarak UWP cihaz uygulamaları hakkında daha fazla bilgi edinmek için bkz. UWP cihaz uygulamalarıyla tanışın.
Sürücü MFT
Bu bölümde, kameradan gelen medya yakalama akışına efektler uygulamak için oluşturduğunuz Media Foundation Dönüşümü (MFT) açıklanmaktadır. Bu dönüşüm, kameranızı diğerlerinden gerçekten ayıran renk efektleri, şema modları ve yüz izleme efektleri sağlar. Sürücü MFT olarak bilinen bu MFT, bir UWP uygulaması video yakalamaya başladığında ilk olarak kamera sürücüsünden gelen bağlı video akışına uygulanır. When that app invokes the Camera options UI, Windows automatically provides access to any interfaces the driver MFT implements for controlling its custom effects.
UWP cihaz uygulaması için Sürücü MFT'leri gerekli değildir. Bir cihaz üreticisi, video akışına özel ayarlar ve özel efektler uygulamadan donanımları için markalama içeren farklı bir kullanıcı arabirimi sağlamak için sürücü MFT olmadan bir UWP cihaz uygulaması uygulamayı seçebilir.
Sürücü MFT'leri nasıl kullanılır?
The UWP device app for a camera runs in a different process than the Microsoft Store app that invokes it from the CameraCaptureUI API. Microsoft Store cihaz uygulamasının bir sürücü MFT'sini denetlemesi için farklı işlem alanlarında belirli bir olay dizisi gerçekleşmelidir.
A UWP app wants to capture a photo, so it calls the CaptureFileAsync method
Windows, sürücü MFT işaretçisini ve kameranın cihaz kimliğini istemektedir
Sürücü MFT işaretçisi bir ayarlar konağına geçirilir
Konak, kamerayla ilişkilendirilmiş Microsoft Store cihaz uygulamasının uygulama kimliği için cihaz özelliklerini sorgular (cihaz meta verileri başına)
UWP cihaz uygulaması bulunmazsa varsayılan açılır öğe yakalama altyapısıyla etkileşim kurar
Bir UWP cihaz uygulaması bulunursa etkinleştirilir ve ayarlar konağı sürücü MFT işaretçisini ona geçirir
UWP cihaz uygulaması, işaretçi aracılığıyla kullanıma sunulan arabirimi kullanarak sürücü MFT'sini denetler
AvStream sürücü modeli gereksinimi
Kameranızın sürücüsü AvStream sürücü modelini kullanmalıdır. AVStream sürücü modeli hakkında daha fazla bilgi için bkz. AVStream MiniDrivers Tasarım Kılavuzu.
Sürücü MFT'sinin uygulamalara nasıl maruz kaldığı
Bir sürücü MFT, Windows'a COM arabirimi olarak kaydedilir, böylece uyguladığı dönüşüm, kamera gibi belirli bir cihazdan gelen medya akışına uygulanabilir.
Note
Bir sürücü MFT'sinin MFTRegister genel amaçlı bir MFT değil cihaza özgü olması nedeniyle işlevi kullanılarak kaydedilmemesi gerekir. Kayıt defteri anahtarı hakkında bilgi için bu makalenin devamında yer alan Sürücü MFT'sini yükleme ve kaydetme bölümüne bakın.
Bir uygulama bir video yakalama işlemi başlattığında, video akışını sağlamak için bir Media Foundation Kaynak Okuyucu örneği oluşturulur. Bu medya kaynağı, cihaz kayıt defteri anahtarından bir kayıt defteri değerini okur. Sürücü MFT'sinin COM sınıfının CLSID değeri kayıt defteri değerinde bulunursa, kaynak okuyucu sürücü MFT'sini başlatır ve medya işlem hattına ekler.
UWP cihaz uygulamalarına ek olarak, aşağıdaki API'leri kullanarak video yakalamak için kendisiyle ilişkilendirilmiş cihaz kullanıldığında sürücü MFT işlevine erişilebilir:
HTML kullanan bir UWP uygulamasında HTML5 <video> etiketleri. Sürücü MFT'sinin etkinleştirdiği dönüşümler, aşağıdaki kod örneğinde olduğu gibi video öğesi kullanılarak oynatılan videoyu <> etkiler:
var video = document.getElementById('myvideo'); video.src = URL.createObjectURL(fileItem); video.play();Windows Çalışma Zamanı'nı kullanan bir UWP uygulamasında Windows.Media.MediaCapture API'sini kullanın. For more info on how this API is used, see the Media Capture sample.
Medya verilerini işleyen uygulamalar için Media Foundation'ın Kaynak Okuyucusu. MFT sürücüsü, çağrılırken
IMFSourceReaderEx::GetTransformForStreamilk (0. ) MFT olarak uygulamalara sunulur. Döndürülen kategori:MFT_CATEGORY_VIDEO_EFFECT.
Multi-pin cameras
Üç pinli veya başka bir çok pinli kameranız varsa, bkz. Çok pinli kameralarda sürücü MFT'leri için dikkat edilmesi gerekenler.
Sürücü MFT uygulaması
Bu bölüm, sürücünüz MFT'yi uygulama hakkında bilgi sağlar. For a full example of a driver MFT that works together with a UWP device app, see the Driver MFT sample.
Development tools
Microsoft Visual Studio Professional veya Microsoft Visual Studio Ultimate gereklidir.
Sürücü MFT özellikleri
Sürücü MFT'sinin örneği akış başına oluşturulur. Kameranın desteklediği her akış için bir MFT örneği oluşturulur ve buna bağlanır. Sürücü MFT'sinin tek bir giriş akışına ve tek bir çıkış akışına sahip olması beklenir. MFT sürücüsü zaman uyumlu bir MFT veya zaman uyumsuz bir MFT olabilir.
Kamera ile sürücü MFT arasındaki iletişim
Medya kaynağı ile MFT sürücüsü arasında iki yönlü iletişimi etkinleştirmek için, kaynak akışın öznitelik deposuna yönelik işaretçi, sürücü MFT'sinin giriş akışı öznitelik deposunda olarak MFT_CONNECTED_STREAM_ATTRIBUTEayarlanır. Bu, aşağıdaki örnekte olduğu gibi sürücü MFT'sinde ortaya çıkarak MFT_ENUM_HARDWARE_URL_Attribute etkinleştirdiğiniz bir el sıkışma işlemiyle gerçekleşir:
HRESULT CDriverMft::GetAttributes(IMFAttributes** ppAttributes)
{
HRESULT hr = S_OK;
if (NULL == ppAttributes)
{
return E_POINTER;
};
if(!m_pGlobalAttributes) {
MFCreateAttributes(&m_pGlobalAttributes, 1);
m_pGlobalAttributes->
SetString(MFT_ENUM_HARDWARE_URL_Attribute, L"driverMFT");
}
*ppAttributes = m_pGlobalAttributes;
(*ppAttributes)->AddRef();
return S_OK;
}
Bu örnekte, MFT_CONNECTED_STREAM_ATTRIBUTE sürücü MFT'sinin öznitelik deposunda, cihaz kaynak akışının öznitelik deposuna işaret etmek üzere ayarlanmıştır. Kamera ile MFT arasındaki iletişimin nasıl ayarlandığı hakkında daha fazla bilgi için bkz. Donanım El Sıkışma Sırası .
Cihaz kaynağı bilgilerine erişme
Aşağıdaki kod örneği, sürücü MFT'sinin giriş öznitelik deposundan kaynak dönüştürme işaretçisini nasıl alabileceğini gösterir. Sürücü MFT daha sonra cihaz kaynak bilgilerini almak için kaynak işaretçisini kullanabilir.
if(!m_pSourceTransform && m_pInputAttributes) {
m_pInputAttributes->
GetUnknown( MFT_CONNECTED_STREAM_ATTRIBUTE,
IID_PPV_ARGS(&pSourceAttributes));
pSourceAttributes->
GetUnknown(
MF_DEVICESTREAM_EXTENSION_PLUGIN_CONNECTION_POINT,
IID_PPV_ARGS(&pUnk)));
pUnk->QueryInterface(__uuidof(IMFTransform),
(void**)&m_pSourceTransform));
}
if (m_pSourceTransform) {
// Put code to get device source information here.
}
Geçiş modunu uygulama
Sürücü MFT'sini geçiş moduna almak için giriş ve çıkış akışı için aynı medya türünü belirtin.
ProcessInput ve ProcessOutput MFT'de çağrılar yapılmaya devam eder. Herhangi bir işlemin geçiş modunda gerçekleşip gerçekleşmediğini belirlemek için sürücü MFT uygulamanıza bırakılır.
Eklenecek üst bilgi dosyaları
Sürücü MFT'sinin IInspectable uygulaması gereken ve IMFTransform yöntemleri için üst bilgi dosyalarını eklemeniz gerekir. For a list of header files to include, see stdafx.h in the SampleMFT0 directory of the UWP device app for camera sample.
// required for IInspectable
#include <inspectable.h>
IInspectable'ı uygulama
Bir kameranın UWP cihaz uygulamasından kullanılması amaçlanan bir sürücü MFT'sinin IInspectable , Microsoft Store cihaz uygulamasının başlatıldığında sürücü MFT'sine yönelik bir işaretçiye erişebilmesi için yöntemini uygulaması gerekir. Sürücü MFT'nizin aşağıdaki yöntemleri IInspectable uygulaması gerekir:
IInspectable::GetIids should return null in the iids out parameter, and return 0 in the iidCount out parameter.
IInspectable::GetRuntimeClassName should return null in the out parameter.
IInspectable::GetRuntiGetTrustLevel should return
TrustLevel::BaseTrustin the out parameter.
Aşağıdaki kod örneği, yöntemlerin IInspectable örnek sürücü MFT'sinde nasıl uygulandığını gösterir. This code can be found in the Mft0.cpp file, in the SampleMFT0 directory of the sample.
// Mft0.cpp
STDMETHODIMP CMft0::GetIids(
/* [out] */ __RPC__out ULONG *iidCount,
/* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID **iids)
{
HRESULT hr = S_OK;
do {
CHK_NULL_PTR_BRK(iidCount);
CHK_NULL_PTR_BRK(iids);
*iids = NULL;
*iidCount = 0;
} while (FALSE);
return hr;
}
STDMETHODIMP CMft0::GetRuntimeClassName(
/* [out] */ __RPC__deref_out_opt HSTRING *className)
{
HRESULT hr = S_OK;
do {
CHK_NULL_PTR_BRK(className);
*className = NULL;
} while (FALSE);
return hr;
}
STDMETHODIMP CMft0::GetTrustLevel(
/* [out] */ __RPC__out TrustLevel *trustLevel)
{
HRESULT hr = S_OK;
do {
CHK_NULL_PTR_BRK(trustLevel);
*trustLevel = TrustLevel::BaseTrust;
} while (FALSE);
return hr;
}
COM implementation
Sürücünüz MFT'nin uyguladığı her arabirim, kameranın UWP cihaz uygulamasına doğru şekilde sıralanması için uygulamasının ve türetilmesi IUnknowngerekir. The following is an example .idl file for a driver MFT that demonstrates this.
// SampleMft0.idl : IDL source for SampleMft0
//
// This file will be processed by the MIDL tool to
// produce the type library (SampleMft0.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
import "Inspectable.idl";
import "mftransform.idl";
[
object,
uuid(F5208B72-A37A-457E-A309-AE3060780E21),
oleautomation,
nonextensible,
pointer_default(unique)
]
interface IMft0 : IUnknown{
[id(1)] HRESULT UpdateDsp([in] UINT32 uiPercentOfScreen);
[id(2)] HRESULT Enable(void);
[id(3)] HRESULT Disable(void);
[id(4)] HRESULT GetDspSetting([out] UINT* puiPercentOfScreen, [out] BOOL* pIsEnabled);
};
[
uuid(DE05674A-C564-4C0E-9B7C-E1519F7AA767),
version(1.0),
]
library SampleMft0Lib
{
importlib("stdole2.tlb");
[
uuid(7BB640D9-33A4-4759-B290-F41A31DCF848)
]
coclass Mft0
{
[default] interface IMft0;
interface IInspectable;
interface IMFTransform;
};
};
Note
Sürücü MFT, kullanılarak CoCreateInstanceoluşturulabilen normal bir COM sınıfıdır. Genel amaçlı bir MFT olmadığından, bu işlevi kaydetmek için kullanmamalısınız MFTRegister .
Ara sunucu oluşturma
MFT sürücüsü işlem dışı bir sunucudur. Bunu bir UWP cihaz uygulamasında kullanmak için, sürücü MFT arabiriminizin işlem sınırları boyunca kullanılabilmesi için bir proxy'de hazırlama desteği sağlamanız gerekir. You can find an example of this in the Driver MFT sample. Örnek, sapsız bir proxy oluşturmak için MIDL derleyicisini kullanır.
Sürücü MFT'sini uygulamalara ifşa etme
C# veya JavaScript'te bir sürücü MFT'si ile etkileşim kuran bir UWP cihaz uygulaması yazmak için Microsoft Store cihaz uygulamasının Microsoft Visual Studio projesinde başka bir bileşen oluşturmanız gerekir. Bu bileşen, Microsoft Store cihaz uygulaması tarafından görülebilen bir Windows Çalışma Zamanı Bileşeninde sürücü MFT arabirimlerini kullanıma sunan bir sarmalayıcıdır.
Kamera örneği için UWP cihaz uygulamasındaki Sarmalayıcı alt proje, C# veya JavaScript'te uygulanan bir UWP cihaz uygulamasından kullanabilmeniz için sürücü MFT'nizi Windows Çalışma Zamanı'nda kullanıma sunma örneği sağlar. It's designed to work together with the Driver MFT sample. See the Driver MFT sample page for a step-by-step guide to installing, running, and testing the samples.
Sürücü MFT'sini yükleme ve kaydetme
Bu bölümde, sürücü MFT'sini yükleme adımları listeleniyor:
Sürücü MFT DLL'sinin aşağıdaki konumdaki bir alt dizine yüklenmesi gerekir:
- %SystemDrive%\Program Files\
Your camera installer registers the driver MFT by calling regsvr32 on your driver MFT DLL, or by providing a driver manifest (.man) file for the DLL that the installer uses for registration.
CameraPostProcessingPluginCLSIDKameranızın kayıt defteri anahtarındaki değeri ayarlayın. INF dosyanız, değeri sürücü MFT sınıfının CLSID GUID'sine ayarlayarakCameraPostProcessingPluginCLSIDcihazın cihaz sınıfı kayıt defteri anahtarında Sürücü MFT'sinin CLSID'sini belirtmelidir. Aşağıda, bir kameranın kayıt defteri anahtarlarını dolduran bir INF dosya girdisinden bir örnek verilmiştir:
KSCATEGORY_VIDEO_CAMERA:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{E5323777-F976-4f5b-9B55-B94699C46E44}\##?#USB#VID_045E&PID_075D&MI_00#8&23C3DB65&0&0000#{E5323777-F976-4f5b-9B55-B94699C46E44}\#GLOBAL\Device Parameters]
"CLSID"="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
"FriendlyName"="USB Video Device"
"RTCFlags"=dword:00000010
"CameraPostProcessingPluginCLSID"="{3456A71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_CAPTURE:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{ 65E8773D-8F56-11D0-A3B9-00A0C9223196}\##?#USB#VID_045E&PID_075D&MI_00#8&23C3DB65&0&0000#{65E8773D-8F56-11D0-A3B9-00A0C9223196}\#GLOBAL\Device Parameters]
"CLSID"="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
"FriendlyName"="USB Video Device"
"RTCFlags"=dword:00000010
"CameraPostProcessingPluginCLSID"="{3456A71B-ECD7-11D0-B908-00A0C9223196}"
Note
KSCATEGORY_VIDEO_CAMERA kameralar için önerilir. Normalde, cihazın nasıl kaydedildiğinize bağlı olarak kayıt defteri anahtarlarından yalnızca birine ihtiyacınız olur.
Uygulamanızı kamerayla ilişkilendirme
Bu bölüm, cihaz meta verilerinde ve Windows kayıt defterinde kameranızı tanımlamak için gereken adımlarla ilgili bilgiler içerir. Bu meta veriler, UWP cihaz uygulamanızı eşleştirmenize olanak tanır ve kamera ilk kez bağlandığında sorunsuz bir şekilde indirilmesi için uygulamanızı tanımlar.
Updates
Uygulamanın ilk yüklenmesinden sonra, kullanıcı uygulamanın güncelleştirilmiş bir sürümünü indirirse, güncelleştirmeler otomatik olarak kamera yakalama deneyimine tümleştirilir. Ancak güncelleştirmeler otomatik olarak indirilir. The user must download more app updates from the Microsoft Store, because the app is automatically installed only on first connect. UWP cihaz uygulamanızın ana sayfası, güncelleştirmelerin kullanılabildiğini belirten bildirimler sağlayabilir ve güncelleştirmeleri indirmek için bağlantılar sağlayabilir.
Important
Güncelleştirilmiş uygulamanız, Windows Update aracılığıyla dağıtılan tüm güncelleştirilmiş sürücülerle çalışmalıdır.
Multiple cameras
Birden çok kamera modeli, cihaz meta verilerinde aynı UWP cihaz uygulamasını bildirebilir. Bir sistemde birden fazla dahili kamera varsa, kameraların aynı UWP cihaz uygulamasını paylaşması gerekir. The app includes logic for determining which camera is in use and can show different UI for each camera in its More options experience. Bu deneyimi özelleştirme hakkında daha fazla bilgi için bkz. Kamera seçeneklerini özelleştirme.
Internal cameras
UWP device apps for internal cameras are eligible for Automatic installation from the Microsoft Store, but it's recommended that they be preinstalled for the most seamless user experience. İç kameraları desteklemek ve bir UWP cihaz uygulamasını bunlarla ilişkilendirmek için gereken daha fazla adım vardır. Daha fazla bilgi için bkz. dahili kameraların konumunu belirleme.
Cihaz meta veri paketi oluşturma
Hem iç hem de dış kameralar için bir cihaz meta veri paketi oluşturmanız gerekir. Kameranızın UWP cihaz uygulamasını Microsoft Store'a gönderdiğinizde (veya iç kameralar söz konusu olduğunda OPK kullanarak önceden yükleyin), uygulamanın kendisine ek olarak şunları içeren meta veriler sağlamanız gerekir:
- Uygulama yayımcısı adı
- Uygulama paketi adı
- Uygulama öğesi tanımlayıcısı
- Cihaz deneyimi tanımlayıcısı
Uygulamanızı cihazınızla ilişkilendirmek için cihaz meta verilerini kullanma hakkında daha fazla bilgi için bkz. UWP cihaz uygulamaları oluşturma.