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.
Penting
Topik ini tidak digunakan lagi. Lihat panduan desain MFT Perangkat untuk panduan yang diperbarui.
Aplikasi UWP untuk perangkat memungkinkan produsen perangkat menerapkan pengaturan kustom dan efek khusus pada aliran video kamera dengan driver kamera MFT (transformasi fondasi media). Topik ini memperkenalkan MFT Driver dan menggunakan sampel MFT Driver untuk menunjukkan cara membuatnya. Untuk mempelajari selengkapnya tentang aplikasi perangkat UWP secara umum, lihat Mengenal aplikasi perangkat UWP.
Pengemudi MFT
Bagian ini menjelaskan Transformasi Media Foundation (MFT) yang Anda buat untuk menerapkan efek pada aliran pengambilan media yang berasal dari kamera. Ini adalah cara Anda memberikan transformasi untuk efek warna, mode skema, dan efek pelacakan wajah yang benar-benar membedakan kamera Anda dari orang lain. MFT ini, yang dikenal sebagai MFT driver, pertama kali diterapkan ke aliran video yang terhubung yang berasal dari driver kamera ketika aplikasi UWP memulai pengambilan video. Ketika aplikasi tersebut memanggil UI opsi Kamera , Windows secara otomatis menyediakan akses ke antarmuka apa pun yang diterapkan MFT driver untuk mengontrol efek kustomnya.
Driver MFT tidak diperlukan untuk aplikasi perangkat UWP. Produsen perangkat dapat memilih untuk menerapkan aplikasi perangkat UWP tanpa MFT driver, hanya untuk menyediakan antarmuka pengguna yang berbeda yang berisi branding untuk perangkat keras mereka, tanpa menerapkan pengaturan kustom dan efek khusus pada aliran video.
Bagaimana MFT driver digunakan
Aplikasi perangkat UWP untuk kamera berjalan dalam proses yang berbeda dari aplikasi Microsoft Store yang memanggilnya dari CameraCaptureUI API. Agar aplikasi perangkat Microsoft Store mengontrol MFT driver, urutan peristiwa tertentu di berbagai ruang proses harus terjadi.
Aplikasi UWP ingin mengambil foto, sehingga memanggil metode CaptureFileAsync
Windows meminta penunjuk MFT driver dan ID perangkat kamera
Penunjuk driver MFT diteruskan ke host pengaturan
Host menanyakan properti perangkat untuk ID aplikasi dari aplikasi perangkat di Microsoft Store yang terkait dengan kamera (berdasarkan metadata perangkat)
Jika tidak ada aplikasi perangkat UWP yang ditemukan, flyout default berinteraksi dengan mesin penangkap
Jika aplikasi perangkat UWP ditemukan, aplikasi diaktifkan dan host pengaturan meneruskan penunjuk MFT driver ke aplikasi tersebut
Aplikasi perangkat UWP mengontrol MFT driver menggunakan antarmuka yang diekspos melalui pointer
Persyaratan model driver AvStream
Driver kamera Anda harus menggunakan model driver AvStream. Untuk informasi selengkapnya tentang model driver AVStream, lihat Panduan Desain AVStream Minidrivers.
Bagaimana MFT driver diekspos ke aplikasi
MFT driver terdaftar dengan Windows sebagai antarmuka COM sehingga transformasi yang diterapkannya dapat diterapkan ke aliran media yang keluar dari perangkat tertentu, seperti kamera.
Nota
MFT driver tidak boleh didaftarkan menggunakan fungsi MFTRegister karena fungsi ini khusus untuk perangkat dan bukan MFT tujuan umum. Untuk informasi tentang kunci registri, lihat bagian Menginstal dan mendaftarkan MFT driver nanti dalam topik ini.
Saat aplikasi memulai pengambilan video, Pembaca Sumber Media Foundation dibuat untuk menyediakan streaming video. Sumber media ini membaca nilai registri dari kunci registri perangkat. Jika CLSID kelas COM MFT driver ditemukan dalam nilai registri, pengolah sumber menginstansiasi MFT driver dan memasukkannya ke dalam saluran media.
Selain aplikasi perangkat UWP, fungsionalitas MFT driver dapat diakses ketika perangkat yang terkait dengannya digunakan untuk mengambil video menggunakan API berikut:
Tag <video> HTML5 dalam aplikasi UWP menggunakan HTML. Transformasi yang diaktifkan MFT driver akan memengaruhi video yang sedang diputar menggunakan <elemen video> , seperti dalam contoh kode berikut:
var video = document.getElementById('myvideo'); video.src = URL.createObjectURL(fileItem); video.play();API Windows.Media.MediaCapture dalam aplikasi UWP yang menggunakan Windows Runtime. Untuk informasi selengkapnya tentang cara API ini digunakan, lihat sampel Media Capture .
Pembaca Sumber dari Media Foundation, untuk aplikasi yang memproses data media. MFT driver akan diakses oleh aplikasi sebagai MFT pertama saat memanggil
IMFSourceReaderEx::GetTransformForStream. Kategori yang akan dikembalikan adalahMFT_CATEGORY_VIDEO_EFFECT.
Kamera dengan penghubung ganda
Jika Anda memiliki kamera tiga pin atau multi-pin lainnya, lihat Pertimbangan untuk MFT driver pada kamera multi-pin.
Implementasi driver MFT
Bagian ini menyediakan informasi tentang cara menerapkan MFT driver Anda. Untuk contoh lengkap MFT driver yang bekerja sama dengan aplikasi perangkat UWP, lihat sampel MFT Driver .
Alat pengembangan
Microsoft Visual Studio Professional atau Microsoft Visual Studio Ultimate diperlukan.
Karakteristik MFT Driver
Driver MFT diinstansiasi per aliran. Untuk setiap aliran yang didukung kamera, sebuah instans MFT dibuat dan dihubungkan ke aliran tersebut. MFT driver diharapkan memiliki satu aliran input dan satu aliran output. Penggerak MFT mungkin berupa MFT sinkron atau MFT asinkron.
Komunikasi antara kamera dan pengemudi MFT
Untuk mengaktifkan komunikasi dua arah antara sumber media dan MFT driver, pointer ke penyimpanan atribut aliran sumber diatur pada penyimpanan atribut aliran input MFT driver sebagai MFT_CONNECTED_STREAM_ATTRIBUTE. Ini terjadi melalui proses jabat tangan yang Anda aktifkan dengan mengekspos MFT_ENUM_HARDWARE_URL_Attribute di MFT driver, seperti dalam contoh berikut:
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;
}
Dalam contoh ini, MFT_CONNECTED_STREAM_ATTRIBUTE di penyimpanan atribut milik driver MFT diatur untuk menunjuk ke penyimpanan atribut dari aliran sumber perangkat. Lihat Urutan Jabat Tangan Perangkat Keras untuk detail lebih lanjut tentang bagaimana komunikasi antara kamera dan MFT disiapkan.
Cara mengakses informasi sumber perangkat
Contoh kode berikut menunjukkan bagaimana MFT driver bisa mendapatkan pointer ke transformasi sumber dari penyimpanan atribut inputnya. MFT driver kemudian dapat menggunakan penunjuk sumber untuk mendapatkan info sumber perangkat.
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.
}
Cara menerapkan mode passthrough
Untuk menempatkan MFT driver dalam mode passthrough, tentukan jenis media yang sama untuk aliran input dan output.
ProcessInput dan ProcessOutput panggilan pada MFT masih akan dilakukan. Ini diserahkan ke implementasi MFT driver Anda untuk menentukan apakah pemrosesan apa pun terjadi dalam mode passthrough atau tidak.
File header yang akan disertakan
Anda harus menyertakan file header untuk metode IInspectable dan IMFTransform yang harus diimplementasikan oleh driver MFT. Untuk daftar file header yang perlu disertakan, lihat stdafx.h di direktori SampleMFT0 dari contoh aplikasi perangkat UWP untuk kamera.
// required for IInspectable
#include <inspectable.h>
Cara mengimplementasikan IInspectable
Driver MFT yang dirancang untuk digunakan oleh aplikasi perangkat UWP pada kamera harus menerapkan metode IInspectable agar aplikasi perangkat Microsoft Store dapat mengakses pointer ke driver MFT ketika dijalankan. Driver MFT Anda sebaiknya menerapkan metode dari IInspectable sebagai berikut:
IInspectable::GetIids harus mengembalikan null dalam parameter iids out, dan mengembalikan 0 dalam parameter iidCount out.
IInspectable::GetRuntimeClassName harus mengembalikan null dalam parameter out.
IInspectable::GetRuntiGetTrustLevel harus kembali
TrustLevel::BaseTrustdalam parameter keluar.
Contoh kode berikut menunjukkan bagaimana metode-metode IInspectable diimplementasikan dalam driver sampel MFT. Kode ini dapat ditemukan dalam file Mft0.cpp , di direktori SampleMFT0 sampel.
// 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;
}
Implementasi COM
Setiap antarmuka yang diterapkan MFT driver Anda harus mengimplementasikan dan berasal dari IUnknown, untuk dinaungi dengan benar ke aplikasi perangkat UWP kamera. Berikut ini adalah contoh file .idl untuk MFT driver yang menunjukkan ini.
// 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;
};
};
Nota
MFT driver adalah kelas COM reguler yang dapat dibuat menggunakan CoCreateInstance. Anda tidak boleh menggunakan fungsi MFTRegister untuk mendaftarkannya karena bukan MFT tujuan umum.
Membuat proksi
Driver MFT adalah server yang terpisah dari proses. Untuk menggunakannya dalam aplikasi perangkat UWP, Anda harus memberikan dukungan marshaling dalam proksi sehingga antarmuka MFT driver Anda dapat digunakan melintasi batasan proses. Anda dapat menemukan contoh ini dalam sampel MFT Driver . Contoh menggunakan kompiler MIDL untuk menghasilkan proksi tanpa stub.
Mengekspos driver MFT ke aplikasi
Untuk menulis aplikasi perangkat UWP di C# atau JavaScript yang berinteraksi dengan MFT driver, Anda perlu membuat komponen tambahan di proyek Microsoft Visual Studio aplikasi perangkat Microsoft Store. Komponen ini adalah pembungkus yang memperlihatkan antarmuka driver MFT dalam Komponen Runtime Windows yang dapat diakses oleh aplikasi perangkat di Microsoft Store.
Subproyek Wrapper di aplikasi perangkat UWP untuk sampel kamera memberikan contoh cara mengekspos MFT driver Anda ke Windows Runtime sehingga Anda dapat menggunakannya dari aplikasi perangkat UWP yang diimplementasikan di C# atau JavaScript. Ini dirancang untuk bekerja sama dengan sampel Driver MFT . Lihat halaman sampel Driver MFT untuk panduan langkah demi langkah untuk menginstal, menjalankan, dan menguji sampel.
Menginstal dan mendaftarkan MFT driver
Bagian ini mencantumkan langkah-langkah untuk menginstal MFT driver:
DLL MFT driver harus diinstal dalam subdirektori di lokasi berikut:
- %SystemDrive%\Program Files\
Penginstal kamera Anda mendaftarkan MFT driver dengan memanggil regsvr32 pada DLL MFT driver Anda, atau dengan menyediakan file manifes driver (.man) untuk DLL yang digunakan alat penginstal untuk pendaftaran.
Atur
CameraPostProcessingPluginCLSIDnilai dalam kunci registri untuk kamera Anda. File INF Anda harus menentukan CLSID Driver MFT di kunci registri kelas perangkat untuk perangkat, dengan mengaturCameraPostProcessingPluginCLSIDnilai ke GUID CLSID dari kelas MFT driver. Berikut ini adalah contoh dari entri file INF yang mengisi kunci registri untuk kamera:
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}"
Nota
KSCATEGORY_VIDEO_CAMERA disarankan untuk kamera. Anda biasanya hanya memerlukan salah satu kunci registri, tergantung pada bagaimana perangkat terdaftar.
Mengaitkan aplikasi Anda dengan kamera
Bagian ini berisi informasi tentang langkah-langkah yang diperlukan untuk mengidentifikasi kamera Anda dalam metadata perangkat dan di registri Windows. Metadata ini memungkinkan Anda memasangkan aplikasi perangkat UWP dan mengidentifikasi aplikasi Anda sehingga dapat diunduh dengan mulus saat pertama kali kamera terhubung.
Pembaruan
Setelah penginstalan pertama aplikasi, jika pengguna mengunduh versi aplikasi yang diperbarui, pembaruan secara otomatis diintegrasikan ke dalam pengalaman pengambilan kamera. Namun, pembaruan tidak diunduh secara otomatis. Pengguna harus mengunduh pembaruan aplikasi tambahan dari Microsoft Store, karena aplikasi secara otomatis hanya diinstal pada koneksi pertama. Halaman utama aplikasi perangkat UWP Anda dapat memberikan pemberitahuan bahwa pembaruan tersedia dan menyediakan tautan untuk mengunduh pembaruan.
Penting
Aplikasi Anda yang diperbarui harus berfungsi dengan driver yang diperbarui yang didistribusikan melalui Windows Update.
Beberapa kamera
Beberapa model kamera dapat mendeklarasikan aplikasi perangkat UWP yang sama dalam metadata perangkat mereka. Jika sistem memiliki lebih dari satu kamera yang disematkan secara internal, kamera harus berbagi aplikasi perangkat UWP yang sama. Aplikasi ini mencakup logika untuk menentukan kamera mana yang digunakan dan dapat menunjukkan UI yang berbeda untuk setiap kamera dalam pengalaman Opsi lainnya . Untuk informasi selengkapnya tentang menyesuaikan pengalaman tersebut, lihat Cara menyesuaikan opsi kamera.
Kamera dalam
Aplikasi perangkat UWP untuk kamera internal memenuhi syarat untuk penginstalan otomatis dari Microsoft Store, tetapi disarankan agar mereka diinstal sebelumnya untuk pengalaman pengguna yang paling mulus. Ada langkah tambahan yang diperlukan untuk mendukung kamera internal dan mengaitkan aplikasi perangkat UWP dengan mereka. Untuk informasi selengkapnya, lihat Mengidentifikasi lokasi kamera internal.
Membuat paket metadata perangkat
Untuk kamera internal dan eksternal, Anda perlu membuat paket metadata perangkat. Saat Anda mengirimkan aplikasi perangkat UWP kamera ke Microsoft Store (atau menginstalnya sebelumnya menggunakan OPK, dalam kasus kamera internal), selain aplikasi itu sendiri, Anda harus menyediakan metadata yang berisi hal berikut:
Nama penerbit aplikasi
Nama paket aplikasi
Pengidentifikasi elemen aplikasi
Pengidentifikasi pengalaman perangkat
Untuk informasi selengkapnya tentang cara menggunakan metadata perangkat untuk mengaitkan aplikasi Anda dengan perangkat Anda, lihat Membangun aplikasi perangkat UWP.
Topik terkait
Membangun aplikasi perangkat UWP
Penginstalan otomatis untuk aplikasi perangkat UWP
Urutan Jabat Tangan Perangkat Keras (MFTs Perangkat Keras)
Panduan Desain AVStream Minidrivers