Sdílet prostřednictvím


Podporované protokoly

Media Foundation podporuje následující protokoly:

  • Protokol RTSP (Real Time Streaming Protocol)

    RTSP se používá hlavně pro streamování mediálního obsahu. Může používat UDP nebo TCP jako přenosové protokoly. UDP je nejúčinnější pro doručování obsahu, protože režijní náklady na šířku pásma jsou menší než u protokolů založených na protokolu TCP. I když protokol TCP zajišťuje spolehlivé doručování paketů, protokol TCP není vhodný pro datové proudy digitálních médií, kde efektivní využití šířky pásma je důležitější než příležitostně ztracené pakety.

  • Protokol HTTP (Hypertext Transfer Protocol)

    PROTOKOL HTTP používá protokol TCP a používá se webovými servery. Schéma "httpd://" označuje, že zdroj je ke stažení z webového serveru. Protokol HTTP se používá také v případě bran firewall, které jsou obvykle nakonfigurované tak, aby přijímaly požadavky HTTP a obvykle odmítaly jiné streamovací protokoly.

Aplikace může získat protokoly podporované službou Media Foundation pomocí rozhraní MMFNetSchemeHandlerConfig. K tomu musí aplikace nejprve načíst počet protokolů voláním MMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols a poté získat typ protokolu na základě indexu voláním ADVISORNetSchemeHandlerConfig::GetSupportedProtocolType. Tato metoda vrátí jednu z hodnot definovaných v MFNETSOURCE_PROTOCOL_TYPE výčtu.

Aplikace může také získat schémata podporovaná zdrojovým překladačem voláním funkce MFGetSupportedSchemes.

Převrácení protokolu

Když aplikace jako schéma adresy URL určí "mms://", provede překladač zdrojového překladače operaci protokolu. V tomto procesu určuje zdrojový překladač nejlepší protokol pro síťový zdroj, který se má použít pro získání obsahu. Pro pařování médií je RTSP s UDP (RTSPU) efektivnější než HTTP. Pokud je ale obsah hostovaný na webovém serveru, je lepší volbou http.

K přechodu protokolu může dojít také v případě, že dojde k selhání pokusu o použití protokolu zadaného v schématu adresy URL. Protokol může například selhat, když brána firewall blokuje pakety UDP. V tomto případě se zdrojový překladač přepne na HTTP.

Převod protokolu se nepoužije, pokud schéma adresy URL obsahuje konkrétní protokol, například "rtspu://". Pokud se ověření nezdaří nebo server dosáhne limitu připojení klientů, neprovádí se také převod. Doporučuje se, aby aplikace zadaly schéma "mms://" a povolily překladač zdrojovému překladače vybrat nejlepší protokol pro daný scénář.

Následující tabulka uvádí pořadí přechodu.

Povolená schémata Pořadí vrácení protokolu
mms:// nebo rtsp:// Povolená rychlá mezipaměť:
  1. RTSP s protokolem TCP (RTSPT)
  2. RTSP s UDP (RTSPU)
  3. Streamování HTTP
  4. Stažení HTTP (HTTPD)
Rychlá mezipaměť je zakázaná:
  1. RTSPU
  2. RTSPT
  3. Streamování HTTP
  4. Stažení HTTP
rtspu:// RTSPU
rtspt:// RTSPT
https://
  1. HTTP
  2. HTTPD
httpd:// HTTPD

 

Načtení aktuálního protokolu

Po operaci převodu protokolu může zdroj sítě použít jiný protokol než protokol určený aplikací v schématu adresy URL. Výsledek převodu protokolu je k dispozici aplikaci po vytvoření připojení k serveru médií.

Chcete-li získat protokol a přenos, které se používají k získání obsahu, aplikace může načíst hodnoty vlastností pro vlastnost MFNETSOURCE_PROTOCOL a MFNETSOURCE_TRANSPORT vlastnost IPropertyStore objekt ze zdroje sítě.

Následující kód ukazuje, jak tyto hodnoty získat.

// 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);

    }

V předchozím příkladu kódu IPropertyStore::GetValue načte MFNETSOURCE_PROTOCOL hodnotu, což je člen MFNETSOURCE_PROTOCOL_TYPE výčtu. Pro MFNETSOURCE_TRANSPORT je hodnota členem MFNETSOURCE_TRANSPORT_TYPE výčtu.

Aplikace může také získat stejné hodnoty pomocí služby MFNETSOURCE_STATISTICS_SERVICE. Chcete-li použít tuto službu, může aplikace volat MFGetService funkci získat úložiště vlastností ze zdroje sítě. Toto úložiště vlastností obsahuje statistiky sítě ve vlastnosti MFNETSOURCE_STATISTICS. Hodnoty protokolu a přenosu lze načíst zadáním MFNETSOURCE_PROTOCOL_ID a MFNETSOURCE_TRANSPORT_ID – definovaného ve výčtu MFNETSOURCE_STATISTICS_IDS. Následující kód ukazuje, jak získat hodnoty protokolu a přenosu pomocí služby 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);

    }

Povolení a zakázání protokolů

Aplikace může nakonfigurovat zdroj sítě tak, aby se určité protokoly během procesu přechodu přeskočily. K tomu slouží vlastnosti zdroje sítě k zakázání konkrétních protokolů. V následující tabulce jsou uvedeny vlastnosti a protokoly, které řídí.

Vlastnost Popis
MFNETSOURCE_ENABLE_HTTP Povolí nebo zakáže HTTP a HTTPD.
MFNETSOURCE_ENABLE_RTSP Povolí nebo zakáže RTSPU a RTSPT.
MFNETSOURCE_ENABLE_TCP Povolí nebo zakáže RTSPT.
MFNETSOURCE_ENABLE_UDP Povolí nebo zakáže RTSPU.
MFNETSOURCE_ENABLE_DOWNLOAD Povolí nebo zakáže HTTPD.
MFNETSOURCE_ENABLE_STREAMING Povolí nebo zakáže RTSPU, RTSPT a HTTP.

 

sítě ve službě Media Foundation