Jelölők használata

[A laphoz társított funkció, Windows Media Format 11 SDKegy régi funkció. A Forrásolvasó és a Kiírófelülmúlta. Forrásolvasó és Fogadó író Windows 10-hez és Windows 11-hez lett optimalizálva. A Microsoft határozottan javasolja, hogy az új kód a Source Reader és a Sink Writer használja a Windows Media Format 11 SDKhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]

A jelölő egy ASF-fájl nevesített pontja. Minden jelölő egy névből és egy kapcsolódó időből áll, amely a fájl kezdetétől eltolásként van mérve. Az alkalmazások jelölőkkel rendelhetnek neveket a tartalom különböző pontjaihoz, megjeleníthetik ezeket a neveket a felhasználónak, majd megkereshetik a jelölőpozíciókat. Az alkalmazások hozzáadhatnak vagy eltávolíthatnak jelölőket egy meglévő ASF-fájlból.

Az IWMHeaderInfo felület a jelölőkkel való munka módszereit tartalmazza. A metaadat-szerkesztő objektum támogatja a jelölők hozzáadását és eltávolítását. Az író- és olvasóobjektumok lekérhetik a jelölőket, de nem adhatnak hozzá vagy távolíthatnak el jelölőket.

Jelölők hozzáadása

Jelölő hozzáadásához kérdezze le a IWMHeaderInfo felület metaadat-szerkesztőjében. Ezután hívja meg a IWMHeaderInfo::AddMarker metódust, amely széles karaktersorozatként adja meg a jelölőnevet, valamint a 100 nanoszekundumos egységekben megadott időt. Az idő nem haladhatja meg a fájl időtartamát. Két jelölőnek is lehet azonos ideje.

Az alábbi példa több jelölőt ad hozzá egy fájlhoz:

IWMMetadataEditor *pEdit = 0;
IWMHeaderInfo     *pInfo = 0;

// Create the metadata editor object.

WMCreateEditor(&pEdit);
pEdit->Open(L"C:\\example.wmv");
pEdit->QueryInterface(IID_IWMHeaderInfo, (void**)&pInfo);

// Add the markers. Note that we add the last ones first. Do this when possible
// for improved performance when writing the markers to the file.
hr = pInfo->AddMarker(L"End",  520000000);   // 52 sec.
hr = pInfo->AddMarker(L"Segue",  350000000); // 35 sec.
hr = pInfo->AddMarker(L"Intro",  15000000);  // 1.5 sec.

// Commit changes and clean up.

pEdit->Flush();
pEdit->Close(); 
pInfo->Release();
pEdit->Release();

Jelölők eltávolítása

Jelölő eltávolításához hívja meg IWMHeaderInfo::RemoveMarker, és adja meg az eltávolítani kívánt jelölő indexét. A jelölők automatikusan növekvő időrendben vannak rendezve, így mindig a 0 index az első jelölő. Vegye figyelembe, hogy RemoveMarker meghívása módosítja a következő jelölők indexszámát. A következő kód, amelyben pInfo egy IWMHeaderInfo felületre mutató mutató, eltávolítja az összes jelölőt egy fájlból:

WORD count = 0;
pInfo->GetMarkerCount(&count);
while (count--)
{
    pInfo->RemoveMarker(0);
}

Jelölők lekérése

Egy jelölő nevének és időpontjának lekéréséhez hajtsa végre a következő lépéseket:

  1. Hívja meg a IWMHeaderInfo::GetMarkerCount metódust annak megállapításához, hogy a fájl hány jelölőt tartalmaz.
  2. Határozza meg a jelölőnévhez szükséges karakterlánc méretét. Ehhez hívja meg a IWMHeaderInfo::GetMarker metódust. Adja meg a lekérni kívánt jelölő indexét, és NULL értéket a karakterlánc pufferhez (a pwszMarkerName paraméterhez). A metódus visszaadja a sztring hosszát, beleértve a "\0" karakter végződését a pcchMarkerNameLen paraméterben.
  3. A név fogadásához foglaljon le egy szélességi karakterű karakterláncot.
  4. Újra hívja meg a GetMarker-t, de ezúttal adja meg a karakterlánc címét a pwszMarkerName paraméterben. A metódus beírja a jelölő nevét a sztringbe, és visszaadja a jelölő időpontját a pcnsMarkerTime paraméterben.

A következő kód minden jelölőn végigmegy, és lekéri a nevet és az időt:

WORD cMarkers = 0;
HRESULT hr = pInfo->GetMarkerCount(&cMarkers);

WCHAR *wszName = 0;
WORD  len = 0;
for (WORD iMarker = 0; iMarker < cMarkers; ++iMarker)
{
    QWORD rtTime = 0;
    WORD req_len = 0;
    hr = pInfo->GetMarker(iMarker, 0, &req_len, &rtTime);
    
    // Reallocate if necessary.
    if (len < req_len)
    {
        delete[] wszName;
        wszName = new WCHAR[req_len];
        len = req_len;
    }
    hr = pInfo->GetMarker(iMarker, wszName, &req_len, &rtTime);
    // Display the name...
}
delete[] wszName;

Jelölő keresése

Ha jelölőhelyről szeretné elindítani a lejátszást, hívja meg az olvasóobjektum IWMReaderAdvanced2::StartAtMarker metódust, és adja meg a jelölő indexét. A többi paraméter megegyezik az IWMReader::Start metóduséval. Az alábbi példa lekérdezi az olvasót az IWMReaderAdvanced2 felülethez, és az első jelölőre keres.

IWMReaderAdvanced2 *pReader2 = 0
WORD iMarkerIndex = 0;
hr = pReader->QueryInterface(IID_IWMReaderAdvanced2, (void**)&pReader2);
if (SUCCEEDED(hr))
{
    hr = pPlayer2->StartAtMarker(iMarkerIndex, 0, 1.0, 0);
    pPlayer2->Release();
}

IWMHeaderInfo interfész

IWMReaderAdvanced2::StartAtMarker

Metaadatok használata