Bagikan melalui


Protokol yang Didukung

Media Foundation mendukung protokol berikut:

  • Protokol Streaming Real Time (RTSP)

    RTSP terutama digunakan untuk streaming konten media. Ini dapat menggunakan UDP atau TCP sebagai protokol transportasi. UDP adalah yang paling efisien untuk pengiriman konten karena overhead bandwidth kurang dari dengan protokol berbasis TCP. Meskipun protokol TCP memastikan pengiriman paket yang andal, TCP tidak cocok untuk aliran media digital, di mana penggunaan bandwidth yang efisien lebih penting daripada paket yang hilang sesekali.

  • Protokol Transfer Hiperteks (HTTP)

    HTTP menggunakan TCP dan digunakan oleh server web. Skema "httpd://" menunjukkan bahwa sumber dapat diunduh dari server web. HTTP juga digunakan dalam kasus firewall, yang biasanya dikonfigurasi untuk menerima permintaan HTTP dan biasanya menolak protokol streaming lainnya.

Aplikasi bisa mendapatkan protokol yang didukung oleh Media Foundation dengan menggunakan antarmuka IMFNetSchemeHandlerConfig . Untuk melakukan ini, aplikasi harus terlebih dahulu mengambil jumlah protokol, dengan memanggil IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols lalu mendapatkan jenis protokol berdasarkan indeks dengan memanggil IMFNetSchemeHandlerConfig::GetSupportedProtocolType. Metode ini mengembalikan salah satu nilai yang ditentukan dalam enumerasi MFNETSOURCE_PROTOCOL_TYPE .

Aplikasi juga bisa mendapatkan skema yang didukung oleh pemecah masalah sumber dengan memanggil fungsi MFGetSupportedSchemes .

Rollover Protokol

Ketika aplikasi menentukan "mms://" sebagai skema URL, pemecah masalah sumber melakukan operasi rollover protokol . Dalam proses ini, pemecah masalah sumber menentukan protokol terbaik untuk digunakan sumber jaringan untuk mendapatkan konten. Biasanya, untuk pengukusan media, RTSP dengan UDP (RTSPU) lebih efisien daripada HTTP. Namun, jika konten dihosting di server web, HTTP adalah pilihan yang lebih baik.

Rollover protokol juga dapat terjadi ketika upaya untuk menggunakan protokol yang ditentukan dalam skema URL gagal. Misalnya, protokol dapat gagal ketika firewall memblokir paket UDP. Dalam hal ini, pemecah masalah sumber beralih ke HTTP.

Rollover protokol tidak berlaku jika skema URL berisi protokol tertentu, seperti "rtspu://". Selain itu, rollover tidak dilakukan jika autentikasi gagal atau server telah mencapai batas koneksi klien. Disarankan agar aplikasi menentukan skema "mms://" dan memungkinkan pemecah masalah sumber untuk memilih protokol terbaik untuk skenario.

Tabel berikut mencantumkan urutan rollover.

Skema yang diizinkan Urutan rollover protokol
mms:// atau rtsp:// Cache Cepat diaktifkan:
  1. RTSP dengan TCP (RTSPT)
  2. RTSP dengan UDP (RTSPU)
  3. HTTP Streaming
  4. Unduhan HTTP (HTTPD)
Cache Cepat dinonaktifkan:
  1. RTSPU
  2. RTSPT
  3. HTTP Streaming
  4. UnduhAN HTTP
rtspu:// RTSPU
rtspt:// RTSPT
https://
  1. HTTP
  2. HTTPD
httpd:// HTTPD

 

Mengambil Protokol Saat Ini

Setelah operasi rollover protokol, sumber jaringan mungkin menggunakan protokol selain yang ditentukan oleh aplikasi dalam skema URL. Hasil rollover protokol tersedia untuk aplikasi setelah sumber jaringan membuat koneksi dengan server media.

Untuk mendapatkan protokol dan transportasi yang digunakan untuk mendapatkan konten, aplikasi dapat mengambil nilai properti untuk properti MFNETSOURCE_PROTOCOL dan properti MFNETSOURCE_TRANSPORT objek IPropertyStore dari sumber jaringan.

Kode berikut menunjukkan cara mendapatkan nilai-nilai ini.

// Create an IPropertyStore object.
    IPropertyStore *pProp = NULL;
    hr = CreatePropertyStore(&pProp);

    PROPVARIANT var;
    PropVariantInit(&var);

// Get the property store from the network source.
// The network source is created by the source resolver. Not shown.
    if (SUCCEEDED(hr))
    {
        hr = pNetworkSource->QueryInterface 
                (__uuidof(IPropertyStore), 
                (void**)&pProp);
    }
    if (SUCCEEDED(hr))
    {
        // Create a property key.
        PROPERTYKEY key;
        // Get the MFNETSOURCE_PROTOCOL property value.
        key.fmtid = MFNETSOURCE_PROTOCOL;
        hr = pProp->GetValue (key, &var);

        // Get the MFNETSOURCE_TRANSPORT property value.
        key.fmtid = MFNETSOURCE_TRANSPORT;
        key.pid = 0;
        hr = pProp->GetValue (key, &var);

    }

Dalam contoh kode sebelumnya, IPropertyStore::GetValue mengambil nilai MFNETSOURCE_PROTOCOL, yang merupakan anggota enumerasi MFNETSOURCE_PROTOCOL_TYPE . Untuk MFNETSOURCE_TRANSPORT, nilainya adalah anggota enumerasi MFNETSOURCE_TRANSPORT_TYPE .

Secara bergantian, aplikasi bisa mendapatkan nilai yang sama dengan menggunakan layanan MFNETSOURCE_STATISTICS_SERVICE. Untuk menggunakan layanan ini, aplikasi dapat memanggil fungsi MFGetService untuk mendapatkan penyimpanan properti dari sumber jaringan. Penyimpanan properti ini berisi statistik jaringan di properti MFNETSOURCE_STATISTICS . Nilai protokol dan transportasi dapat diambil dengan menentukan MFNETSOURCE_PROTOCOL_ID dan MFNETSOURCE_TRANSPORT_ID—yang ditentukan dalam enumerasi MFNETSOURCE_STATISTICS_IDS . Kode berikut menunjukkan cara mendapatkan nilai protokol dan transportasi dengan menggunakan layanan MFNETSOURCE_STATISTICS_SERVICE.

// Create an IPropertyStore object.
    IPropertyStore *pProp = NULL;
    hr = CreatePropertyStore(&pProp);

    HRESULT hr = S_OK;

    hr = MFGetService(
        pMediaSource, 
        MFNETSOURCE_STATISTICS_SERVICE, 
        IID_IPropertyStore, 
        (void**) & pProp); 

    if (SUCCEEDED(hr))
    {
        // Create a property key.
        PROPERTYKEY key;
        // Get the property value.
        key.fmtid = MFNETSOURCE_STATISTICS;
        key.pid = MFNETSOURCE_PROTOCOL_ID;
        hr = pProp->GetValue (key, &var);

        // Get the transport value.
        key.fmtid = MFNETSOURCE_STATISTICS;
        key.pid = MFNETSOURCE_TRANSPORT_ID;
        hr = pProp->GetValue (key, &var);

    }

Mengaktifkan dan Menonaktifkan Protokol

Aplikasi dapat mengonfigurasi sumber jaringan sehingga protokol tertentu dilewati selama proses rollover. Untuk melakukan ini, properti sumber jaringan digunakan untuk menonaktifkan protokol tertentu. Tabel berikut ini memperlihatkan properti dan protokol yang mereka kontrol.

Properti Deskripsi
MFNETSOURCE_ENABLE_HTTP Mengaktifkan atau menonaktifkan HTTP dan HTTPD.
MFNETSOURCE_ENABLE_RTSP Mengaktifkan atau menonaktifkan RTSPU dan RTSPT.
MFNETSOURCE_ENABLE_TCP Mengaktifkan atau menonaktifkan RTSPT.
MFNETSOURCE_ENABLE_UDP Mengaktifkan atau menonaktifkan RTSPU.
MFNETSOURCE_ENABLE_DOWNLOAD Mengaktifkan atau menonaktifkan HTTPD.
MFNETSOURCE_ENABLE_STREAMING Mengaktifkan atau menonaktifkan RTSPU, RTSPT, dan HTTP.

 

Jaringan di Media Foundation