Funkcje źródła sieci
Źródło sieci zapewnia podstawową implementację plików multimedialnych przesyłania strumieniowego i uwidacznia interfejsIMFMediaSource. Określona implementacja źródła sieci zależy od protokołu używanego do otwierania źródła, takiego jak RTSP lub HTTP. Źródła sieci specyficzne dla protokołu rozszerzają podstawową funkcjonalność sieci. Aby uzyskać informacje o obsługiwanych schematach i protokołach, zobacz Obsługiwane protokoły.
Źródło sieci:
- Implementuje funkcje, takie jak buforowanie, wykrywanie serwera proxy i automatyczne ponowne łączenie.
- Konwertuje wywołania niezależne od protokołu z modułu rozpoznawania źródła na wywołania specyficzne dla protokołu.
- Wchodzi w interakcje z warstwą gniazda i systemem operacyjnym. Analizuje opis protokołu SDP i używa go jako danych konfiguracji oraz odczytuje dane strumienia z podstawowej warstwy gniazd. Podczas odbierania źródło sieci jest odpowiedzialne za zmiana kolejności i żądanie ponownego transmisji pakietów.
Tworzenie źródła sieci
Tworzenie źródła multimediów dla źródła z sieci nie różni się od źródła multimediów dla pliku lokalnego. Aplikacja przekazuje adres URL źródła do metod rozpoznawania źródła, takich jak IMFSourceResolver::CreateObjectFromURL lub IMFSourceResolver::BeginCreateObjectFromURL i określa flagę MF_RESOLUTION_MEDIASOURCE. Aby uzyskać więcej informacji na temat używania tej flagi, zobacz Using the Source Resolver.
W zależności od schematu dostarczonego przez aplikację program rozpoznawania kodu źródłowego ładuje odpowiedni obiekt programu obsługi schematu, który uwidacznia interfejsprogramuIMFSchemeHandler. Aplikacja może również użyć procedury obsługi schematu bezpośrednio do utworzenia źródła sieci przez wywołanie IMFSchemeHandler::BeginCreateObject.
Aby uzyskać więcej informacji, zobacz Scheme Handlers and Byte-Stream Handlers.
Program Media Foundation nie obsługuje strumieni bajtów dla źródeł sieciowych. Obiekt strumienia bajtów jest obsługiwany tylko w scenariuszu pobranej zawartości. Wszystkie dane są przesyłane tak szybko, jak to możliwe, aby można je było zapisać jako plik na komputerze lokalnym. serwery internetowe zapewniają pobrane dane. Po rozpoczęciu pobierania nie ma komunikacji między klientem a serwerem. W tym przypadku jest używany protokół pobierania HTTP.
Jeśli aplikacja żąda źródłowego rozpoznawania nazw, aby utworzyć obiekt strumienia bajtów dla "http:", "mms:" lub "rtsp:", wywołanie kończy się niepowodzeniem z powodu błędu MF_E_UNSUPPORTED_SCHEME.
Nuta
W systemie Windows 7 źródło sieci obsługuje pliki programu Windows Media Station (. NSC). Te pliki są używane w multiemisji przesyłania strumieniowego zawartości multimedialnej za pośrednictwem sieci. Aby utworzyć źródło sieci dla określonego elementu . Plik NSC, aplikacja musi używać narzędzia rozpoznawania źródła.
Jeśli aplikacja używa programu obsługi schematu, wywołanie asynchroniczne ignoruje parametr dwFlags i zwraca wskaźnik do źródła sieci po zakończeniu.
Na poniższej ilustracji przedstawiono przepływ danych przesyłania strumieniowego multimediów przy użyciu źródła sieci.
Konfiguracja źródła sieci
W tym temacie opisano funkcje obsługiwane przez źródło sieci i skojarzone opcje konfiguracji. Aplikacja może skonfigurować źródło sieci podczas tworzenia obiektu źródłowego sieci. Te opcje są przechowywane w obiekcie IPropertyStore, który aplikacja musi przekazać w parametrze pProps metod rozpoznawania źródła lub IMFSchemeHandler::BeginCreateObject.
Automatyczne ponowne nawiązywanie połączenia
Funkcja automatycznego ponownego nawiązywania połączenia ze źródłem sieci umożliwia klientowi automatyczne nawiązywanie połączenia z serwerem multimediów, gdy połączenie TCP z serwerem kończy się niepowodzeniem lub klient nie odbiera pakietów. Gdy połączenie nie powiedzie się, źródło sieci próbuje ponownie nawiązać połączenie z serwerem multimediów przy użyciu tej samej konfiguracji, która została użyta w poprzednim połączeniu. Proces ponownego łączenia jest asynchroniczny. Źródło sieci zgłasza zdarzenie MEReconnectStart po rozpoczęciu ponownego nawiązywania połączenia, a zdarzenie MEReconnectEnd, gdy ponowne połączenie powiedzie się lub zakończy się niepowodzeniem.
Jeśli liczba ponownych prób nawiązania połączenia przekracza maksymalną wartość określoną przez właściwość MFNETSOURCE_AUTORECONNECTLIMIT, operacja ponownego łączenia zostanie anulowana. Liczba ponownych prób nawiązania połączenia jest przechowywana we właściwości MFNETSOURCE_AUTORECONNECTPROGRESS.
Automatyczne ponowne łączenie umożliwia płynne odtwarzanie zawartości multimedialnej nawet wtedy, gdy połączenie TCP z serwerem multimediów nie powiedzie się. W przypadku bezproblemowego odtwarzania klient musi mieć wystarczającą ilość danych, co najmniej od 1 do 2 minut, aby kontynuować odtwarzanie do czasu ponownego nawiązania połączenia. Maksymalna ilość danych, które może buforować źródło sieci, można ustawić we właściwości MFNETSOURCE_MAXBUFFERTIMEMS.
Szybkie przesyłanie strumieniowe
Klient źródła sieci żąda, aby serwer przesyłał strumieniowo niektóre dane na początku zawartości z szybkością szybciej niż określona przez szybkość transmisji bitów zawartości. Jeśli szybkiego uruchamiania jest włączona na serwerze, serwer wysyła przyspieszony strumień szybkości transmisji bitów, aby klient mógł buforować wystarczającą ilość danych szybciej niż w czasie rzeczywistym. Poprawia to środowisko użytkownika przez zminimalizowanie początkowych opóźnień buforowania, które mogą być spowodowane przez różne czynniki, takie jak niska szybkość komputera klienckiego lub sieci oraz dostępna przepustowość.
Aby określić ilość danych szybkiego przesyłania strumieniowego, których klient może zażądać, ustaw właściwość MFNETSOURCE_ACCELERATEDSTREAMINGDURATION. Jeśli źródło sieci używa protokołu UDP jako protokołu transportowego, określ maksymalną ilość danych szybkiego przesyłania strumieniowego, ustawiając właściwość MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION.
Szybkie przesyłanie strumieniowe na kliencie jest również możliwe za pośrednictwem funkcji Fast Cache — przesyłania strumieniowego zawartości na żądanie szybciej niż w czasie rzeczywistym i buforowania danych w lokalnej pamięci podręcznej klienta. Aby korzystać z tego typu szybkiego przesyłania strumieniowego, w źródle sieci musi być włączona szybka pamięć podręczna, a serwer musi go obsługiwać. Gdy klient żąda zawartości z serwera, źródło sieci najpierw sprawdza, czy zawartość znajduje się już w pamięci podręcznej klienta. Jeśli zawartość znajduje się w lokalnej pamięci podręcznej klienta i nie wygasła, jest renderowana. Jeśli zawartość nie znajduje się w lokalnej pamięci podręcznej lub już wygasła, zawartość jest przesyłana strumieniowo i buforowana, a źródło sieci odtwarza je z lokalnej pamięci podręcznej. W kolejnych żądaniach w przypadku list odtwarzania buforowane są tylko brakujące wpisy, a następnie odtwarzane. Jeśli wpis listy odtwarzania znajduje się już w lokalnej pamięci podręcznej klienta, jest odtwarzany z tego miejsca i nie jest ponownie buforowany.
Domyślnie szybka pamięć podręczna jest włączona na kliencie źródłowym sieci. Jednak następujące czynniki określają również, czy funkcja jest używana:
- Klient musi mieć dodatkową przepustowość dostępną do pobierania i buforowania zawartości szybciej niż normalna szybkość.
- Klient musi mieć wystarczającą ilość miejsca na dysku. Jeśli klient ma mniej niż 100 MB wolnego miejsca na dysku po buforowaniu żądanej zawartości na żądanie, nie jest buforowany, ale jest przesyłany strumieniowo i renderowany jednocześnie.
Funkcja fast cache jest kontrolowana przez właściwość MFNETSOURCE_CACHEENABLED.
Zarządzanie buforem
Źródło sieci zapewnia efektywne zarządzanie buforem, które monitoruje stan buforu na kliencie. Domyślnie źródło sieci buforuje 5 sekund danych podczas uruchamiania. Tę wartość można skonfigurować, ustawiając właściwość MFNETSOURCE_BUFFERINGTIME. Na podstawie tej wartości właściwości źródło sieci oblicza rozmiar buforu, który jest wystarczający, aby zapewnić bezproblemowe i nieprzerwane odtwarzanie zawartości multimedialnej. Jeśli ta właściwość jest ustawiona na 0, zarządzanie buforem jest wyłączone. Gdy ilość zawartości w buforze jest niska, źródło sieci rozpoczyna buforowanie i zgłasza MEBufferingStarted zdarzenie wskazujące, że rozpoczęto buforowanie. Po otrzymaniu tego zdarzenia potok zatrzymuje renderowanie. Po zakończeniu buforowania źródło sieci zgłasza zdarzenie MEBufferingStopped, a klient może ponownie rozpocząć renderowanie.
Klient rozpoczyna renderowanie zawartości po zebraniu ilości danych wskazywanych przez rozmiar buforu pierwszej próbki. Jeśli ta wartość jest niższa niż obliczony rozmiar buforu, odtwarzanie jest uruchamiane natychmiast. To zachowanie jest bardzo podobne do funkcji Szybkiego uruchamiania.
Właściwość MFNETSOURCE_MAXBUFFERTIMEMS przechowuje maksymalną ilość danych, które można buforować.
Wybór przepustowości
Gdy klient łączy się z serwerem multimediów w ramach konfiguracji połączenia, źródło sieci wykonuje statycznej pary pakietów pomiar, aby oszacować początkową przepustowość połączenia między klientem a serwerem. Na podstawie wyniku tego pomiaru klient może wybrać strumienie audio i wideo, które mieszczą się w szacowanej przepustowości. Zapewnia to bezproblemowe odtwarzanie zawartości multimediów przesyłanych strumieniowo.
Na etapie szybkiego uruchamiania jest wykonywana dynamiczna para pakietów pomiar. W tym procesie klient otrzymuje duże ilości danych, które mogą być wieloma pakietami lub przykładami.
Wynik dynamicznego pomiaru pary pakietów jest dokładniejszy niż szacowana przepustowość łącza zwrócona przez statyczny pomiar pary pakietów, ponieważ proces statycznej pary pakietów wysyła pojedynczy pakiet o stałym rozmiarze, co może nie przynieść dokładnych wyników dla sieci o wysokiej przepustowości.
Aplikacja może uzyskać szacowaną przepustowość przy użyciu właściwości MFNETSOURCE_PPBANDWIDTH.
Warunki sieciowe mogą się zmieniać dynamicznie, powodując usterki podczas odtwarzania źródła sieci. Źródło sieci może zmienić wybór początkowego strumienia klienta na podstawie szybkości odbierania i stanu buforu. Na przykład klient może przełączyć się na niższą szybkość bitów podczas przeciążenia sieci i przełączyć się z powrotem do wyższej szybkości bitów, gdy ruch sieciowy uległ poprawie, a klient zgromadził wystarczającą ilość buforowanej zawartości.
Tematy pokrewne