Unterstützte Protokolle
Media Foundation unterstützt die folgenden Protokolle:
Real Time Streaming Protocol (RTSP)
RTSP wird hauptsächlich zum Streamen von Medieninhalten verwendet. Sie kann UDP oder TCP als Transportprotokolle verwenden. UDP ist die effizienteste Für die Inhaltsübermittlung, da der Bandbreitenaufwand geringer ist als bei TCP-basierten Protokollen. Obwohl das TCP-Protokoll eine zuverlässige Paketübermittlung 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 Protocol (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 für die Annahme von HTTP-Anforderungen konfiguriert sind und in der Regel andere Streamingprotokolle ablehnen.
Die Anwendung kann die von Media Foundation unterstützten Protokolle mithilfe der IMFNetSchemeHandlerConfig Schnittstelle abrufen. Dazu muss die Anwendung zunächst die Anzahl der Protokolle abrufen, indem sie IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols aufruft und dann den Protokolltyp basierend auf dem Index abruft, indem IMFNetSchemeHandlerConfig::GetSupportedProtocolTypeaufgerufen wird. Diese Methode gibt einen der in der MFNETSOURCE_PROTOCOL_TYPE Enumeration definierten Werte zurück.
Die Anwendung kann auch die vom Quelllöser unterstützten Schemas abrufen, indem sie die funktion MFGetSupportedSchemes aufrufen.
Protokollrollover
Wenn eine Anwendung "mms://" als URL-Schema angibt, führt der Quelllöser einen Protokollrollover Vorgang aus. In diesem Prozess bestimmt der Quelllöser das beste Protokoll für die Netzwerkquelle, das zum Abrufen des Inhalts verwendet werden soll. Für Mediendampf ist RTSP mit UDP (RTSPU) in der Regel effizienter als HTTP. Wenn der Inhalt jedoch auf einem Webserver gehostet wird, ist HTTP eine bessere Wahl.
Das 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 Quelllöser zu HTTP.
Das Protokollrollover gilt nicht, wenn das URL-Schema ein bestimmtes Protokoll enthält, z. B. "rtspu://". Darüber hinaus wird der Rollover nicht ausgeführt, wenn die Authentifizierung fehlschlägt oder der Server einen Grenzwert für Clientverbindungen erreicht hat. Es wird empfohlen, dass Anwendungen das Schema "mms://" angeben und dem Quelllöser erlauben, das beste Protokoll für das Szenario auszuwählen.
In der folgenden Tabelle sind die Rolloverreihenfolge aufgeführt.
Zulässige Schemas | Protokollrolloverreihenfolge |
---|---|
mms:// oder rtsp:// | Schneller Cache aktiviert:
|
rtspu:// | RTSPU |
rtspt:// | RTSPT |
https:// |
|
httpd:// | HTTPD |
Abrufen des aktuellen Protokolls
Nach einem Protokollrollovervorgang verwendet die Netzwerkquelle möglicherweise ein anderes Protokoll als das protokoll, das von der Anwendung im URL-Schema angegeben wurde. Das Protokollrollover-Ergebnis ist für die Anwendung verfügbar, nachdem die Netzwerkquelle die Verbindung mit dem Medienserver hergestellt hat.
Um das Protokoll und den Transport abzurufen, das zum Abrufen des Inhalts verwendet wird, 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 Sie diese Werte abrufen.
// 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 Element der MFNETSOURCE_PROTOCOL_TYPE-Aufzählung ist. Bei MFNETSOURCE_TRANSPORT ist der Wert ein Element der MFNETSOURCE_TRANSPORT_TYPE-Aufzählung.
Alternativ kann die Anwendung dieselben Werte mithilfe des MFNETSOURCE_STATISTICS_SERVICE-Diensts abrufen. Um diesen Dienst zu verwenden, kann die Anwendung die MFGetService--Funktion aufrufen, um den Eigenschaftenspeicher aus der Netzwerkquelle abzurufen. Dieser Eigenschaftenspeicher enthält Netzwerkstatistiken in der eigenschaft MFNETSOURCE_STATISTICS. Protokoll- und Transportwerte können abgerufen werden, indem sie MFNETSOURCE_PROTOCOL_ID und MFNETSOURCE_TRANSPORT_ID angeben, 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 abrufen.
// 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. Hierzu werden Netzwerkquelleigenschaften verwendet, um bestimmte Protokolle zu deaktivieren. In der folgenden Tabelle sind die Eigenschaften und die Protokolle aufgeführt, die sie steuern.
Eigentum | Beschreibung |
---|---|
MFNETSOURCE_ENABLE_HTTP | Aktiviert oder deaktiviert HTTP und HTTPD. |
MFNETSOURCE_ENABLE_RTSP | Aktiviert oder deaktiviert RTSPU und RTSPT. |
MFNETSOURCE_ENABLE_TCP | Aktiviert oder deaktiviert RTSPT. |
MFNETSOURCE_ENABLE_UDP | Aktiviert oder deaktiviert RTSPU. |
MFNETSOURCE_ENABLE_DOWNLOAD | Aktiviert oder deaktiviert HTTPD. |
MFNETSOURCE_ENABLE_STREAMING | Aktiviert oder deaktiviert RTSPU, RTSPT und HTTP. |
Verwandte Themen