Udostępnij przez


Aby przesłać skompresowane próbki za pomocą czytnika asynchronicznego

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez czytnik źródłowy i zapisator ujścia . Czytnik źródeł i Pisak ujścia zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i modułu zapisywania ujścia zamiast zestawu SDK windows Media Format 11, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Czytnik asynchroniczny może dostarczać skompresowane próbki ze strumieni w plikach ASF. Aplikacje zwykle dostarczają skompresowane próbki podczas kopiowania strumienia z jednego pliku do innego. Nie zaleca się ponownego komkompresowania danych, które zostały zrekonstruowane ze skompresowanego strumienia, ponieważ dane są tracone w procesie kodowania. Nośniki cyfrowe, które zostały skompresowane więcej niż raz, będą miały zauważalny spadek jakości.

Zestaw SDK formatu Windows Media nie udostępnia żadnych metod dekodowania danych po wyodrębnieniu ich z pliku ASF. Jeśli otrzymasz skompresowane przykłady, a później chcesz je zdekompresować, musisz podać własny kod, aby to zrobić. Jednym ze sposobów obejścia tego ograniczenia jest zapisanie skompresowanych próbek do nowego pliku ASF, a następnie ponowne odczytanie ich do normalnych, nieskompresowanych próbek.

Aby otrzymywać skompresowane próbki za pomocą czytnika asynchronicznego, wykonaj następujące kroki.

  1. Zaimplementuj wywołanie zwrotne IWMReaderCallbackAdvanced::OnStreamSample. To wywołanie zwrotne jest zasadniczo identyczne w funkcji IWMReaderCallback::OnSample z tą różnicą, że dostarcza próbki według numeru strumienia, a próbki są nadal kompresowane.
  2. Przed rozpoczęciem odtwarzania uzyskaj wskaźnik do interfejsu IWMReaderAdvanced obiektu czytnika, wywołując IWMReader::QueryInterface.
  3. Skonfiguruj czytnik tak, aby dostarczał skompresowane przykłady dla żądanego strumienia, wywołując IWMReaderAdvanced::SetReceiveStreamSamples.
  4. Powtórz krok 3 dla każdego strumienia, dla którego wymagane jest skompresowane dostarczanie próbki.

Notatka

Strumienie obrazów nie są prawidłowe w przypadku dostarczania skompresowanego strumienia. Jeśli skopiujesz strumień obrazu z jednego pliku do innego, nie będzie działać w nowym pliku. Aby skopiować strumień obrazu z pliku do pliku, pobierz próbki strumienia obrazów według numeru wyjściowego i dołącz je do nowego pliku tak, jakby zawierał nowy strumień obrazu.

 

interfejs IWMReaderCallbackAdvanced

odczytywanie plików za pomocą asynchronicznego czytnika