Udostępnij przez


Konfigurowanie strumieni wideo

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. czytnika źródeł i składników zapisywania 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 danych 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.]

Strumienie wideo są bardziej elastyczne w konfiguracji niż strumienie audio. Dzieje się tak, ponieważ właściwości ramek tworzących film wideo mogą się znacznie różnić w zależności od jednego pliku do drugiego. Podczas pobierania formatu kodera dla używanego kodera, trzeba ustawić następujące wartości w obiektach konfiguracji strumienia wideo.

Wartość Opis
Szybkość bitów Wywołaj IWMStreamConfig::SetBitrate, aby ustawić żądaną wartość. Koder wideo spróbuje skompresować nośnik w celu spełnienia Twoich specyfikacji. Jeśli wartości są zbyt niskie, wynikowe skompresowane wideo będzie bardzo niskiej jakości.
Okno buforu Wywołaj IWMStreamConfig::SetBufferWindow, aby ustawić żądaną wartość. Koder wideo spróbuje skompresować nośnik w celu spełnienia Twoich specyfikacji. Jeśli wartości są zbyt niskie, wynikowy skompresowany film wideo będzie znacznie pogorszony.
WMVIDEOINFOHEADER.rcSource Lewy górny róg musi mieć wartość 0,0. Prawy dolny róg musi być ustawiony na wymiary ramki. Na przykład w strumieniu 640x480 te ustawienia to 0,0,640,480.
WMVIDEOINFOHEADER.rcTarget Musi być zgodna z rcSource.
WMVIDEOINFOHEADER.dwBitRate Musi być zgodna z szybkością transmisji bitów ustawioną dla strumienia.
WMVIDEOINFOHEADER.AvgTimePerFrame Ustaw przybliżony czas na ramkę.
BITMAPINFOHEADER.biWidth Ustaw na szerokość w pikselach żądanego rozmiaru ramki.
BITMAPINFOHEADER.biHeight Ustaw wartość na wysokość w pikselach żądanego rozmiaru ramki.

 

Zawartość wideo nie jest odtwarzana poprawnie, chyba że jest zakodowana w rozmiarze będącym wielokrotnością czterech zarówno dla szerokości, jak i wysokości. Wyjątkiem jest nieskompresowane wideo w formacie RGB, które może mieć dowolny rozmiar. Jeśli spróbujesz ustawić rozmiar, który nie jest wielokrotnością czterech, pisarz zwróci jeden z następujących błędów:

  • NIEPOPRAWNY_FORMAT_WEJŚCIA
  • NS_E_INVALID_OUTPUT_FORMAT - Nieprawidłowy format wyjściowy
  • NS_E_BŁĘDNYPROFIL

Jeśli używasz kodowania zmiennej szybkości bitów, może być konieczne wprowadzenie innych korekt. Aby uzyskać więcej informacji, zobacz Konfigurowanie strumieni VBR.

Niektóre koderi wideo systemu Windows Media obsługują wiele poziomów złożoności. Poziomy złożoności określają algorytmy, których kodek będzie używał podczas kodowania strumienia wideo. Użycie wysokiego poziomu złożoności wymaga większej mocy obliczeniowej do kodowania i dekodowania.

Każdy koder kodujący obsługujący ustawienia złożoności uwidacznia następujące ustawienia, które można pobrać za pomocą metody IWMCodecInfo3::GetCodecProp.

Ustawienie Opis
g_wszComplexityMax Maksymalny poziom jakości obsługiwany przez kodek.
g_wszComplexityOffline Sugerowany poziom jakości odtwarzania w trybie offline.
g_wszComplexityLive Sugerowany poziom jakości odtwarzania strumieniowego.

 

Aby ustawić złożoność strumienia wideo w profilu, użyj metody IWMPropertyVault::SetProperty, korzystając z właściwości g_wszComplexity. Ustawiona wartość musi być mniejsza lub równa maksymalnej obsługiwanej złożoności kodu.

konfiguracja wspólna dla wszystkich strumieni

Konfigurowanie strumieni

ustawienia złożoności wideo