Penyedia Metadata di Windows Vista
Di Windows Vista, Microsoft Media Foundation mengekspos metadata melalui antarmuka IMFMetadata .
Membaca Metadata
Untuk membaca metadata dari sumber media, lakukan langkah-langkah berikut:
- Dapatkan penunjuk ke antarmuka IMFMediaSource dari sumber media. Anda dapat menggunakan antarmuka IMFSourceResolver untuk mendapatkan penunjuk IMFMediaSource .
- Panggil IMFMediaSource::CreatePresentationDescriptor untuk mendapatkan deskriptor presentasi sumber media.
- Panggil MFGetService di sumber media untuk mendapatkan penunjuk ke antarmuka IMFMetadataProvider . Dalam parameter guidServiceMFGetService, tentukan nilai MF_METADATA_PROVIDER_SERVICE. Jika sumber tidak mendukung antarmuka IMFMetadataProvider , MFGetService mengembalikan MF_E_UNSUPPORTED_SERVICE.
- Panggil IMFMetadataProvider::GetMFMetadata dan teruskan penunjuk ke deskriptor presentasi. Metode ini mengembalikan penunjuk ke antarmuka IMFMetadata .
- Untuk mendapatkan metadata tingkat aliran, pertama-tama panggil IMFStreamDescriptor::GetStreamIdentifier untuk mendapatkan pengidentifikasi aliran. Kemudian berikan pengidentifikasi aliran di parameter dwStreamIdentifiergetMFMetadata.
- Untuk mendapatkan metadata tingkat presentasi, atur dwStreamIdentifier ke nol.
- [Opsional] Panggil IMFMetadata::GetAllLanguages untuk mendapatkan daftar bahasa tempat metadata tersedia. Bahasa diidentifikasi menggunakan tag bahasa yang mematuhi RFC 1766.
- [Opsional] Panggil IMFMetadata::SetLanguage untuk memilih bahasa.
- [Opsional] Panggil IMFMetadata::GetAllPropertyNames untuk mendapatkan daftar nama semua properti metadata untuk aliran atau presentasi ini.
- Panggil IMFMetadata::GetProperty untuk mendapatkan nilai properti metadata tertentu, meneruskan nama properti .
Kode berikut menunjukkan langkah 2–4:
HRESULT GetMetadata(
IMFMediaSource *pSource, IMFMetadata **ppMetadata, DWORD dwStream = 0)
{
IMFPresentationDescriptor *pPD = NULL;
IMFMetadataProvider *pProvider = NULL;
HRESULT hr = pSource->CreatePresentationDescriptor(&pPD);
if (FAILED(hr))
{
goto done;
}
hr = MFGetService(
pSource, MF_METADATA_PROVIDER_SERVICE, IID_PPV_ARGS(&pProvider));
if (FAILED(hr))
{
goto done;
}
hr = pProvider->GetMFMetadata(pPD, dwStream, 0, ppMetadata);
done:
SafeRelease(&pPD);
SafeRelease(&pProvider);
return hr;
}
Kode berikut menunjukkan langkah 7–8. Asumsikan bahwa DisplayProperty
adalah fungsi yang menampilkan nilai PROPVARIANT .
HRESULT DisplayMetadata(IMFMetadata *pMetadata)
{
PROPVARIANT varNames;
HRESULT hr = pMetadata->GetAllPropertyNames(&varNames);
if (FAILED(hr))
{
return hr;
}
for (ULONG i = 0; i < varNames.calpwstr.cElems; i++)
{
wprintf(L"%s\n", varNames.calpwstr.pElems[i]);
PROPVARIANT varValue;
hr = pMetadata->GetProperty( varNames.calpwstr.pElems[i], &varValue );
if (SUCCEEDED(hr))
{
DisplayProperty(varValue);
PropVariantClear(&varValue);
}
}
PropVariantClear(&varNames);
return hr;
}
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk