Po półtora roku prac rozwoju, zadebiutował GStreamer 1.20, wieloplatformowy zbiór komponentów napisany w języku C, przeznaczony do tworzenia różnorodnych aplikacji multimedialnych, od odtwarzaczy i konwerterów plików audio/wideo, po aplikacje VoIP i systemy strumieniowe. Kod GStreamer jest udostępniany na licencji LGPLv2.1. Jednocześnie dostępne są aktualizacje wtyczek gst-plugins-base 1.20, gst-plugins-good 1.20, gst-plugins-bad 1.20, gst-plugins-ugly 1.20, a także wiązania gst-libav 1.20 i serwera strumieniowego gst-rtsp-server 20. Na poziomie API i ABI, nowa wersja jest w pełni kompatybilna wstecz z gałęzią 1.0. Binarne wersje zostaną wkrótce przygotowane dla Androida, iOS, macOS i Windows (w Linuxie zaleca się korzystanie z pakietów z dystrybucji).
Kluczowe usprawnienia GStreamer 1.20:
- Rozwój na GitLab został przeniesiony do jednego repozytorium, wspólnego dla wszystkich modułów.
- Dodano nową, wysokopoziomową bibliotekę GstPlay, która zastępuje API GstPlayer i oferuje podobne funkcje do odtwarzania treści, różniące się tym, że do powiadamiania aplikacji wykorzystuje szynę komunikatów zamiast sygnałów GObject.
- Dodano wsparcie dla dekodowania informacji o przezroczystości w formacie WebM, co umożliwia odtwarzanie wideo VP8/VP9 z przezroczystymi obszarami.
- Do profili kodowania dodano wsparcie dla konfiguracji dodatkowych właściwości specyficznych dla aplikacji.
- W Compositor wprowadzono wsparcie dla transformacji i mieszania wideo w trybie wielowątkowym.
- W klasach depayloader i payloader ujednolicono wsparcie dla dodatkowych nagłówków RTP (RTP Header Extensions).
- Dodano wsparcie dla mechanizmu korekcji błędów SMPTE 2022-1 2-D (Forward Error Correction).
- W encodebin i transcodebin dla kodeków VP8, VP9 i H.265 wprowadzono inteligentny tryb kodowania („smart encoding”), w którym rekonwersja odbywa się tylko w razie konieczności, a w pozostałym czasie przepływ istniejącego strumienia jest nieprzerwany.
- Zapewniono zgodność wtyczki souphttpsrc z libsoup2 i libsoup3.
- Dodano możliwość dekodowania danych wejściowych na poziomie klatek pośrednich (sub-frame), co pozwala rozpocząć dekodowanie, nie czekając na pełną klatkę. Wsparcie dla tej optymalizacji jest wykorzystywane w dekoderach OpenJPEG JPEG 2000, FFmpeg H.264 i OpenMAX H.264/H.265.
- Podczas dekodowania wideo dla protokołów RTP, WebRTC i RTSP zapewniono automatyczne przetwarzanie utraty pakietów, uszkodzeń danych i żądań kluczowych klatek.
- Do pakietów kontenerów medialnych mp4 i Matroska dodano wsparcie dla zmiany danych kodeka w locie, co umożliwia modyfikację profilu, poziomu i rozdzielczości dla strumieni wejściowych H.264/H.265.
- Dodano tryb tworzenia fragmentowanych kontenerów mp4.
- W porcie opartym na WPE (WebKit Port for Embedded) dodano wsparcie dla dźwięku.
- Dodano możliwość wykorzystania CUDA do konwersji przestrzeni kolorów, skalowania elementów i ładowania elementów.
- Dla elementów OpenGL glupload i gldownload dodano wsparcie dla pamięci NVMM (NVIDIA Memory Module).
- Ulepszono wsparcie WebRTC.
- Zaproponowano nowy plugin dla VA-API (Video Acceleration API), wspierający więcej dekoderów i elementów postprocessingu.
- W API AppSink dodano wsparcie dla zdarzeń oprócz buforów i list buforów.
- W AppSrc dodano dodatkowe ustawienia wewnętrznych kolejek.
- Zaktualizowano wiązania w języku Rust i dodano 26 nowych pluginów napisanych w Rust (gst-plugins-rs).
- Dodano elementy aesdec i aesenc do szyfrowania i deszyfrowania z wykorzystaniem algorytmu AES.
- Dodano elementy fakeaudiosink i videocodectestsink do testowania i debugowania.
- Udoskonalono narzędzia do tworzenia minimalistycznych kompilacji GStreamer.
- Dodano możliwość kompilacji z FFmpeg 5.0.
- Dla Linuxa zaimplementowano warianty kodeków MPEG-2 i VP9, działających bez zachowywania stanu (Stateless).
- Dla Windows w dekoderze opartym na Direct3D11/DXVA dodano wsparcie AV1 i MPEG-2.
Źródło: opennet.ru
