Handler skema dan handler Byte-Stream

Topik ini menjelaskan detail internal tentang bagaimana pemecah masalah sumber membuat sumber media. Baca topik ini jika Anda menerapkan sumber media kustom untuk Media Foundation, dan Anda ingin sumber media tersedia untuk aplikasi melalui pemecah masalah sumber.

Pemecah masalah sumber dapat membuat sumber media dari URL atau dari aliran byte (yaitu, penunjuk IMFByteStream ). Untuk melakukannya, ia menggunakan objek pembantu yang disebut handler. Untuk URL, pemecah masalah sumber menggunakan penangan skema. Untuk aliran byte, ia menggunakan handler byte-stream.

Handler skema mengambil URL sebagai input dan membuat sumber media atau aliran byte. Jika membuat aliran byte, pemecah masalah sumber akan meneruskannya ke handler byte-stream, yang membuat sumber media. Gambar berikut mengilustrasikan proses ini.

diagram memperlihatkan proses resolusi sumber

Penangan Skema

Handler skema digunakan ketika aplikasi memanggil IMFSourceResolver::CreateObjectFromURL atau setara asinkronnya, BeginCreateObjectFromURL.

Pemecah masalah sumber mencari penangan skema di registri. Penangan skema dicantumkan menurut skema URL, di bawah kunci berikut:

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

di mana <skema> adalah skema URL yang dirancang untuk diurai oleh handler. Skema ini mencakup karakter ':' berikutnya; misalnya, "http:".

Untuk mendaftarkan handler skema baru, tambahkan entri yang namanya adalah CLSID dari handler skema, dalam bentuk string kanonis: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Nilai entri adalah string (REG_SZ) yang berisi deskripsi singkat handler, seperti "My Scheme Handler." Bagian penting dari entri adalah CLSID. Resolver sumber membuat handler dengan memanggil CoCreateInstance dengan CLSID ini.

Penangan skema mengekspos antarmuka IMFSchemeHandler . Jika pemecah masalah sumber menemukan handler skema yang cocok dengan skema URL, pemecah masalah sumber memanggil IMFSchemeHandler::BeginCreateObject, meneruskan URL asli. Handler skema akan membuka URL dan mencoba mengurai konten. Pada saat itu, handler skema memiliki dua opsi:

  • Buat sumber media.
  • Membuat aliran byte.

Jika membuat sumber media, pemecah masalah sumber mengembalikan sumber media ke aplikasi. Jika membuat aliran byte, pemecah masalah sumber mencoba menemukan handler byte-stream yang sesuai, seperti yang dijelaskan di bagian berikutnya.

Penangan Byte-Stream

Handler byte-stream digunakan saat aplikasi memanggil IMFSourceResolver::CreateObjectFromByteStream atau setara asinkronnya, BeginCreateObjectFromByteStream. Mereka juga digunakan saat handler skema mengembalikan aliran byte, seperti yang dijelaskan sebelumnya.

Seperti halnya handler skema, handler byte-stream tercantum dalam registri. Mereka dicantumkan baik berdasarkan ekstensi nama file atau jenis MIME (atau keduanya), di bawah kunci berikut:

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

di mana <ExtensionOrMimeType> adalah ekstensi nama file atau jenis MIME. Ekstensi file mencakup karakter awal '.'; misalnya, ".wmv".

Ekstensi nama file adalah bagian dari URL, yang disediakan oleh aplikasi. Jenis MIME mungkin tersedia melalui atribut MF_BYTESTREAM_CONTENT_TYPE pada aliran byte.

Untuk mendaftarkan handler byte-stream baru, tambahkan entri yang namanya adalah CLSID dari handler, dalam bentuk string kanonis. Nilai entri adalah string (REG_SZ) yang berisi deskripsi singkat handler, seperti "My Byte-Stream Handler." Pemecah masalah sumber memanggil CoCreateInstance untuk membuat handler dari CLSID. Anda dapat mendaftarkan handler yang sama di bawah lebih dari satu ekstensi atau jenis MIME.

Handler byte-stream mengekspos antarmuka IMFByteStreamHandler . Jika pemecah masalah sumber menemukan handler byte-stream yang cocok, pemecah masalah memanggil IMFByteStreamHandler::BeginCreateObject. Input ke metode ini adalah penunjuk ke aliran byte, ditambah URL asli, jika tersedia. Handler byte-stream membaca dari aliran byte hingga mengurai data yang cukup untuk membuat sumber media.

Pemecah Masalah Sumber