1240 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1240 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| GStreamer 1.22 Release Notes
 | ||
| 
 | ||
| GStreamer 1.22.0 was originally released on 23 January 2023.
 | ||
| 
 | ||
| See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
 | ||
| version of this document.
 | ||
| 
 | ||
| Last updated: Monday 23 January 2023, 17:00 UTC (log)
 | ||
| 
 | ||
| Introduction
 | ||
| 
 | ||
| The GStreamer team is proud to announce a new major feature release in
 | ||
| the stable 1.x API series of your favourite cross-platform multimedia
 | ||
| framework!
 | ||
| 
 | ||
| As always, this release is again packed with many new features, bug
 | ||
| fixes and other improvements.
 | ||
| 
 | ||
| Highlights
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| 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.
 | ||
| 
 | ||
| -   vulkanshaderspv: performs operations with SPIRV shaders in Vulkan
 | ||
| 
 | ||
| -   win32ipcvideosink, win32ipcvideosrc: new shared memory videosrc/sink
 | ||
|     elements for Windows
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   The xingmux plugin has been moved from gst-plugins-ugly into
 | ||
|     gst-plugins-good.
 | ||
| 
 | ||
| -   The various Windows directshow plugins in gst-plugins-bad have been
 | ||
|     unified into a single directshow plugin.
 | ||
| 
 | ||
| Plugin removals
 | ||
| 
 | ||
| -   The dxgiscreencapsrc element has been removed, use
 | ||
|     d3d11screencapturesrc instead
 | ||
| 
 | ||
| Miscellaneous API additions
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| 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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   Add RFC5576 Source-specific media attribute to the SDP media for
 | ||
|     signalling the CNAME
 | ||
| 
 | ||
| -   Add support for adjusting request response on pipeline errors
 | ||
| 
 | ||
|     -   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
 | ||
| 
 | ||
| -   There were no changes in this module
 | ||
| 
 | ||
| GStreamer Editing Services and NLE
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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 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. 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
 | ||
| 
 | ||
| -   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)
 | ||
| 
 | ||
| -   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.
 | ||
| 
 | ||
| -   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.
 | ||
| 
 | ||
| General improvements
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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,<path_to_libdir> 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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   Universal Windows Platform prebuilt binaries are no longer available
 | ||
| 
 | ||
| Linux
 | ||
| 
 | ||
| -   Various fixes for RHEL/CentOS 7 support
 | ||
| -   Added support for running on Linux ARM64
 | ||
| 
 | ||
| Android
 | ||
| 
 | ||
| -   Android support now requires Android API version 21 (Lollipop)
 | ||
| -   Support for Android Gradle plugin 7.2
 | ||
| 
 | ||
| Platform-specific changes and improvements
 | ||
| 
 | ||
| Android
 | ||
| 
 | ||
| -   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,<path_to_libdir> to the
 | ||
|     linker.
 | ||
| 
 | ||
| -   avfvideosrc: Allow specifying crop coordinates during screen capture
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   The GStreamer Rust plugins are now included and documented in the
 | ||
|     plugin documentation.
 | ||
| 
 | ||
| Possibly Breaking Changes
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   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
 | ||
| 
 | ||
| -   209842 lines deleted
 | ||
| 
 | ||
| -   259791 lines added (net)
 | ||
| 
 | ||
| Contributors
 | ||
| 
 | ||
| Á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.22 branch
 | ||
| 
 | ||
| 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.22.x bug-fix releases will be made from
 | ||
| the git 1.22 branch, which will be a stable branch.
 | ||
| 
 | ||
| 1.22.0
 | ||
| 
 | ||
| 1.22.0 was originally released on 23 January 2023.
 | ||
| 
 | ||
| Schedule for 1.24
 | ||
| 
 | ||
| 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.24 development cycle is yet to be confirmed.
 | ||
| 
 | ||
| 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 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
 |