X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=subprojects%2Fgst-plugins-ugly%2FNEWS;h=9802493d3252203d2e26c8c315a9bdbde953807d;hb=f13c65d977b740b5955343d320dcf2061bbdf62d;hp=0e581c39b8f309e72086551ee7ea1045409aa9da;hpb=86a93d746dfb37322cb5dfa517c2913edb9d54d6;p=platform%2Fupstream%2Fgstreamer.git diff --git a/subprojects/gst-plugins-ugly/NEWS b/subprojects/gst-plugins-ugly/NEWS index 0e581c3..9802493 100644 --- a/subprojects/gst-plugins-ugly/NEWS +++ b/subprojects/gst-plugins-ugly/NEWS @@ -1,23 +1,11 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20 has not been released yet. It is scheduled for release -around October/November 2021. +GStreamer 1.22.0 was originally released on 23 January 2023. -1.19.x is the unstable development version that is being developed in -the git main branch and which will eventually result in 1.20, and 1.19.2 -is the current development release in that series - -It is expected that feature freeze will be in early October 2021, -followed by one or two 1.19.9x pre-releases and the new 1.20 stable -release around October/November 2021. - -1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12, -1.10, 1.8, 1.6,, 1.4, 1.2 and 1.0 release series. - -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 22 September 2021, 18:00 UTC (log) +Last updated: Monday 23 January 2023, 17:00 UTC (log) Introduction @@ -30,270 +18,1222 @@ fixes and other improvements. Highlights -- this section will be completed in due course +- AV1 video codec support improvements +- New HLS, DASH and Microsoft Smooth Streaming adaptive streaming + clients +- Qt6 support for rendering video inside a QML scene +- Minimal builds optimised for binary size, including only the + individual elements needed +- Playbin3, Decodebin3, UriDecodebin3, Parsebin enhancements and + stabilisation +- WebRTC simulcast support and support for Google Congestion Control +- WebRTC-based media server ingestion/egress (WHIP/WHEP) support +- New easy to use batteries-included WebRTC sender plugin +- Easy RTP sender timestamp reconstruction for RTP and RTSP +- ONVIF timed metadata support +- New fragmented MP4 muxer and non-fragmented MP4 muxer +- New plugins for Amazon AWS storage and audio transcription services +- New gtk4paintablesink and gtkwaylandsink renderers +- New videocolorscale element that can convert and scale in one go for + better performance +- High bit-depth video improvements +- Touchscreen event support in navigation API +- Rust plugins now shipped in macOS and Windows/MSVC binary packages +- H.264/H.265 timestamp correction elements for PTS/DTS reconstruction + before muxers +- Improved design for DMA buffer sharing and modifier handling for + hardware-accelerated video decoders/encoders/filters and + capturing/rendering on Linux +- Video4Linux2 hardware accelerated decoder improvements +- CUDA integration and Direct3D11 integration and plugin improvements +- New H.264 / AVC, H.265 / HEVC and AV1 hardware-accelerated video + encoders for AMD GPUs using the Advanced Media Framework (AMF) SDK +- applemedia: H.265 / HEVC video encoding + decoding support +- androidmedia: H.265 / HEVC video encoding support +- New “force-live” property for audiomixer, compositor, glvideomixer, + d3d11compositor etc. +- Lots of new plugins, features, performance improvements and bug + fixes Major new features and changes -Noteworthy new features and API +AV1 video codec support improvements + +AV1 is a royalty free next-generation video codec by AOMedia and a free +alternative to H.265/HEVC. + +While supported in earlier versions of GStreamer already, this release +saw a lot of improvements across the board: + +- Support for hardware encoding and decoding via VAAPI/VA, AMF, D3D11, + NVCODEC, QSV and Intel MediaSDK. Hardware codecs for AV1 are slowly + becoming available in embedded systems and desktop GPUs (AMD, Intel, + NVIDIA), and these can now be used via GStreamer. + +- New AV1 RTP payloader and depayloader elements. + +- New encoder settings in the AOM reference encoder-based av1enc + element. + +- Various improvements in the AV1 parser and in the MP4/Matroska/WebM + muxers/demuxers. + +- dav1d and rav1e based software decoder/encoder elements shipped as + part of the binaries. + +- AV1 parser improvements and various bugfixes all over the place. + +Touchscreen event support in Navigation API + +The Navigation API supports the sending of key press events and mouse +events through a GStreamer pipeline. Typically these will be picked up +by a video sink on which these events happen and then the event is +transmitted into the pipeline so it can be handled by elements inside +the pipeline if it wasn’t handled by the application. + +This has traditionally been used for DVD menu support, but can also be +used to forward such inputs to source elements that render a web page +using a browser engine such as WebKit or Chromium. + +This API has now gained support for touchscreen events, and this has +been implemented in various plugins such as the GTK, Qt, XV, and x11 +video sinks as well as the wpevideosrc element. + +GStreamer CUDA integration + +- New gst-cuda library +- integration with D3D11 and NVIDIA dGPU NVMM elements +- new cudaconvertscale element + +GStreamer Direct3D11 integration + +- New gst-d3d11 public library + - gst-d3d11 library is not integrated with GStreamer documentation + system yet. Please refer to the examples +- d3d11screencapture: Add Windows Graphics Capture API based capture + mode, including Win32 application window capturing +- d3d11videosink and d3d11convert can support flip/rotation and crop + meta +- d3d11videosink: New emit-present property and present signal so that + applications can overlay an image on Direct3D11 swapchain’s + backbuffer via Direct3D/Direct2D APIs. See also C++ and Rust + examples +- d3d11compositor supports YUV blending/composing without intermediate + RGB(A) conversion to improve performance +- Direct3D11 video decoders are promoted to GST_RANK_PRIMARY or + higher, except for the MPEG2 decoder + +H.264/H.265 timestamp correction elements + +- Muxers are often picky and need proper PTS/DTS timestamps set on the + input buffers, but that can be a problem if the encoded input media + stream comes from a source that doesn’t provide proper signalling of + DTS, such as is often the case for RTP, RTSP and WebRTC streams or + Matroska container files. Theoretically parsers should be able to + fix this up, but it would probably require fairly invasive changes + in the parsers, so two new elements h264timestamper and + h265timestamper bridge the gap in the meantime and can reconstruct + missing PTS/DTS. + +Easy sender timestamp reconstruction for RTP and RTSP + +- it was always possible to reconstruct and retrieve the original RTP + sender timestamps in GStreamer, but required a fair bit of + understanding of the internal mechanisms and the right property + configuration and clock setup. + +- rtspsrc and rtpjitterbuffer gained a new + “add-reference-timestamp-meta” property that if set puts the + original absolute reconstructed sender timestamps on the output + buffers via a meta. This is particularly useful if the sender is + synced to an NTP clock or PTP clock. The original sender timestamps + are either based on the RTCP NTP times, NTP RTP header extensions + (RFC6051) or RFC7273-style clock signalling. + +Qt6 support + +- new qml6glsink element for Qt6 similar to the existing Qt5 element. + Matching source and overlay elements will hopefully follow in the + near future. + +OpenGL + Video library enhancements + +- Support for new video formats (NV12_4L4, NV12_16L32S, NV12_8L128, + NV12_10BE_8L128) and dmabuf import in more formats (Y410, Y212_LE, + Y212_BE, Y210, NV21, NV61) + +- Improved support for tiled formats with arbitrary tile dimensions, + as needed by certain hardware decoders/encoders + +- glvideomixer: New “crop-left,”crop-right, “crop-top” and + “crop-bottom” pad properties for cropping inputs + +- OpenGL support for gst_video_sample_convert(): + + - Used for video snapshotting and thumbnailing, to convert buffers + retrieved from appsinks or sink “last-sample” properties in + JPG/PNG thumbnails. + - This function can now take samples and buffers backed by GL + textures as input and will automatically plug a gldownload + element in that case. + +High bit-depth support (10, 12, 16 bits per component value) improvements + +- compositor can now handle any supported input format and also mix + high-bitdepth (10-16 bit) formats (naively) + +- videoflip has gained support for higher bit depth formats. + +- vp9enc, vp9dec now support 12-bit formats and also 10-bit 4:4:4 + +WebRTC + +- Allow insertion of bandwidth estimation elements e.g. for Google + Congestion Control (GCC) support + +- Initial support for sending or receiving simulcast streams + +- Support for asynchronous host resolution for STUN/TURN servers + +- GstWebRTCICE was split into base classes and implementation to make + it possible to plug custom ICE implementations + +- webrtcsink: batteries-included WebRTC sender (Rust) + +- whipsink: WebRTC HTTP ingest (WHIP) to a MediaServer (Rust) + +- whepsrc: WebRTC HTTP egress (WHEP) from a MediaServer (Rust) + +- Many other improvements and bug fixes + +New HLS, DASH and MSS adaptive streaming clients + +A new set of “adaptive demuxers” to support HLS, DASH and MSS adaptive +streaming protocols has been added. They provide improved performance, +new features and better stream compatibility compared to the previous +elements. These new elements require a “streams-aware” pipeline such as +playbin3, uridecodebin3 or urisourcebin. + +The previous elements’ design prevented implementing several use-cases +and fixing long-standing issues. The new elements were re-designed from +scratch to tackle those: + +- Scheduling Only 3 threads are present, regardless of the number of + streams selected. One in charge of downloading fragments and + manifests, one in charge of outputting parsed data downstream, and + one in charge of scheduling. This improves performance, resource + usage and latency. + +- Better download control The elements now directly control the + scheduling and download of manifests and fragments using libsoup + directly instead of depending on external elements for downloading. + +- Stream selection, only the selected streams are downloaded. This + improves bandwith usage. Switching stream is done in such a way to + ensure there are no gaps, meaning the new stream will be switched to + only once enough data for it has been downloaded. + +- Internal parsing, the downloaded streams are parsed internally. This + allows the element to fully respect the various specifications and + offer accurate buffering, seeking and playback. This is especially + important for HLS streams which require parsing for proper + positioning of streams. + +- Buffering and adaptive rate switching, the new elements handle + buffering internally which allows them to have a more accurate + visibility of which bandwith variant to switch to. + +Playbin3, Decodebin3, UriDecodebin3, Parsebin improvements + +The “new” playback elements introduced in 1.18 (playbin3 and its various +components) have been refactored to allow more use-cases and improve +performance. They are no longer considered experimental, so applications +using the legacy playback elements (playbin and (uri)decodebin) can +migrate to the new components to benefit from these improvements. + +- Gapless The “gapless” feature allows files and streams to be + fetched, buffered and decoded in order to provide a “gapless” + output. This feature has been refactored extensively in the new + components: + - A single (uri)decodebin3 (and therefore a single set of + decoders) is used. This improves memory and cpu usage, since on + identical codecs a single decoder will be used. + - The “next” stream to play will be pre-rolled “just-in-time” + thanks to the buffering improvements in urisourcebin (see below) + - This feature is now handled at the uridecodebin3 level. + Applications that wish to have a “gapless” stream and process it + (instead of just outputting it, for example for transcoding, + retransmission, …) can now use uridecodebin3 directly. Note that + a streamsynchronizer element is required in that case. +- Buffering improvements The urisourcebin element is in charge of + fetching and (optionally) buffering/downloading the stream. It has + been extended and improved: + - When the parse-streams property is used (by default in + uridecodebin3 and playbin3), compatible streams will be demuxed + and parsed (via parsebin) and buffering will be done on the + elementary streams. This provides a more accurate handling of + buffering. Previously buffering was done on a best-effort basis + and was mostly wrong (i.e. downloading more than needed). + - Applications can use urisourcebin with this property as a + convenient way of getting elementary streams from a given URI. + - Elements can handle buffering themselves (such as the new + adaptive demuxers) by answering the GST_QUERY_BUFFERING query. + In that case urisourcebin will not handle it. +- Stream Selection Efficient stream selection was previously only + possible within decodebin3. The downside is that this meant that + upstream elements had to provide all the streams from which to chose + from, which is inefficient. With the addition of the + GST_QUERY_SELECTABLE query, this can now be handled by elements + upstream (i.e. sources) + - Elements that can handle stream selection internally (such as + the new adaptive demuxer elements) answer that query, and handle + the stream selection events themselves. + - In this case, decodebin3 will always process all streams that + are provided to it. +- Instant URI switching This new feature allows switching URIs + “instantly” in playbin3 (and uridecodebin3) without having to change + states. This mimics switching channels on a television. + - If compatible, decoders will be re-used, providing lower + latency/cpu/memory than by switching states. + - This is enabled by setting the instant-uri property to true, + setting the URI to switch to immediately, and then disabling the + instant-uri property again afterwards. +- playbin3, decodebin3, uridecodebin3, parsebin, and urisrc are no + longer experimental + - They were originally marked as ‘technology preview’ but have + since seen extensive usage in production settings, so are + considered ready for general use now. + +Fraunhofer AAC audio encoder HE-AAC and AAC-LD profile support + +- fdkaacenc: + - Support for encoding to HE-AACv1 and HE-AACv2 profile + - Support for encoding to AAC Low Delay (LD) profile + - Advanced bitrate control options via new “rate-control”, + “vbr-preset”, “peak-bitrate”, and “afterburner” properties + +RTP rapid synchronization support in the RTP stack (RFC6051) + +RTP provides several mechanisms how streams can be synchronized relative +to each other, and how absolute sender times for RTP packets can be +obtained. One of these mechanisms is via RTCP, which has the +disadvantage that the synchronization information is only distributed +out-of-band and usually some time after the start. + +GStreamer’s RTP stack, specifically the rtpbin, rtpsession and +rtpjitterbuffer elements, now also have support for retrieving and +sending the same synchronization information in-band via RTP header +extensions according to RFC6051 (Rapid Synchronisation of RTP Flows). +Only 64-bit timestamps are supported currently. + +This provides per packet synchronization information from the very +beginning of a stream and allows accurate inter-stream, and (depending +on setup) inter-device, synchronization at the receiver side. + +ONVIF XML Timed Metadata support + +The ONVIF standard implemented by various security cameras also +specifies a format for timed metadata that is transmitted together with +the audio/video streams, usually over RTSP. + +Support for this timed metadata is implemented in the MP4 demuxer now as +well as the new fragmented MP4 muxer and the new non-fragmented MP4 +muxer from the GStreamer Rust plugins. Additionally, the new onvif +plugin ‒ which is part of the GStreamer Rust plugins ‒ provides general +elements for handling the metadata and e.g. overlaying certain parts of +it over a video stream. + +As part of this support for absolute UTC times was also implemented +according to the requirements of the ONVIF standards in the +corresponding elements. + +MP3 gapless playback support + +While MP3 can probably considered a legacy format at this point, a new +feature was added with this release. + +When playing back plain MP3 files, i.e. outside a container format, +switches between files can now be completely gapless if the required +metadata is provided inside the file. There is no standardized metadata +for this, but the LAME MP3 encoder writes metadata that can be parsed by +the mpegaudioparse element now and forwarded to decoders for ensuring +removal of padding samples at the front and end of MP3 files. + +“force-live” property for audio + video aggregators + +This is a quality of life fix for playout and streaming applications +where it is common to have audio and video mixer elements that should +operate in live mode from the start and produce output continuously. + +Often one would start a pipeline without any inputs hooked up to these +mixers in the beginning, and up until now there was no way to easily +force these elements into live mode from the start. One would have to +add an initial live video or audio test source as dummy input to achieve +this. + +The new “force-live” property makes these audio and video aggregators +start in live mode without the need for any dummy inputs, which is +useful for scenarios where inputs are only added after starting the +pipeline. + +This new property should usually be used in connection with the +“min-upstream-latency” property, i.e. you should always set a non-0 +minimum upstream latency then. + +This is now supported in all GstAudioAggregator and GstVideoAggregator +subclasses such as audiomixer, audiointerleave, compositor, +glvideomixer, d3d11compositor, etc. + +New elements and plugins + +- new cudaconvertscale element that can convert and scale in one pass + +- new gtkwaylandsink element based on gtksink, but similar to + waylandsink and uses Wayland APIs directly instead of rendering with + Gtk/Cairo primitives. This approach is only compatible with Gtk3, + and like gtksink this element only supports Gtk3. + +- new h264timestamper and h265timestamper elements to reconstruct + missing pts/dts from inputs that might not provide them such as + e.g. RTP/RTSP/WebRTC inputs (see above) + +- mfaacdec, mfmp3dec: Windows MediaFoundation AAC and MP3 decoders + +- new msdkav1enc AV1 video encoder element + +- new nvcudah264enc, nvcudah265enc, nvd3d11h264enc, and nvd3d11h265enc + NVIDIA GPU encoder elements to support zero-copy encoding, via CUDA + and Direct3D11 APIs, respectively + +- new nvautogpuh264enc and nvautogpuh265enc NVIDIA GPU encoder + elements: The auto GPU elements will automatically select a target + GPU instance in case multiple NVIDIA desktop GPUs are present, also + taking into account the input memory. On Windows CUDA or Direct3D11 + mode will be determined by the elements automatically as well. Those + new elements are useful if target GPU and/or API mode (either CUDA + or Direct3D11 in case of Windows) is undeterminable from the encoder + point of view at the time when pipeline is configured, and therefore + lazy target GPU and/or API selection are required in order to avoid + unnecessary memory copy operations. + +- new nvav1dec AV1 NVIDIA desktop GPU decoder element + +- new qml6glsink element to render video with Qt6 + +- qsv: New Intel OneVPL/MediaSDK (a.k.a Intel Quick Sync) based + decoder and encoder elements, with gst-d3d11 (on Windows) and gst-va + (on Linux) integration + + - Support multi-GPU environment, for example, concurrent video + encoding using Intel iGPU and dGPU in a single pipeline + - H.264 / H.265 / VP9 and JPEG decoders + - H.264 / H.265 / VP9 / AV1 / JPEG encoders with dynamic encoding + bitrate update + - New plugin does not require external SDK for building on Windows + +- vulkanoverlaycompositor: new vulkan overlay compositor element to + overlay upstream GstVideoOverlayCompositonMeta onto the video + stream. -- this section will be filled in in due course +- vulkanshaderspv: performs operations with SPIRV shaders in Vulkan -New elements +- win32ipcvideosink, win32ipcvideosrc: new shared memory videosrc/sink + elements for Windows -- this section will be filled in in due course +- wicjpegdec, wicpngdec: Windows Imaging Component (WIC) based JPEG + and PNG decoder elements. + +- Many exciting new Rust elements, see Rust section below New element features and additions -- this section will be filled in in due course +- audioconvert: Dithering now uses a slightly slower, less biased PRNG + which results in better quality output. Also dithering can now be + enabled via the new “dithering-threshold” property for target bit + depths of more than 20 bits. + +- av1enc: Add “keyframe-max-dist” property for controlling max + distance between keyframes, as well as “enc-pass”, “keyframe-mode”, + “lag-in-frames” and “usage-profile” properties. + +- cccombiner: new “output-padding” property + +- decklink: Add support for 4k DCI, 8k/UHD2 and 8k DCI modes + +- dvbsubenc: Support for >SD resolutions is working correctly now. + +- fdkaacenc: Add HE-AAC / HE-AACv2 profile support + +- glvideomixer: New “crop-left,”crop-right, “crop-top” and + “crop-bottom” pad properties for cropping inputs + +- gssink: new ‘content-type’ property. Useful when one wants to upload + a video as video/mp4 instead of ’video/quicktime` for example. + +- jpegparse: Rewritten using the common parser library + +- msdk: + + - new msdkav1enc AV1 video encoder element + - msdk decoders: Add support for Scaler Format Converter (SFC) on + supported Intel platforms for hardware accelerated conversion + and scaling + - msdk encoders: support import of dmabuf, va memory and D3D11 + memory + - msdk encoders: add properties for low delay bitrate control and + max frame sizes for I/P frames + - msdkh264enc, msdkh265enc: more properties to control intra + refresh + - note that on systems with multi GPUs the Windows D3D11 + integration might only work reliably if the Intel GPU is the + primary GPU + +- mxfdemux: Add support for Canon XF-HEVC + +- openaptx: Support the freeaptx library + +- qroverlay: + + - new “qrcode-case-sensitive” property allows encoding case + sensitive strings like wifi SSIDs or passwords. + - added the ability to pick up data to render from an + upstream-provided custom GstQROverlay meta + +- qtdemux: Add support for ONVIF XML Timed MetaData and AVC-Intra + video + +- rfbsrc now supports the uri handler interface, so applications can + use RFB/VNC sources in uridecodebin(3) and playbin, with + e.g. rfb://:password@10.1.2.3:5903?shared=1 + +- rtponviftimestamp: Add support for using reference timestamps + +- rtpvp9depay now has the same keyframe-related properties as + rtpvp8depay and rtph264depay: “request-keyframe” and + “wait-for-keyframe” + +- rtspsrc: Various RTSP servers are using invalid URL operations for + constructing the control URL. Until GStreamer 1.16 these worked + correctly because GStreamer was just appending strings itself to + construct the control URL, but starting version 1.18 the correct URL + operations were used. With GStreamer 1.22, rtspsrc now first tries + with the correct control URL and if that fails it will retry with + the wrongly constructed control URL to restore support for such + servers. + +- rtspsrc and rtpjitterbuffer gained a new + “add-reference-timestamp-meta” property that makes them put the + unmodified original sender timestamp on output buffers for NTP or + PTP clock synced senders + +- srtsrc, srtsink: new “auto-reconnect” property to make it possible + to disable automatic reconnects (in caller mode) and make the + elements post an error immediately instead; also stats improvements + +- srtsrc: new “keep-listening” property to avoid EOS on disconnect and + keep the source running while it waits for a new connection. + +- videocodectestsink: added YUV 4:2:2 support + +- wasapi2src: Add support for process loopback capture + +- wpesrc: Add support for modifiers in key/touch/pointer events Plugin and library moves -- this section will be filled in in due course +- The xingmux plugin has been moved from gst-plugins-ugly into + gst-plugins-good. -- There were no plugin moves or library moves in this cycle. +- The various Windows directshow plugins in gst-plugins-bad have been + unified into a single directshow plugin. Plugin removals -The following elements or plugins have been removed: - -- this section will be filled in in due course +- The dxgiscreencapsrc element has been removed, use + d3d11screencapturesrc instead Miscellaneous API additions -- this section will be filled in in due course +- GST_AUDIO_FORMAT_INFO_IS_VALID_RAW() and + GST_VIDEO_FORMAT_INFO_IS_VALID_RAW() can be used to check if a + GstAudioFormatInfo or GstVideoFormatInfo has been initialised to a + valid raw format. + +- Video SEI meta: new GstVideoSEIUserDataUnregisteredMeta to carry + H.264 and H.265 metadata from SEI User Data Unregistered messages. + +- vulkan: Expose gst_vulkan_result_to_string() Miscellaneous performance, latency and memory optimisations -- this section will be filled in in due course +- liborc 0.4.33 adds support for aarch64 (64-bit ARM) architecture + (not enabled by default on Windows yet though) and improvements for + 32-bit ARM and should greatly enhance performance for certain + operations that use ORC. + +- as always there have been plenty of performance, latency and memory + optimisations all over the place. Miscellaneous other changes and enhancements -- this section will be filled in in due course +- the audio/video decoder base classes will not consider decoding + errors a hard error by default anymore but will continue trying to + decode. Previously more than 10 consecutive errors were considered a + hard error but this caused various partially broken streams to fail. + The threshold is configurable via the “max-errors” property. + +- compatibility of the GStreamer PTP clock implementation with + different PTP server implementations was improved, and + synchronization is achieved successfully in various scenarios that + failed before. Tracing framework and debugging improvements -- this section will be filled in in due course +New tracers + +- buffer-lateness: Records lateness of buffers and the reported + latency for each pad in a CSV file. Comes with a script for + visualisation. + +- pipeline-snapshot: Creates a .dot file of all pipelines in the + application whenever requested via SIGUSR1 (on UNIX systems) + +- queue-levels: Records queue levels for each queue in a CSV file. + Comes with a script for visualisation. + +Debug logging system improvements + +- new log macros GST_LOG_ID, GST_DEBUG_ID, GST_INFO_ID, + GST_WARNING_ID, GST_ERROR_ID, and GST_TRACE_ID allow passing a + string identifier instead of a GObject. This makes it easier to log + non-gobject-based items and also has performance benefits. Tools -- this section will be filled in in due course +- gst-play-1.0 gained a --no-position command line option to suppress + position/duration queries, which can be useful to reduce debug log + noise. + +GStreamer FFMPEG wrapper + +- Fixed bitrate management and timestamp inaccuracies for video + encoders + +- Fix synchronization issues and errors created by the (wrong) + forwarding of upstream segment events by ffmpeg demuxers. + +- Clipping meta support for gapless mp3 playback GStreamer RTSP server -- this section will be filled in in due course +- Add RFC5576 Source-specific media attribute to the SDP media for + signalling the CNAME -GStreamer VAAPI +- Add support for adjusting request response on pipeline errors -- this section will be filled in in due course + - Give the application the possibility to adjust the error code + when responding to a request. For that purpose the pipeline’s + bus messages are emitted to subscribers through a + “handle-message” signal. The subscribers can then check those + messages for errors and adjust the response error code by + overriding the virtual method + GstRTSPClientClass::adjust_error_code(). + +- Add gst_rtsp_context_set_token() method to make it possible to set + the RTSPToken on some RTSPContext from bindings such as the Python + bindings. + +- rtspclientsink gained a “publish-clock-mode” property to configure + whether the pipeline clock should be published according to RFC7273 + (RTP Clock Source Signalling), similar to the same API on + GstRTSPMedia. + +GStreamer VA-API support + +- Development activity has shifted towards the new va plugin, with + gstreamer-vaapi now basically in maintenance-only mode. Most of the + below refers to the va plugin (not gstreamer-vaapi). + +- new gst-va library for GStreamer VA-API integration + +- vajpegdec: new JPEG decoder + +- vah264enc, vah265enc: new H.264/H.265 encoders + +- vah264lpenc, vah265lpenc: new low power mode encoders + +- vah265enc: Add extended formats support such as 10/12 bits, 4:2:2 + and 4:4:4 + +- Support encoder reconfiguration + +- vacompositor: Add new compositor element using the VA-API VPP + interface + +- vapostproc: + + - new “scale-method” property + - Process HDR caps if supported + - parse video orientation from tags + +- vaapipostproc: Enable the use of DMA-Buf import and export + (gstreamer-vaapi) + +GStreamer Video4Linux2 support + +- Added support for Mediatek Stateless CODEC (VP8, H.264, VP9) + +- Stateless H.264 interlaced decoder support + +- Stateless H.265 decoder support + +- Stateful decoder support for driver resolution change events + +- Stateful decoding support fixes for NXP/Amphion driver + +- Support for hardware crop in v4l2src + +- Conformance test improvement for stateful decoders + +- Fixes for Raspberry Pi CODEC GStreamer OMX -- this section will be filled in in due course +- There were no changes in this module GStreamer Editing Services and NLE -- this section will be filled in in due course +- Handle compositors that are bins around the actual compositor + implementation (like glvideomixers which wraps several elements) + +- Add a mode to disable timeline editing API so the user can be in + full control of its layout (meaning that the user is responsible for + ensuring its validity/coherency) + +- Add a new fade-in transition type + +- Add support for non-1/1 PAR source videos + +- Fix frame accuracy when working with very low framerate streams GStreamer validate -- this section will be filled in in due course +- Clean up and stabilize API so we can now generate rust bindings + +- Enhance the appsrc-push action type allowing to find tune the + buffers more in details + +- Add an action type to verify currently configured pad caps + +- Add a way to run checks from any thread after executing a ‘wait’ + action. This is useful when waiting on a signal and want to check + the value of a property right when it is emited for example. GStreamer Python Bindings -- this section will be filled in in due course +- Add a Gst.init_python() function to be called from plugins which + will initialise everything needed for the GStreamer Python bindings + but not call Gst.init() again since this will have been called + already. + +- Add support for the GstURIHandlerInterface that allows elements to + advertise what URI protocols they support. GStreamer C# Bindings -- this section will be filled in in due course +- Fix AppSrc and AppSink constructors + +- The C# bindings have yet to be updated to include new 1.22 API, + which requires improvements in various places in the bindings / + binding generator stack. See issue #1718 in GitLab for more + information and to track progress. GStreamer Rust Bindings and Rust Plugins The GStreamer Rust bindings are released separately with a different release cadence that’s tied to gtk-rs, but the latest release has -already been updated for the upcoming new GStreamer 1.20 API. +already been updated for the new GStreamer 1.22 API. Check the bindings +release notes for details of the changes since 0.18, which was released +around GStreamer 1.20. gst-plugins-rs, the module containing GStreamer plugins written in Rust, -has also seen lots of activity with many new elements and plugins. - -What follows is a list of elements and plugins available in -gst-plugins-rs, so people don’t miss out on all those potentially useful -elements that have no C equivalent. - -- FIXME: add new elements - -Rust audio plugins - -- audiornnoise: New element for audio denoising which implements the - noise removal algorithm of the Xiph RNNoise library, in Rust -- rsaudioecho: Port of the audioecho element from gst-plugins-good - rsaudioloudnorm: Live audio loudness normalization element based on - the FFmpeg af_loudnorm filter -- claxondec: FLAC lossless audio codec decoder element based on the - pure-Rust claxon implementation -- csoundfilter: Audio filter that can use any filter defined via the - Csound audio programming language -- lewtondec: Vorbis audio decoder element based on the pure-Rust - lewton implementation - -Rust video plugins - -- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based - on a pure-Rust CD+G implementation, used for example by karaoke CDs -- cea608overlay: CEA-608 Closed Captions overlay element -- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT - subtitles) converter -- tttocea608: CEA-608 Closed Captions from timed-text converter -- mccenc/mccparse: MacCaption Closed Caption format encoder and parser -- sccenc/sccparse: Scenarist Closed Caption format encoder and parser -- dav1dec: AV1 video decoder based on the dav1d decoder implementation - by the VLC project -- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e - encoder implementation -- rsflvdemux: Alternative to the flvdemux FLV demuxer element from - gst-plugins-good, not feature-equivalent yet -- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust - implementations by the image-rs project - -Rust text plugins - -- textwrap: Element for line-wrapping timed text (e.g. subtitles) for - better screen-fitting, including hyphenation support for some - languages - -Rust network plugins - -- reqwesthttpsrc: HTTP(S) source element based on the Rust - reqwest/hyper HTTP implementations and almost feature-equivalent - with the main GStreamer HTTP source souphttpsrc -- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage -- awstranscriber: Live audio to timed text transcription element using - the Amazon AWS Transcribe API - -Generic Rust plugins - -- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based - on libsodium/NaCl -- togglerecord: Recording element that allows to pause/resume - recordings easily and considers keyframe boundaries -- fallbackswitch/fallbacksrc: Elements for handling potentially - failing (network) sources, restarting them on errors/timeout and - showing a fallback stream instead -- threadshare: Set of elements that provide alternatives for various - existing GStreamer elements but allow to share the streaming threads - between each other to reduce the number of threads -- rsfilesrc/rsfilesink: File source/sink elements as replacements for - the existing filesrc/filesink elements +has also seen lots of activity with many new elements and plugins. A +list of all Rust plugins and elements provided with the 0.9 release can +be found in the repository. + +- 33% of GStreamer commits are now in Rust (bindings + plugins), and + the Rust plugins module is also where most of the new plugins are + added these days. + +- The Rust plugins are now shipped as part of the Windows MSVC + macOS + binary packages. See below for the list of shipped plugins and the + status of Rust support in cerbero. + +- The Rust plugins are also part of the documentation on the GStreamer + website now. + +- Rust plugins can be used from any programming language. To the + outside they look just like a plugin written in C or C++. + +New Rust plugins and elements + +- rtpav1pay / rtpav1depay: RTP (de)payloader for the AV1 video codec +- gtk4paintablesink: a GTK4 video sink that provides a GdkPaintable + for rendering a video in any place inside a GTK UI. Supports + zero-copy rendering via OpenGL on Linux and macOS. +- ndi: source, sink and device provider for NewTek NDI protocol +- onvif: Various elements for parsing, RTP (de)payloading, overlaying + of ONVIF timed metadata. +- livesync: Element for converting a live stream into a continuous + stream without gaps and timestamp jumps while preserving live + latency requirements. +- raptorq: Encoder/decoder elements for the RaptorQ FEC mechanism that + can be used for RTP streams (RFC6330). + +WebRTC elements + +- webrtcsink: a WebRTC sink (batteries included WebRTC sender with + specific signalling) +- whipsink: WebRTC HTTP ingest (WHIP) to MediaServer +- whepsrc: WebRTC HTTP egress (WHEP) from MediaServer +- rtpgccbwe: RTP bandwidth estimator based on the Google Congestion + Control algorithm (GCC), used by webrtcsink + +Amazon AWS services + +- awss3src / awss3sink: A source and sink element to talk to the + Amazon S3 object storage system. +- awss3hlssink: A sink element to store HLS streams on Amazon S3. +- awstranscriber: an element wrapping the AWS Transcriber service. +- awstranscribeparse: an element parsing the packets of the AWS + Transcriber service. + +Video Effects (videofx) + +- roundedcorners: Element to make the corners of a video rounded via + the alpha channel. +- colordetect: A pass-through filter able to detect the dominant + color(s) on incoming frames, using color-thief. +- videocompare: Compare similarity of video frames. The element can + use different hashing algorithms like Blockhash, DSSIM, and others. + +New MP4 muxer + Fragmented MP4 muxer + +- fmp4mux: New fragmented MP4/ISOBMFF/CMAF muxer for generating + e.g. DASH/HLS media fragments. +- isomp4mux: New non-fragmented, normal MP4 muxer. + +Both plugins provides elements that replace the existing qtmux/mp4mux +element from gst-plugins-good. While not feature-equivalent yet, the new +codebase and using separate elements for the fragment and non-fragmented +case allows for easier extensability in the future. + +Cerbero Rust support + +- Starting this release, cerbero has support for building and shipping + Rust code on Linux, Windows (MSVC) and macOS. The Windows (MSVC) and + macOS binaries also ship the GStreamer Rust plugins in this release. + Only dynamic plugins are built and shipped currently. + +- Preliminary support for Android, iOS and Windows (MinGW) exists but + more work is needed. Check the tracker issue for more details about + future work. + +- The following plugins are included currently: audiofx, aws, cdg, + claxon, closedcaption, dav1d, fallbackswitch, ffv1, fmp4, gif, + hlssink3, hsv, json, livesync, lewton, mp4, ndi, onvif, rav1e, + regex, reqwest, raptorq, png, rtp, textahead, textwrap, threadshare, + togglerecord, tracers, uriplaylistbin, videofx, webrtc, webrtchttp. Build and Dependencies -- this section will be filled in in due course +- meson 0.62 or newer is required + +- GLib >= 2.62 is now required (but GLib >= 2.64 is strongly + recommended) + +- libnice >= 0.1.21 is now required and contains important fixes for + GStreamer’s WebRTC stack. + +- liborc >= 0.4.33 is recommended for 64-bit ARM support and 32-bit + ARM improvements + +- onnx: OnnxRT >= 1.13.1 is now required + +- openaptx: can now be built against libfreeaptx + +- opencv: allow building against any 4.x version + +- shout: libshout >= 2.4.3 is now required + +- gstreamer-vaapi’s Meson build options have been switched from a + custom combo type (yes/no/auto) to the built-in Meson feature type + (enabled/disabled/auto) -gst-build +- The GStreamer Rust plugins module gst-plugins-rs is now considered + an essential part of the GStreamer plugin offering and packagers and + distributors are strongly encouraged to package and ship those + plugins alongside the existing plugin modules. -- this section will be filled in in due course +- we now make use of Meson’s install tags feature which allows + selective installation of installl components and might be useful + for packagers. + +Monorepo build (gst-build) + +- new “orc-source” build option to allow build against a + system-installed liborc instead of forcing the use of orc as a + subproject. + +- GStreamer command line tools can now be linked to the gstreamer-full + library if it’s built Cerbero Cerbero is a meta build system used to build GStreamer plus dependencies on platforms where dependencies are not readily available, such as -Windows, Android, iOS and macOS. +Windows, Android, iOS, and macOS. General improvements -- this section will be filled in in due course +- Rust support was added for all support configurations, controlled by + the rust variant; see above for more details +- All pkgconfig files are now reliably relocatable without requiring + pkg-config --define-prefix. This also fixes statically linking with + GStreamer plugins using the corresponding pkgconfig files. +- New documentation on how to build a custom GStreamer repository + using Cerbero, please see the README +- HTTPS certificate checking is enabled for downloads on all platforms + now +- Fetching now automatically retries on error for robustness against + transient errors +- Support for building the new Qt6 plugin was added +- pkgconfig files for various recipes were fixed +- Several recipes were updated to newer versions +- New plugins: adaptivedemux2 aes codectimestamper dav1d +- New libraries: cuda webrtcnice macOS / iOS -- this section will be filled in in due course +- Added support for running Cerbero on ARM64 macOS +- GStreamer.framework and all libraries in it are now relocatable, + which means they use LC_RPATH entries to find dependencies instead + of using an absolute path. If you link to GStreamer using the + pkgconfig files, no action is necessary. However, if you use the + framework directly or link to the libraries inside the framework by + hand, then you need to pass -Wl,-rpath, to the + linker. +- Apple bitcode support was dropped, since Apple has deprecated it +- macOS installer now correctly advertises support for both x86_64 and + arm64 +- macOS framework now ships the gst-rtsp-server-1.0 library +- Various fixes were made to make static linking to gstreamer + libraries and plugins work correctly on macOS +- When statically linking to the applemedia plugin using Xcode 13, you + will need to pass -fno-objc-msgsend-selector-stubs which works + around a backwards-incompatible change in Xcode 14. This is not + required for the rest of GStreamer at present, but will be in the + future. +- macOS installer now shows the GStreamer logo correctly Windows -- this section will be filled in in due course +- MSVC is now required by default on Windows, and the Visual Studio + variant is enabled by default + - To build with MinGW, use the mingw variant +- Visual Studio props files were updated for newer Visual Studio + versions +- Visual Studio 2015 support was dropped +- MSYS2 is now supported as the base instead of MSYS. Please see the + README for more details. Some advantages include: + - Faster build times, since parallel make works + - Faster bootstrap, since some tools are provided by MSYS2 + - Other speed-ups due to using MSYS2 tools instead of MSYS +- Faster download by using powershell instead of hand-rolled Python + code +- Many recipes were ported from Autotools to Meson, speeding up the + build +- Universal Windows Platform is no longer supported, and binaries are + no longer shipped for it +- New documentation on how to force a specific Visual Studio + installation in Cerbero, please see the README +- New plugins: qsv wavpack directshow amfcodec wic win32ipc +- New libraries: d3d11 Windows MSI installer -- this section will be filled in in due course +- Universal Windows Platform prebuilt binaries are no longer available Linux -- this section will be filled in in due course +- Various fixes for RHEL/CentOS 7 support +- Added support for running on Linux ARM64 Android -- this section will be filled in in due course +- Android support now requires Android API version 21 (Lollipop) +- Support for Android Gradle plugin 7.2 Platform-specific changes and improvements Android -- this section will be filled in in due course +- Android SDK 21 is required now as minimum SDK version + +- androidmedia: Add H.265 / HEVC video encoder mapping + +- Implement JNI_OnLoad() to register static plugins etc. automatically + in case GStreamer is loaded from Java using System.loadLibrary(), + which is also useful for the gst-full deployment scenario. + +Apple macOS and iOS + +- The GLib version shipped with the GStreamer binaries does not + initialize an NSApp and does not run a NSRunLoop on the main thread + anymore. This was a custom GLib patch and caused it to behave + different from the GLib shipped by Homebrew or anybody else. + + The change was originally introduced because various macOS APIs + require a NSRunLoop to run on the main thread to function correctly + but as this change will never get merged into GLib and it was + reverted for 1.22. Applications that relied on this behaviour should + move to the new gst_macos_main() function, which also does not + require the usage of a GMainLoop. + + See e.g. gst-play.c for an example for the usage of + gst_macos_main(). + +- GStreamer.framework and all libraries in it are now relocatable, + which means they use LC_RPATH entries to find dependencies instead + of using an absolute path. If you link to GStreamer using the + pkgconfig files, no action is necessary. However, if you use the + framework directly or link to the libraries inside the framework by + hand, then you need to pass -Wl,-rpath, to the + linker. -macOS and iOS +- avfvideosrc: Allow specifying crop coordinates during screen capture -- this section will be filled in in due course +- vtenc, vtdec: H.265 / HEVC video encoding + decoding support + +- osxaudiosrc: Support a device as both input and output + + - osxaudiodeviceprovider now probes devices more than once to + determine if the device can function as both an input AND and + output device. Previously, if the device provider detected that + a device had any output capabilities, it was treated solely as + an Audio/Sink. This caused issues for devices that have both + input and output capabilities (for example, USB interfaces for + professional audio have both input and output channels). Such + devicesare now listed as both an Audio/Sink as well as an + Audio/Source. + +- osxaudio: support hidden devices on macOS + + - These are devices that will not be shown in the macOS UIs and + that cannot be retrieved without having the specific UID of the + hidden device. There are cases when you might want to have a + hidden device, for example when having a virtual speaker that + forwards the data to a virtual hidden input device from which + you can then grab the audio. The blackhole project supports + these hidden devices and this change provides a way that if the + device id is a hidden device it will use it instead of checkinf + the hardware list of devices to understand if the device is + valid. Windows -- this section will be filled in in due course +- win32ipcvideosink, win32ipcvideosrc: new shared memory videosrc/sink + elements + +- wasapi2: Add support for process loopback capture for a specified + PID (requires Windows 11/Windows Server 2022) + +- The Windows universal UWP build is currently non-functional and will + need updating after the recent GLib upgrade. It is unclear if anyone + is using these binaries, so if you are please make yourself known. + +- wicjpegdec, wicpngdec: Windows Imaging Component (WIC) based JPEG + and PNG decoder elements. + +- mfaacdec, mfmp3dec: Windows MediaFoundation AAC and MP3 decoders + +- The uninstalled development environment supports PowerShell 7 now Linux -- this section will be filled in in due course +- Improved design for DMA buffer sharing and modifier handling for + hardware-accelerated video decoders/encoders/filters and + capture/rendering on Linux and Linux-like system. + +- kmssink + + - new “fd” property which allows an application to provide their + own opened DRM device fd handle to kmssink. That way an + application can lease multiple fd’s from a DRM master to display + on different CRTC outputs at the same time with multiple kmssink + instances, for example. + - new “skip-vsync” property to achieve full framerate with legacy + emulation in drivers. + - HDR10 infoframe support + +- va plugin and gstreamer-vaapi improvements (see above) + +- waylandsink: Add “rotate-method” property and “render-rectangle” + property + +- new gtkwaylandsink element based on gtksink, but similar to + waylandsink and uses Wayland APIs directly instead of rendering with + Gtk/Cairo primitives. This approach is only compatible with Gtk3, + and like gtksink this element only supports Gtk3. Documentation improvements -- this section will be filled in in due course +- The GStreamer Rust plugins are now included and documented in the + plugin documentation. Possibly Breaking Changes -- this section will be filled in in due course -- MPEG-TS SCTE-35 API changes (FIXME: flesh out) -- gst_parse_launch() and friends now error out on non-existing - properties on top-level bins where they would silently fail and - ignore those before. +- the Opus audio RTP payloader and depayloader no longer accept the + lower case encoding-format=multiopus but instead produce and accept + only the upper case variant encoding-format=MULTIOPUS, since those + should always be upper case in GStreamer (caps fields are always + case sensitive). This should hopefully only affect applications + where RTP caps are set manually and multi-channel audio (>= 3 + channels) is used. + +- wpesrc: the URI handler protocols changed from wpe:// and web:// to + web+http://, web+https://, and web+file:// which means URIs are RFC + 3986 compliant and the source can simply strip the prefix from the + protocol. + +- The Windows screen capture element dxgiscreencapsrc has been + removed, please use d3d11screencapturesrc instead. + +- On Android the minimum supported Android API version is now version + 21 and has been increased from 16. + +- On macOS, the GLib version shipped with the GStreamer binaries will + no longer initialize an NSApp or run an NSRunLoop on the main + thread. See macOS/iOS section above for details. + +- decklink: The decklink plugin is now using the 12.2.2 version of the + SDK and will not work with drivers older than version 12. + +- On iOS Apple Bitcode support was removed from the binaries. This + feature is deprecated since XCode 14 and not used on the App Store + anymore. + +- The MP4/Matroska/WebM muxers now require the “stream-format” to be + provided as part of the AV1 caps as only the original “obu-stream” + format is supported in these containers and not the “annexb” format. Known Issues -- this section will be filled in in due course +- The Windows UWP build in Cerbero needs fixing after the recent GLib + upgrade (see above) + +- The C# bindings have not been updated to include new 1.22 API yet + (see above) + +Statistics + +- 4072 commits + +- 2224 Merge Requests + +- 716 Issues + +- 200+ Contributors + +- ~33% of all commits and Merge Requests were in Rust modules + +- 4747 files changed + +- 469633 lines added -- There are a couple of known WebRTC-related regressions/blockers: +- 209842 lines deleted - - webrtc: DTLS setup with Chrome is broken - - webrtcbin: First keyframe is usually lost +- 259791 lines added (net) Contributors -- this section will be filled in in due course +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, Alba +Mendez, Aleix Conchillo Flaqué, Aleksandr Slobodeniuk, Alicia Boya +García, Alireza Miryazdi, Andoni Morales Alastruey, Andrew Pritchard, +Arun Raghavan, A. Wilcox, Bastian Krause, Bastien Nocera, Benjamin +Gaignard, Bill Hofmann, Bo Elmgreen, Boyuan Zhang, Brad Hards, Branko +Subasic, Bruce Liang, Bunio FH, byran77, Camilo Celis Guzman, Carlos +Falgueras García, Carlos Rafael Giani, Célestin Marot, Christian Wick, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, Colin +Kinloch, Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel +Almeida, Daniel Morin, Daniel Stone, Daniels Umanovskis, Danny Smith, +David Svensson Fors, Devin Anderson, Diogo Goncalves, Dmitry Osipenko, +Dongil Park, Doug Nazar, Edward Hervey, ekwange, Eli Schwartz, Elliot +Chen, Enrique Ocaña González, Eric Knapp, Erwann Gouesbet, Evgeny +Pavlov, Fabian Orccon, Fabrice Fontaine, Fan F He, F. Duncanh, Filip +Hanes, Florian Zwoch, François Laignel, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Henry Hoegelow, Hiero32, Hoonhee Lee, Hosang +Lee, Hou Qi, Hugo Svirak, Ignacio Casal Quinteiro, Ignazio Pillai, Igor +V. Kovalenko, Jacek Skiba, Jakub Adam, James Cowgill, James Hilliard, +Jan Alexander Steffens (heftig), Jan Lorenz, Jan Schmidt, Jianhui Dai, +jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Julian Bouzas, Junsoo Park, +Justin Chadwell, Khem Raj, Krystian Wojtas, László Károlyi, Linus +Svensson, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek Olejnik, Marek +Vasut, Marijn Suijten, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, +Mart Raudsepp, Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias +Clasen, Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Michael Gruner, +Michiel Konstapel, Mikhail Fludkov, Ming Qian, Mingyang Ma, Myles +Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, Pablo Marcos +Oltra, Patricia Muscalu, Patrick Griffis, Paweł Stawicki, Peter +Stensson, Philippe Normand, Philipp Zabel, Pierre Bourré, Piotr +Brzeziński, Rabindra Harlalka, Rafael Caricio, Rafael Sobral, Rafał +Dzięgiel, Raul Tambre, Robert Mader, Robert Rosengren, Rodrigo +Bernardes, Rouven Czerwinski, Ruben Gonzalez, Sam Van Den Berge, +Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Sebastian Fricke, +Sebastian Groß, Sebastian Mueller, Sebastian Wick, Sergei Kovalev, +Seungha Yang, Seungmin Kim, sezanzeb, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Talha Khan, Taruntej Kanakamalla, Thibault Saunier, +Tim Mooney, Tim-Philipp Müller, Tomasz Andrzejak, Tom Schuring, Tong Wu, +toor, Tristan Matthews, Tulio Beloqui, U. Artie Eoff, Víctor Manuel +Jáquez Leal, Vincent Cheah Beng Keat, Vivia Nikolaidou, Vivienne +Watermeier, WANG Xuerui, Wojciech Kapsa, Wonchul Lee, Wu Tong, Xabier +Rodriguez Calvar, Xavier Claessens, Yatin Mann, Yeongjin Jeong, Zebediah +Figura, Zhao Zhili, Zhiyuaniu, مهدي شينون (Mehdi Chinoune), … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.x bug-fix releases which will contain bug fixes which have been deemed suitable for a stable branch, but no new features or intrusive changes will be added to -a bug-fix release usually. The 1.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 is scheduled to be released around October/November 2021. +1.22.0 was originally released on 23 January 2023. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14, -1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. +1.24 will be backwards-compatible to the stable 1.22, 1.20, 1.18, 1.16, +1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. ------------------------------------------------------------------------ These release notes have been prepared by Tim-Philipp Müller with -contributions from … +contributions from Edward Hervey, Matthew Waters, Nicolas Dufresne, +Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, and +Thibault Saunier. License: CC BY-SA 4.0