Condividi tramite


Protocolli supportati

Media Foundation supporta i protocolli seguenti:

  • RtSP (Real Time Streaming Protocol)

    RTSP viene usato principalmente per lo streaming di contenuti multimediali. Può usare UDP o TCP come protocolli di trasporto. UDP è il più efficiente per la distribuzione di contenuti perché il sovraccarico della larghezza di banda è minore rispetto ai protocolli basati su TCP. Anche se il protocollo TCP garantisce un recapito affidabile dei pacchetti, TCP non è adatto per i flussi multimediali digitali, in cui l'uso efficiente della larghezza di banda è più importante rispetto ai pacchetti persi occasionali.

  • Protocollo HTTP (Hypertext Transfer Protocol)

    HTTP usa TCP e viene usato dai server Web. Lo schema "httpd://" indica che l'origine è scaricabile da un server Web. HTTP viene usato anche in caso di firewall, che in genere sono configurati per accettare richieste HTTP e in genere rifiutano altri protocolli di streaming.

L'applicazione può ottenere i protocolli supportati da Media Foundation usando l'interfacciaIMFNetSchemeHandlerConfig. A tale scopo, l'applicazione deve prima recuperare il numero di protocolli chiamando IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols e quindi ottenere il tipo di protocollo in base all'indice chiamando IMFNetSchemeHandlerConfig::GetSupportedProtocolType. Questo metodo restituisce uno dei valori definiti nell'enumerazione MFNETSOURCE_PROTOCOL_TYPE.

L'applicazione può anche ottenere gli schemi supportati dal resolver di origine chiamando la funzioneMFGetSupportedSchemes.

Rollover del protocollo

Quando un'applicazione specifica "mms://" come schema URL, il resolver di origine esegue un'operazione di rollover del protocollo . In questo processo, il resolver di origine determina il protocollo migliore da usare per l'origine di rete per ottenere il contenuto. In genere, per il vapore multimediale, RTSP con UDP (RTSPU) è più efficiente rispetto a HTTP. Tuttavia, se il contenuto è ospitato in un server Web, HTTP è una scelta migliore.

Il rollover del protocollo può verificarsi anche quando un tentativo di usare il protocollo specificato nello schema URL ha esito negativo. Ad esempio, un protocollo può avere esito negativo quando un firewall blocca i pacchetti UDP. In questo caso, il sistema di risoluzione di origine passa a HTTP.

Il rollover del protocollo non si applica se lo schema URL contiene un protocollo specifico, ad esempio "rtspu://". Inoltre, il rollover non viene eseguito se l'autenticazione ha esito negativo o il server ha raggiunto un limite di connessioni client. È consigliabile che le applicazioni specifichino lo schema "mms://" e consentano al resolver di origine di selezionare il protocollo migliore per lo scenario.

La tabella seguente elenca l'ordine di rollover.

Schemi consentiti Ordine di rollover del protocollo
mms:// o rtsp:// Cache veloce abilitata:
  1. RTSP con TCP (RTSPT)
  2. RTSP con UDP (RTSPU)
  3. HTTP Streaming
  4. Download HTTP (HTTPD)
Cache veloce disabilitata:
  1. RTSPU
  2. RTSPT
  3. HTTP Streaming
  4. HTTP Download
rtspu:// RTSPU
rtspt:// RTSPT
https://
  1. HTTP
  2. HTTPD
httpd:// HTTPD

 

Recupero del protocollo corrente

Dopo un'operazione di rollover del protocollo, l'origine di rete potrebbe usare un protocollo diverso da quello specificato dall'applicazione nello schema URL. Il risultato del rollover del protocollo è disponibile per l'applicazione dopo che l'origine di rete stabilisce la connessione con il server multimediale.

Per ottenere il protocollo e il trasporto utilizzati per ottenere il contenuto, l'applicazione può recuperare i valori delle proprietà per la proprietà MFNETSOURCE_PROTOCOL e la proprietà MFNETSOURCE_TRANSPORT di un oggetto IPropertyStore dall'origine di rete.

Il codice seguente illustra come ottenere questi valori.

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

    }

Nel codice di esempio precedente IPropertyStore::GetValue recupera il valore MFNETSOURCE_PROTOCOL, che è un membro dell'enumerazione MFNETSOURCE_PROTOCOL_TYPE. Per MFNETSOURCE_TRANSPORT, il valore è un membro dell'enumerazione MFNETSOURCE_TRANSPORT_TYPE.

In alternativa, l'applicazione può ottenere gli stessi valori usando il servizio MFNETSOURCE_STATISTICS_SERVICE. Per usare questo servizio, l'applicazione può chiamare la funzioneMFGetServiceper ottenere l'archivio delle proprietà dall'origine di rete. Questo archivio delle proprietà contiene statistiche di rete nella proprietà MFNETSOURCE_STATISTICS. I valori di protocollo e trasporto possono essere recuperati specificando MFNETSOURCE_PROTOCOL_ID e MFNETSOURCE_TRANSPORT_ID, definiti nell'enumerazione MFNETSOURCE_STATISTICS_IDS. Il codice seguente illustra come ottenere il protocollo e i valori di trasporto usando il servizio 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);

    }

Abilitazione e disabilitazione dei protocolli

L'applicazione può configurare l'origine di rete in modo che determinati protocolli vengano ignorati durante il processo di rollover. A tale scopo, le proprietà dell'origine di rete vengono usate per disabilitare protocolli specifici. Nella tabella seguente vengono illustrate le proprietà e i protocolli che controllano.

Proprietà Descrizione
MFNETSOURCE_ENABLE_HTTP Abilita o disabilita HTTP e HTTPD.
MFNETSOURCE_ENABLE_RTSP Abilita o disabilita RTSPU e RTSPT.
MFNETSOURCE_ENABLE_TCP Abilita o disabilita RTSPT.
MFNETSOURCE_ENABLE_UDP Abilita o disabilita la RTSPU.
MFNETSOURCE_ENABLE_DOWNLOAD Abilita o disabilita HTTPD.
MFNETSOURCE_ENABLE_STREAMING Abilita o disabilita RTSPU, RTSPT e HTTP.

 

Networking in Media Foundation