Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Media Foundation obsługuje następujące protokoły:
Protokół przesyłania strumieniowego w czasie rzeczywistym (RTSP)
Protokół RTSP jest używany głównie do przesyłania strumieniowego zawartości multimedialnej. Może używać protokołu UDP lub TCP jako protokołów transportowych. Protokół UDP jest najbardziej wydajny w przypadku dostarczania zawartości, ponieważ obciążenie przepustowości jest mniejsze niż w przypadku protokołów opartych na protokole TCP. Mimo że protokół TCP zapewnia niezawodne dostarczanie pakietów, protokół TCP nie jest dobrze odpowiedni dla strumieni multimediów cyfrowych, gdzie efektywne wykorzystanie przepustowości jest ważniejsze niż sporadyczne utracone pakiety.
Protokół HTTP (Hypertext Transfer Protocol)
Protokół HTTP używa protokołu TCP i jest używany przez serwery internetowe. Schemat "httpd://" wskazuje, że źródło można pobrać z serwera internetowego. Protokół HTTP jest również używany w przypadku zapór, które są zwykle skonfigurowane do akceptowania żądań HTTP i zwykle odrzucają inne protokoły przesyłania strumieniowego.
Aplikacja może uzyskać protokoły obsługiwane przez program Media Foundation przy użyciu interfejsu IMFNetSchemeHandlerConfig. Aby to zrobić, aplikacja musi najpierw pobrać liczbę protokołów, wywołując IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols, a następnie uzyskać typ protokołu na podstawie indeksu, wywołując IMFNetSchemeHandlerConfig::GetSupportedProtocolType. Ta metoda zwraca jedną z wartości zdefiniowanych w wyliczeniem MFNETSOURCE_PROTOCOL_TYPE.
Aplikacja może również uzyskać schematy obsługiwane przez program rozpoznawania źródła, wywołując funkcję MFGetSupportedSchemes.
Przerzucanie protokołu
Gdy aplikacja określa "mms://" jako schemat adresu URL, program rozpoznawania źródła wykonuje operację przerzucania protokołu. W tym procesie program rozpoznawania źródła określa najlepszy protokół dla źródła sieci do użycia na potrzeby pobierania zawartości. Zazwyczaj w przypadku parowania multimediów protokół RTSP z protokołem UDP (RTSPU) jest bardziej wydajny niż HTTP. Jednak jeśli zawartość jest hostowana na serwerze internetowym, protokół HTTP jest lepszym wyborem.
Przerzucanie protokołu może również wystąpić, gdy próba użycia protokołu określonego w schemacie adresów URL kończy się niepowodzeniem. Na przykład protokół może zakończyć się niepowodzeniem, gdy zapora blokuje pakiety UDP. W takim przypadku program rozpoznawania źródła przełącza się na protokół HTTP.
Przerzucanie protokołu nie ma zastosowania, jeśli schemat adresu URL zawiera określony protokół, taki jak "rtspu://". Ponadto przerzucanie nie jest wykonywane, jeśli uwierzytelnianie nie powiedzie się lub serwer osiągnął limit połączeń klientów. Zaleca się, aby aplikacje określały schemat "mms://" i zezwalały programowi rozpoznawania źródła na wybór najlepszego protokołu dla scenariusza.
W poniższej tabeli wymieniono kolejność przerzucania.
| Dozwolone schematy | Kolejność przerzucania protokołu |
|---|---|
| mms:// lub rtsp:// | Włączono szybką pamięć podręczną:
|
| rtspu:// | RTSPU |
| rtspt:// | RTSPT |
| https:// |
|
| httpd:// | HTTPD |
Pobieranie bieżącego protokołu
Po operacji przerzucania protokołu źródło sieci może używać protokołu innego niż ten określony przez aplikację w schemacie adresów URL. Wynik przerzucania protokołu jest dostępny dla aplikacji po nawiązaniu połączenia ze źródłem sieciowym z serwerem multimediów.
Aby uzyskać protokół i transport używany do pobierania zawartości, aplikacja może pobrać wartości właściwości dla właściwości MFNETSOURCE_PROTOCOL oraz właściwość MFNETSOURCE_TRANSPORT obiektu IPropertyStore ze źródła sieci.
Poniższy kod pokazuje, jak uzyskać te wartości.
// 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);
}
W poprzednim przykładowym kodzie IPropertyStore::GetValue pobiera wartość MFNETSOURCE_PROTOCOL, która jest elementem członkowskim wyliczenia MFNETSOURCE_PROTOCOL_TYPE. W przypadku MFNETSOURCE_TRANSPORT wartość jest elementem członkowskim wyliczenia MFNETSOURCE_TRANSPORT_TYPE.
Alternatywnie aplikacja może uzyskać te same wartości przy użyciu usługi MFNETSOURCE_STATISTICS_SERVICE. Aby użyć tej usługi, aplikacja może wywołać funkcję MFGetService w celu pobrania magazynu właściwości ze źródła sieci. Ten magazyn właściwości zawiera statystyki sieciowe we właściwości MFNETSOURCE_STATISTICS. Wartości protokołu i transportu można pobrać, określając MFNETSOURCE_PROTOCOL_ID i MFNETSOURCE_TRANSPORT_ID — zdefiniowane w wyliczenie MFNETSOURCE_STATISTICS_IDS. Poniższy kod pokazuje, jak uzyskać protokół i wartości transportu przy użyciu usługi 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);
}
Włączanie i wyłączanie protokołów
Aplikacja może skonfigurować źródło sieci, aby niektóre protokoły zostały pominięte podczas procesu przerzucania. W tym celu właściwości źródła sieci są używane do wyłączania określonych protokołów. W poniższej tabeli przedstawiono właściwości i protokoły, które kontrolują.
| Własność | Opis |
|---|---|
| MFNETSOURCE_ENABLE_HTTP | Włącza lub wyłącza protokół HTTP i HTTPD. |
| MFNETSOURCE_ENABLE_RTSP | Włącza lub wyłącza rtSPU i RTSPT. |
| MFNETSOURCE_ENABLE_TCP | Włącza lub wyłącza protokół RTSPT. |
| MFNETSOURCE_ENABLE_UDP | Włącza lub wyłącza funkcję RTSPU. |
| MFNETSOURCE_ENABLE_DOWNLOAD | Włącza lub wyłącza protokół HTTPD. |
| MFNETSOURCE_ENABLE_STREAMING | Włącza lub wyłącza protokół RTSPU, RTSPT i HTTP. |
Tematy pokrewne