Menambahkan Metadata ke Sink File

Sink file ASF adalah implementasi dari IMFMediaSink yang disediakan oleh Media Foundation yang dapat digunakan aplikasi untuk mengarsipkan data media ASF ke file. Untuk informasi tentang model objek ASF Media Sinks dan penggunaan umum, lihat Sink Media ASF.

Setelah Membuat sink file ASF, file tersebut harus dikonfigurasi dengan informasi tentang aliran dan informasi pengodean dalam file output. Prosedur ini dijelaskan dalam Menambahkan Informasi Aliran ke Properti Sink dan Pengaturan File ASFdi Sink File. Selain itu, Anda juga dapat menambahkan informasi metadata termasuk pasangan nama/nilai seperti "Penulis", Judul". Topik ini menjelaskan proses penambahan informasi metadata ke sink file sehingga muncul di Objek Header ASF akhir.

Anda dapat menambahkan informasi metadata ke sink file ASF sebelum membangun topologi pengodean. Objek ASF ContentInfo untuk sink file melacak properti metadata dan diekspos ke aplikasi melalui antarmuka IMFMetadata . Beberapa properti ini, seperti "IsVBR" yang menunjukkan apakah file berisi aliran laju bit variabel (VBR), diatur secara otomatis oleh sink file dengan mengurai properti pengodean aliran yang diatur.

Untuk daftar lengkap properti, lihat topik "Daftar Atribut" dalam dokumentasi Format SDK.

Menggunakan Antarmuka IMFMetadata pada Sink File ASF

  1. Kueri objek sink file ASF untuk mendapatkan penunjuk ke implementasi antarmuka IMFMetadataProvider .

  2. Panggil IMFMetadataProvider::GetMFMetadata untuk mendapatkan penunjuk IMFMetadata .

    Parameter pPresentationDescriptor diabaikan dan aplikasi dapat melewati NULL. Jika aplikasi melewati nol sebagai pengidentifikasi aliran dalam parameter dwStreamIdentifier , metode mengambil metadata yang berlaku untuk seluruh file ASF. Jika tidak, hanya metadata untuk aliran yang diambil.

  3. Panggil IMFMetadata::GetAllPropertyNames untuk mengambil daftar properti pengodean file yang diatur pada konten media.

  4. Panggil IMFMetadata::GetProperty untuk mendapatkan nilai properti.

Contoh

Contoh kode berikut menunjukkan cara menghitung nama dan nilai properti yang diatur pada file ASF.

/////////////////////////////////////////////////////////////////////
// Name: ListASFProperties
//
// Enumerates the metadata properties of the ASF file. 
//
// pContentInfo: Pointer to the ASF ContentInfo object.
/////////////////////////////////////////////////////////////////////

HRESULT ListASFProperties(IMFASFContentInfo *pContentInfo)
{
    HRESULT hr = S_OK;
    
    PROPVARIANT varNames;
    PropVariantInit(&varNames);

    PROPVARIANT varValue;
    PropVariantInit(&varValue);

    IMFMetadataProvider* pProvider = NULL;
    IMFMetadata* pMetadata = NULL;

    // Query the ContentInfo object for IMFMetadataProvider.
    CHECK_HR(hr = pContentInfo->QueryInterface(IID_IMFMetadataProvider,
        (void**)&pProvider));

    // Get a pointer to IMFMetadata for file-wide metadata.
    CHECK_HR(hr = pProvider->GetMFMetadata(NULL, 0, 0, &pMetadata));

    // Get the property names that are stored in the metadata object.
    CHECK_HR(hr = pMetadata->GetAllPropertyNames(&varNames));

    // Loop through the properties and get their values.
    if (varNames.vt == (VT_VECTOR | VT_LPWSTR))
    {
        ULONG cElements = varNames.calpwstr.cElems;
        for (ULONG i = 0; i < cElements; i++)
        {
            const WCHAR* sName = varNames.calpwstr.pElems[i];
            CHECK_HR(hr = pMetadata->GetProperty(sName, &varValue));
            //Use the property values. Not shown.
            PropVariantClear(&varValue);
        }
    }
done:
    PropVariantClear(&varNames);
    PropVariantClear(&varValue);
    SAFE_RELEASE (pMetaData);
    SAFE_RELEASE (pProvider);
    return hr;
}

Sink Media ASF

Komponen ASF Lapisan Alur

Dukungan ASF di Media Foundation