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.
Mengonfigurasi sumber perangkat kamera yang diwakili oleh instans IMFMEdiaSource berada dalam mode pengontrol atau mode berbagi.
Jenis data
UINT32
Dapatkan/atur
Untuk mendapatkan atribut ini, panggil IMFAttributes::GetUINT32.
Untuk mengatur atribut ini, panggil IMFAttributes::SetUINT32.
Komentar
Ketika atribut ini tidak diatur atau diatur ke nilai 0, sumber perangkat kamera dikonfigurasi dalam mode pengontrol. Ini adalah mode default untuk sumber kamera. Saat dalam mode kontrol, semua operasi kamera tersedia dan aplikasi dapat mengubah jenis media dan/atau kontrol kamera yang diperluas.
Hanya satu instans mode pengontrol IMFMediaSource dapat berada dalam status aktif kapan saja. IMFMediaSource tidak dianggap aktif setelah dibuat diinisialisasi. Sumber media hanya menjadi aktif setelah aliran dimulai, dengan panggilan ke IMFMediaSource::Start, atau setelah nilai kontrol kamera diatur baik oleh penerbitan kontrol kamera dengan memanggil IKsControl::KsProperty dengan properti yang diatur KSPROPERTYSETID_ExtendedCameraControl atau dengan menggunakan antarmuka IMFExtendedCameraControl. Untuk informasi tentang mendapatkan instans IMFExtendedCameraControl, lihat IMFExtendedCameraController
Mencoba merender instans IMFMediaSource aktif ketika instans mode pengontrol lain sudah aktif akan mengakibatkan pelanggaran berbagi.
Kapan saja mungkin ada sejumlah instans mode berbagi aktif IMFMediaSource dan instans mode berbagi yang baru dibuat dapat diaktifkan saat instans mode pengontrol aktif. Instans mode berbagi tidak dapat mengubah jenis media dan harus menggunakan jenis media saat ini yang digunakan. Instans mode berbagi tidak dapat mengubah kontrol KSPROPERTYSETID_ExtendedCameraControl. Kontrol kamera warisan seperti kontrol khusus PROPSETID_VIDCAP_CAMERACONTROL dan PROPSETID_VIDCAP_VIDEOPROCAMP dan OEM/IHV dapat diubah dengan berbagi instans mode.
Untuk mengonfigurasi sumber kamera agar berada dalam mode Berbagi, atribut harus diatur pada saat pembuatan IMFMediaSource.
Mengonfigurasi mode berbagi menggunakan MFCreateDeviceSource
Contoh kode berikut mengilustrasikan pembuatan instans dalam mode berbagi menggunakan MFCreateDeviceSource.
HRESULT
SampleCreateSharedModeCamera(
_In_z_ LPCWSTR cameraSymbolicName,
_COM_Outptr_ IMFMediaSource** cameraSource
)
{
wil::com_ptr_nothrow<IMFAttributes> initAttributes;
RETURN_HR_IF_NULL (E_INVALIDARG, cameraSymbolicName);
RETURN_HR_IF_NULL (E_POINTER, cameraSource);
*cameraSource = nullptr;
RETURN_IF_FAILED (MFCreateAttributes(&initAttributes, 3));
RETURN_IF_FAILED (initAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID));
RETURN_IF_FAILED (initAttributes->SetString(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, cameraSymbolicName));
RETURN_IF_FAILED (initAttributes->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
RETURN_IF_FAILED (MFCreateDeviceSource(initAttributes.get(), cameraSource));
return S_OK;
}
Mengonfigurasi mode berbagi menggunakan IMFActivate
Contoh berikut mengilustrasikan pembuatan instans IMFMediaSource menggunakan IMFActivate. Perhatikan bahwa objek IMFActivate akan secara internal menyimpan IMFMediaSource yang baru dibuat dari panggilan ke ActivateObject. Jadi, jika ActivateObject dipanggil lagi sebelum panggilan ke DetachObject dibuat, instans yang di-cache akan dikembalikan dan setiap perubahan pada atribut akan diabaikan.
HRESULT
SampleCreateSharedModeCameraFromActivate(
_In_ IMFActivate* activate,
_COM_Outptr_ IMFMediaSource** cameraSource
)
{
RETURN_HR_IF_NULL (E_INVALIDARG, activate);
RETURN_HR_IF_NULL (E_POINTER, cameraSource);
*cameraSource = nullptr;
RETURN_IF_FAILED (activate->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
RETURN_IF_FAILED (activate->ActivateObject(IID_PPV_ARGS(cameraSource)));
return S_OK;
}
Mengonfigurasi mode berbagi menggunakan IMFCaptureEngine
Untuk mengaktifkan IMFMediaSource dalam mode berbagi menggunakan IMFCaptureEngine, IMFActivate yang diteruskan untuk sumber kamera harus memiliki atribut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Seperti yang dinyatakan di atas, setelah IMFActivate::ActivateObject dipanggil, DetachObject harus dipanggil agar perubahan atribut apa pun tercermin dalam objek yang diaktifkan.
Mengonfigurasi mode berbagi menggunakan MediaCapture
Saat mengakses kamera menggunakan kelas MediaCapture, atur mode berbagi menggunakan properti MediaCaptureInitializationSettings.SharingMode.
Persyaratan
| Syarat | Nilai |
|---|---|
| Klien minimum yang didukung |
Windows 11, build 26100 |
| Server minimum yang didukung |
Windows Server |
| Header |
|
Lihat juga