Megosztás a következőn keresztül:


Sémakezelők és Byte-Stream kezelők

Ez a témakör a forrásfeloldó médiaforrás létrehozásának belső részleteit ismerteti. Olvassa el ezt a témakört, ha egyéni médiaforrást implementál a Media Foundationhez, és azt szeretné, hogy a médiaforrás elérhető legyen az alkalmazások számára a forrásfeloldón keresztül.

A forrásfeloldó létrehozhat egy médiaforrást URL-címből vagy bájtstreamből (vagyis egy IMFByteStream mutatóból). Ehhez kezelőknevű segédobjektumokat használ. AZ URL-címek esetében a forrásfeloldó sémakezelőkethasznál. Bájtfolyamok esetében bájtfolyam-kezelőkethasznál.

A sémakezelő bemenetként egy URL-címet használ, és médiaforrást vagy bájtstreamet hoz létre. Ha bájtfolyamot hoz létre, a forrásfeloldó ezt átadja egy byte-stream kezelőnek, amely létrehozza a médiaforrást. Az alábbi képen ez a folyamat látható.

a forrásfeloldási folyamatot bemutató diagram

Sémakezelők

A sémakezelők akkor használatosak, amikor az alkalmazás meghívja IMFSourceResolver::CreateObjectFromURL vagy annak aszinkron megfelelőjét, BeginCreateObjectFromURL.

A forrásfeloldó megkeresi a sémakezelőket a beállításjegyzékben. A sémakezelők URL-séma szerint vannak felsorolva, az alábbi kulcsok alatt:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

ahol <séma> a kezelő által elemezni kívánt URL-séma. A séma tartalmazza a záró ":" karaktert; például "http:".

Új sémakezelő regisztrálásához adjon hozzá egy bejegyzést, amelynek neve a sémakezelő CLSID azonosítója, canonical string formában: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. A bejegyzés értéke egy sztring (REG_SZ), amely a kezelő rövid leírását tartalmazza, például a "Saját sémakezelő". A bejegyzés fontos része a CLSID. A forrásfeloldó úgy hozza létre a kezelőt, hogy meghívja CoCreateInstance ezzel a CLSID-vel.

A sémakezelők elérhetővé teszik az IMFSchemeHandler felületet. Ha a forrásfeloldó talál egy olyan sémakezelőt, amely megfelel az URL-sémának, a forrásfeloldó meghívja IMFSchemeHandler::BeginCreateObject, amely az eredeti URL-címre kerül. A sémakezelő megnyitja az URL-címet, és megpróbálja elemezni a tartalmat. Ezen a ponton a sémakezelőnek két lehetősége van:

  • Hozzon létre egy médiaforrást.
  • Bájtfolyam létrehozása.

Ha médiaforrást hoz létre, a forrásfeloldó visszaadja a médiaforrást az alkalmazásnak. Ha bájtfolyamot hoz létre, a forrásfeloldó megkísérli megtalálni a megfelelő bájtfolyam-kezelőt a következő szakaszban leírtak szerint.

Byte-Stream kezelők

Byte-stream kezelők akkor használatosak, amikor az alkalmazás meghívja IMFSourceResolver::CreateObjectFromByteStream vagy annak aszinkron megfelelőjét, BeginCreateObjectFromByteStream. Ezeket akkor is használják, ha egy sémakezelő a korábban ismertetett bájtfolyamot ad vissza.

A sémakezelőkhöz hasonlóan a bájtfolyam-kezelők is szerepelnek a beállításjegyzékben. Ezek fájlnévkiterjesztés vagy MIME-típus (vagy mindkettő) szerint vannak felsorolva a következő kulcsok alatt:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

ahol <ExtensionOrMimeType> a fájlnévkiterjesztés vagy a MIME-típus. A fájlkiterjesztések tartalmazzák a kezdeti "." karaktert; például ".wmv".

A fájlnévkiterjesztés az alkalmazás által biztosított URL-cím része. A MIME-típus a bájtfolyam MF_BYTESTREAM_CONTENT_TYPE attribútumán keresztül érhető el.

Új bájtfolyam-kezelő regisztrálásához adjon hozzá egy bejegyzést, amelynek neve a kezelő CLSID azonosítója, canonical string formában. A bejegyzés értéke egy sztring (REG_SZ), amely a kezelő rövid leírását tartalmazza, például a "My Byte-Stream Handler" (Saját Byte-Stream kezelő). A forrásfeloldó meghívja CoCreateInstance, hogy hozza létre a kezelőt a CLSID-ből. Ugyanazt a kezelőt több bővítmény vagy MIME típus alatt is regisztrálhatja.

A byte-stream kezelői elérhetővé teszik az IMFByteStreamHandler felületet. Ha a forrásfeloldó talál egyező bájtfolyam-kezelőt, meghívja IMFByteStreamHandler::BeginCreateObject. A metódus bemenete egy mutató a bájtfolyamra, valamint az eredeti URL-címre, ha elérhető. A bájtfolyam-kezelő addig olvas a bájtfolyamból, amíg elegendő adatot nem elemez a médiaforrás létrehozásához.

Forrásfeloldó