Unterstützte Protokolle

Media Foundation unterstützt die folgenden Protokolle:

  • Real Time Streaming Protocol (RTSP)

    RTSP wird hauptsächlich zum Streamen von Medieninhalten verwendet. UDP oder TCP kann als Transportprotokolle verwendet werden. UDP ist für die Inhaltsbereitstellung am effizientesten, da der Bandbreitenaufwand geringer ist als bei TCP-basierten Protokollen. Obwohl das TCP-Protokoll eine zuverlässige Paketbereitstellung gewährleistet, eignet sich TCP nicht gut für digitale Medienstreams, bei denen eine effiziente Nutzung der Bandbreite wichtiger ist als gelegentlich verlorene Pakete.

  • Hypertext Transfer-Protokoll (HTTP)

    HTTP verwendet TCP und wird von Webservern verwendet. Das Schema "httpd://" gibt an, dass die Quelle von einem Webserver heruntergeladen werden kann. HTTP wird auch bei Firewalls verwendet, die in der Regel so konfiguriert sind, dass sie HTTP-Anforderungen akzeptieren und in der Regel andere Streamingprotokolle ablehnen.

Die Anwendung kann die protokolle, die von Media Foundation, mithilfe der BENUTZEROBERFLÄCHENTnetSchemeHandlerConfig-Schnittstelle erhalten. Hierzu muss die Anwendung zuerst die Anzahl der Protokolle abrufen, indem sie DURCH AUFRUFEN VONSTNETSCHEMEHandlerConfig::GetNumberOfSupportedProtocols aufruft, und dann den Protokolltyp basierend auf dem Index abrufen, indem sie DURCH AUFRUFEN VONGENETSchemeHandlerConfig::GetSupportedProtocolType. Diese Methode gibt einen der In der MFNETSOURCE _ PROTOCOL _ TYPE-Enumeration definierten Werte zurück.

Die Anwendung kann auch die vom Quellre resolver unterstützten Schemas durch Aufrufen der MFGetSupportedSchemes-Funktion erhalten.

Protokollrollover

Wenn eine Anwendung "mms://" als URL-Schema angibt, führt der Quellre resolver einen Protokollrollovervorgang aus. In diesem Prozess bestimmt der Quellre resolver das beste Protokoll, das die Netzwerkquelle zum Abrufen des Inhalts verwenden kann. In der Regel ist RTSP mit UDP (RTSPU) für das Übertragen von Medien effizienter als HTTP. Wenn der Inhalt jedoch auf einem Webserver gehostet wird, ist HTTP die bessere Wahl.

Ein Protokollrollover kann auch auftreten, wenn beim Versuch, das im URL-Schema angegebene Protokoll zu verwenden, ein Fehler auftritt. Beispielsweise kann ein Protokoll fehlschlagen, wenn eine Firewall UDP-Pakete blockiert. In diesem Fall wechselt der Quellre resolver zu HTTP.

Das Protokollrollover gilt nicht, wenn das URL-Schema ein bestimmtes Protokoll enthält, z. B. "rtspu://". Außerdem wird kein Rollover ausgeführt, wenn die Authentifizierung fehlschlägt oder der Server ein Limit von Clientverbindungen erreicht hat. Es wird empfohlen, dass Anwendungen das Schema "mms://" angeben und dem Quellre resolver ermöglichen, das beste Protokoll für das Szenario auszuwählen.

In der folgenden Tabelle ist die Rollover-Reihenfolge aufgeführt.

Zulässige Schemas Reihenfolge des Protokollrollovers
mms:// oder rtsp:// Fast Cache enabled (Schneller Cache aktiviert):
  1. RTSP mit TCP (RTSPT)
  2. RTSP mit UDP (RTSPU)
  3. HTTP-Streaming
  4. HTTP-Download (HTTPD)
Schneller Cache deaktiviert:
  1. RTSPU
  2. RTSPT
  3. HTTP-Streaming
  4. HTTP-Download
rtspu:// RTSPU
rtspt:// RTSPT
https://
  1. HTTP
  2. HTTPD
httpd:// HTTPD

Abrufen des aktuellen Protokolls

Nach einem Protokollrollovervorgang verwendet die Netzwerkquelle möglicherweise ein anderes Protokoll als das, das von der Anwendung im URL-Schema angegeben wurde. Das Protokollrolloverergebnis ist für die Anwendung verfügbar, nachdem die Netzwerkquelle die Verbindung mit dem Medienserver hergestellt hat.

Um das Protokoll und den Transport abzurufen, die zum Abrufen des Inhalts verwendet werden, kann die Anwendung die Eigenschaftswerte für die MFNETSOURCE _ PROTOCOL-Eigenschaft und die MFNETSOURCE _ TRANSPORT-Eigenschaft eines IPropertyStore-Objekts aus der Netzwerkquelle abrufen.

Der folgende Code zeigt, wie diese Werte erhalten werden.

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

    }

Im vorherigen Beispielcode ruft IPropertyStore::GetValue den MFNETSOURCE PROTOCOL-Wert ab, der ein Member der _ MFNETSOURCE _ PROTOCOL _ TYPE-Enumeration ist. Für MFNETSOURCE _ TRANSPORT ist der Wert ein Member der MFNETSOURCE _ TRANSPORT _ TYPE-Enumeration.

Alternativ kann die Anwendung die gleichen Werte mithilfe des Diensts MFNETSOURCE _ STATISTICS _ SERVICE erhalten. Um diesen Dienst zu verwenden, kann die Anwendung die MFGetService-Funktion aufrufen, um den Eigenschaftenspeicher aus der Netzwerkquelle zu erhalten. Dieser Eigenschaftenspeicher enthält Netzwerkstatistiken in der MFNETSOURCE _ STATISTICS-Eigenschaft. Protokoll- und Transportwerte können durch Angabe der MFNETSOURCE-PROTOKOLL-ID und _ _ der MFNETSOURCE-TRANSPORT-ID abgerufen werden, die in der _ _ MFNETSOURCE _ STATISTICS _ IDS-Enumeration definiert sind. Der folgende Code zeigt, wie Sie die Protokoll- und Transportwerte mithilfe des MFNETSOURCE _ STATISTICS _ SERVICE-Diensts erhalten.

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

    }

Aktivieren und Deaktivieren von Protokollen

Die Anwendung kann die Netzwerkquelle so konfigurieren, dass bestimmte Protokolle während des Rolloverprozesses übersprungen werden. Zu diesem Grund werden Netzwerkquelleneigenschaften verwendet, um bestimmte Protokolle zu deaktivieren. Die folgende Tabelle zeigt die Eigenschaften und die Protokolle, die sie steuern.

Eigenschaft BESCHREIBUNG
MFNETSOURCE: _ HTTP _ AKTIVIEREN Aktiviert oder deaktiviert HTTP und HTTPD.
MFNETSOURCE _ ENABLE _ RTSP Aktiviert oder deaktiviert RTSPU und RTSPT.
MFNETSOURCE AKTIVIEREN _ VON _ TCP Aktiviert oder deaktiviert RTSPT.
MFNETSOURCE: _ _ UDP AKTIVIEREN Aktiviert oder deaktiviert RTSPU.
MFNETSOURCE: _ DOWNLOAD _ AKTIVIEREN Aktiviert oder deaktiviert HTTPD.
MFNETSOURCE: _ STREAMING _ AKTIVIEREN Aktiviert oder deaktiviert RTSPU, RTSPT und HTTP.

Netzwerk in Media Foundation