Dela via


Protokoll som stöds

Media Foundation stöder följande protokoll:

  • RTSP (Real Time Streaming Protocol)

    RTSP används främst för direktuppspelning av medieinnehåll. Den kan använda UDP eller TCP som transportprotokoll. UDP är det mest effektiva för innehållsleverans eftersom bandbreddskostnaderna är mindre än med TCP-baserade protokoll. Även om TCP-protokollet garanterar tillförlitlig paketleverans är TCP inte väl lämpat för digitala medieströmmar, där effektiv användning av bandbredd är viktigare än enstaka förlorade paket.

  • Hypertext Transfer Protocol (HTTP)

    HTTP använder TCP och används av webbservrar. Schemat "httpd://" anger att källan kan laddas ned från en webbserver. HTTP används också i händelse av brandväggar, som vanligtvis är konfigurerade för att acceptera HTTP-begäranden och vanligtvis avvisar andra direktuppspelningsprotokoll.

Programmet kan hämta protokoll som stöds av Media Foundation med hjälp av IMFNetSchemeHandlerConfig-gränssnittet. För att göra detta måste programmet först hämta antalet protokoll genom att anropa IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols och sedan hämta protokolltypen baserat på indexet genom att anropa IMFNetSchemeHandlerConfig::GetSupportedProtocolType. Den här metoden returnerar ett av de värden som definierats i MFNETSOURCE_PROTOCOL_TYPE uppräkning.

Programmet kan också hämta de scheman som stöds av källlösaren genom att anropa funktionen MFGetSupportedSchemes.

Protokollåterställning

När ett program anger "mms://" som URL-schema utför källlösaren en protokollåterställning åtgärd. I den här processen avgör källmatcharen det bästa protokollet för nätverkskällan som ska användas för att hämta innehållet. För medieångning är RTSP med UDP (RTSPU) vanligtvis effektivare än HTTP. Men om innehållet finns på en webbserver är HTTP ett bättre val.

Protokollåterställning kan också inträffa när ett försök att använda protokollet som anges i URL-schemat misslyckas. Ett protokoll kan till exempel misslyckas när en brandvägg blockerar UDP-paket. I det här fallet växlar källlösaren till HTTP.

Protokollåterställning gäller inte om URL-schemat innehåller ett specifikt protokoll, till exempel "rtspu://". Dessutom utförs inte rollover om autentiseringen misslyckas eller om servern har nått en gräns för klientanslutningar. Vi rekommenderar att program anger schemat "mms://" och låter källlösaren välja det bästa protokollet för scenariot.

I följande tabell visas rollover-ordningen.

Scheman tillåts Distributionsordning för protokoll
mms:// eller rtsp:// Snabb cache aktiverad:
  1. RTSP med TCP (RTSPT)
  2. RTSP med UDP (RTSPU)
  3. HTTP-direktuppspelning
  4. HTTP-nedladdning (HTTPD)
Snabb cache har inaktiverats:
  1. RTSPU
  2. RTSPT
  3. HTTP-direktuppspelning
  4. HTTP-nedladdning
rtspu:// RTSPU
rtspt:// RTSPT
https://
  1. HTTP
  2. HTTPD
httpd:// HTTPD

 

Hämtar aktuellt protokoll

Efter en protokollåterställningsåtgärd kan nätverkskällan använda ett annat protokoll än det som angetts av programmet i URL-schemat. Protokollets rollover-resultat är tillgängligt för programmet när nätverkskällan har upprättat anslutningen till medieservern.

För att hämta protokollet och transporten som används för att hämta innehållet kan programmet hämta egenskapsvärdena för egenskapen MFNETSOURCE_PROTOCOL och egenskapen MFNETSOURCE_TRANSPORT för ett IPropertyStore- objekt från nätverkskällan.

Följande kod visar hur du hämtar dessa värden.

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

    }

I föregående exempelkod hämtar IPropertyStore::GetValue värdet MFNETSOURCE_PROTOCOL, som är medlem i MFNETSOURCE_PROTOCOL_TYPE uppräkning. För MFNETSOURCE_TRANSPORT är värdet medlem i MFNETSOURCE_TRANSPORT_TYPE uppräkning.

Alternativt kan programmet få samma värden med hjälp av MFNETSOURCE_STATISTICS_SERVICE-tjänsten. Om du vill använda den här tjänsten kan programmet anropa funktionen MFGetService för att hämta egenskapsarkivet från nätverkskällan. Det här egenskapsarkivet innehåller nätverksstatistik i egenskapen MFNETSOURCE_STATISTICS. Protokoll- och transportvärden kan hämtas genom att ange MFNETSOURCE_PROTOCOL_ID och MFNETSOURCE_TRANSPORT_ID – definierade i MFNETSOURCE_STATISTICS_IDS uppräkning. Följande kod visar hur du hämtar protokoll- och transportvärdena med hjälp av MFNETSOURCE_STATISTICS_SERVICE-tjänsten.

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

    }

Aktivera och inaktivera protokoll

Programmet kan konfigurera nätverkskällan så att vissa protokoll hoppas över under rollover-processen. För att göra detta används egenskaper för nätverkskällor för att inaktivera specifika protokoll. I följande tabell visas de egenskaper och protokoll som de styr.

Egenskap Beskrivning
MFNETSOURCE_ENABLE_HTTP Aktiverar eller inaktiverar HTTP och HTTPD.
MFNETSOURCE_ENABLE_RTSP Aktiverar eller inaktiverar RTSPU och RTSPT.
MFNETSOURCE_ENABLE_TCP Aktiverar eller inaktiverar RTSPT.
MFNETSOURCE_ENABLE_UDP Aktiverar eller inaktiverar RTSPU.
MFNETSOURCE_ENABLE_DOWNLOAD Aktiverar eller inaktiverar HTTPD.
MFNETSOURCE_ENABLE_STREAMING Aktiverar eller inaktiverar RTSPU, RTSPT och HTTP.

 

Nätverk i Media Foundation