Udostępnij za pośrednictwem


Pisanie przykładów obrazów wideo

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik Źródła i Zapis Ujścia zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i modułu zapisu ujścia zamiast zestawu SDK Windows Media Format 11, jeśli 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.]

Strumień wideo to wideo, które zawiera serię nieruchomych obrazów. Obrazy można przenosić w ramach, a każdy obraz może stopniowo łączyć się z następnym. Strumienie obrazów wideo są zakodowane przy użyciu kodeka obrazu Windows Media Video 9 Image v2. Wideo wyjściowe jest podobne do tego, które zostało utworzone przez koder codec usługi Windows Media Video 9.

Aby utworzyć profil zawierający strumień obrazu wideo, zacznij od wyliczenia kodeków wideo zgodnie z opisem w Uzyskiwanie informacji o konfiguracji strumienia z kodeków video. Wyszukaj koder kodujący obsługujący podtyp WMMEDIASUBTYPE_WVP2.

Po ustawieniu profilu w obiekcie zapisywania, wywołaj metodę IWMWriter::GetInputProps, aby uzyskać właściwości multimediów dla strumienia wejściowego obrazu wideo. Pobierz typ nośnika z obiektu właściwości nośnika, wywołując IWMMediaProps::GetMediaTypei zmień podtyp na WMMEDIASUBTYPE_VIDEOIMAGE. Należy ustawić szerokość i wysokość wideo na maksymalne wymiary potrzebne do objęcia obrazów, które zostaną dodane do strumienia. Następnie wywołaj IWMMediaProps::SetMediaType z zmodyfikowanym typem wejściowym. Teraz możesz rozpocząć wysyłanie przykładów do obiektu modułu zapisywania.

Każda próbka musi zaczynać się od struktury WMT_VIDEOIMAGE_SAMPLE2. Ponadto przykłady mogą zawierać obrazy map bitowych. Obrazek jest dołączony tylko do próbki danych dla pierwszej klatki, w której się pojawia. Wszystkie dodatkowe ramki korzystające z tego obrazu wymagają jedynie informacji w strukturze. Wejściowe mapy bitowe muszą być sformatowane jako RGB, 24 bity na piksel.

Pliki bitmapowe przechowują dane obrazu, aby dane dla każdego wiersza obrazu zajmowały liczbę bajtów podzielną przez cztery. (Jest to nazywane krokiem mapy bitowej). Wymusza to rozpoczęcie każdego wiersza wideo na granicy DWORD, co zwiększa wydajność kopiowania. Jeśli wiersze obrazu nie są równomiernie podzielne przez cztery, wiersz jest dopełniany do najbliższej wyższej wielokrotności czterech bajtów. Podczas dołączania danych obrazu należy usunąć wszystkie dopełnienie, które istnieje na końcu danych dla każdego wiersza.

Kodek Windows Media Video 9 Image v2 jednocześnie przechowuje w pamięci maksymalnie dwa obrazy. Te obrazy są nazywane poprzednim obrazem i bieżącym obrazem. Każdy obraz ma zestaw elementów członkowskich w strukturze WMT_VIDEOIMAGE_SAMPLE2, co określa sposób prezentowania obrazu w ramce. Obraz można dodać, poprzez ustawienie członka dwControlFlags WMT_VIDEOIMAGE_SAMPLE2 na WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Po przekazaniu ramki wejściowej do kodera ten obraz staje się bieżącym obrazem. Obraz, który był bieżącym obrazem w poprzednim przykładzie, zwykle staje się poprzednim obrazem, a obraz, który był poprzednim obrazem w poprzedniej próbce, zostanie odrzucony. Można skonfigurować kodek, aby zachował poprzedni obraz, ustawiając element członkowski bKeepPrevImage na TRUE. W takim przypadku obraz, który był bieżącym obrazem w poprzedniej próbce, zostanie odrzucony.

Podstawowa kompozycja klatki obrazu wideo jest określana przez dwa czynniki dla każdego obrazu: obszar zainteresowania i współczynnik mieszania. Region zainteresowania obrazu jest definiowany przez punkt początkowy, szerokość i wysokość. Część obrazu opisana przez obszar zainteresowania wypełnia kadr wyjściowy. Jeśli region zainteresowania jest inny niż ramka wyjściowa, koder zmienia jego rozmiar. Współczynnik mieszania obrazu określa mieszanie dwóch obrazów. Współczynniki mieszanki dla bieżących i poprzednich obrazów muszą wynosić łącznie 1,0. Jeśli na przykład fCurrBlendCoef jest ustawiona na 0,5, a fPrevBlendCoef jest ustawiona na 0,5, ramka wyjściowa składa się z równej mieszanki obszarów zainteresowania z obu obrazów.

Manipulując obszarem zainteresowania obrazu, możesz utworzyć efekty przewijania i powiększenia. Współczynniki mieszanki umożliwiają zanikanie krzyżowe (rozpuszczanie) między obrazami. Oprócz tych efektów można użyć jednego ze wstępnie zdefiniowanych przejść, aby stworzyć bardziej złożone klatki. Dostępne przejścia opisano w sekcji Przejścia obrazów wideo tej dokumentacji. W przypadku korzystania z przejścia należy skonfigurować każdą ramkę. Najprostszym sposobem, aby to zrobić, jest utworzenie funkcji, która przyrostowo zmienia elementy członkowskie struktury WMT_VIDEOIMAGE_SAMPLE2 w celu uzyskania pełnego efektu.

Aby uzyskać więcej informacji na temat wartości do ustawienia deformacji, zobacz WMT_VIDEOIMAGE_SAMPLE2.

Uwaga Jeśli chcesz dołączyć dźwięk do pliku ze strumieniem obrazu wideo, musisz użyć nieskompresowanego wejścia audio. Aby połączyć strumień obrazu wideo z istniejącym skompresowanym strumieniem audio, należy zdekompresować dźwięk i przekazać próbki w sposób nieskompresowany. W przypadku przekazania skompresowanych próbek do zapisu podczas pisania strumienia obrazu wideo wystąpi błąd, co spowoduje pominięcie próbek z wideo.

Ponadto skompresowane pliki wideo bez strumieni audio mogą zawierać kilka bardzo małych, wysoce skompresowanych ramek wideo w jednym pakiecie ASF, co może spowodować słabą jakość odtwarzania w poprzednich wersjach programu Windows Media Player. Aby uniknąć tego problemu, najlepszym rozwiązaniem jest wstawienie dyskretnego strumienia audio do pliku, chociaż spowoduje to również zwiększenie rozmiaru pliku.

obraz wideo

zapisywania plików ASF