1360 lines
		
	
	
		
			68 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1360 lines
		
	
	
		
			68 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| GStreamer 1.24 Release Notes
 | ||
| 
 | ||
| GStreamer 1.24.0 was originally released on 4 March 2024.
 | ||
| 
 | ||
| See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document.
 | ||
| 
 | ||
| Last updated: Monday 4 March 2024, 23: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
 | ||
| 
 | ||
| -   New Discourse forum and Matrix chat space
 | ||
| -   New Analytics and Machine Learning abstractions and elements
 | ||
| -   Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer
 | ||
| -   The va plugin is now preferred over gst-vaapi and has higher ranks
 | ||
| -   GstMeta serialization/deserialization and other GstMeta improvements
 | ||
| -   New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data
 | ||
| -   New unixfd plugin for efficient 1:N inter-process communication on Linux
 | ||
| -   cudaipc source and sink for zero-copy CUDA memory sharing between processes
 | ||
| -   New intersink and intersrc elements for 1:N pipeline decoupling within the same process
 | ||
| -   Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements
 | ||
| -   DRM Modifier Support for dmabufs on Linux
 | ||
| -   OpenGL, Vulkan and CUDA integration enhancements
 | ||
| -   Vulkan H.264 and H.265 video decoders
 | ||
| -   RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders
 | ||
| -   WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink
 | ||
| -   WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams
 | ||
| -   WHIP server source and client sink, and a WHEP source
 | ||
| -   Precision Time Protocol (PTP) clock support for Windows and other additions
 | ||
| -   Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements
 | ||
| -   New W3C Media Source Extensions library
 | ||
| -   Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements
 | ||
| -   Translation support for awstranscriber
 | ||
| -   Bayer 10/12/14/16-bit depth support
 | ||
| -   MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features
 | ||
| -   Capture source and sink for AJA capture and playout cards
 | ||
| -   SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder
 | ||
| -   New uvcsink element for exporting streams as UVC camera
 | ||
| -   DirectWrite text rendering plugin for windows
 | ||
| -   Direct3D12-based video decoding, conversion, composition, and rendering
 | ||
| -   AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support
 | ||
| -   AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc
 | ||
| -   GStreamer C# bindings have been updated
 | ||
| -   Rust bindings improvements and many new and improved Rust plugins
 | ||
| -   Lots of new plugins, features, performance improvements and bug fixes
 | ||
| 
 | ||
| Major new features and changes
 | ||
| 
 | ||
| Discourse forum and Matrix chat space
 | ||
| 
 | ||
| -   The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat.
 | ||
| 
 | ||
| -   The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well.
 | ||
| 
 | ||
| -   For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to
 | ||
|     also send announcements to the mailing list for the time being.
 | ||
| 
 | ||
| Playbin3, decodebin3 now stable and default
 | ||
| 
 | ||
| -   After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3
 | ||
|     and urisourcebin), are now the recommended playback components.
 | ||
| 
 | ||
| -   Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries.
 | ||
|     Application developers are strongly recommended to switch to using those components instead of the legacy playbin and
 | ||
|     (uri)decodebin.
 | ||
| 
 | ||
| Improvements in this cycle:
 | ||
| 
 | ||
| -   Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream.
 | ||
| 
 | ||
| -   Many fixes for more complex gapless and instant-switching scenarios
 | ||
| 
 | ||
| -   Lower latency for live pipelines
 | ||
| 
 | ||
| -   Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS)
 | ||
| 
 | ||
| -   Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also
 | ||
|     partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only
 | ||
|     do timing detection and optional seeking).
 | ||
| 
 | ||
| GstMeta serialization/deserialization and other GstMeta improvements
 | ||
| 
 | ||
| -   GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc
 | ||
|     plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and
 | ||
|     GstReferenceTimestampMeta.
 | ||
| 
 | ||
| -   Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform
 | ||
|     functions are not needed.
 | ||
| 
 | ||
| -   GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to
 | ||
|     the pool.
 | ||
| 
 | ||
| -   Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility.
 | ||
| 
 | ||
| New unixfd plugin for efficient 1:N inter-process communication on Linux
 | ||
| 
 | ||
| -   unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf)
 | ||
|     from one sink to multiple source elements in other processes on Linux.
 | ||
| 
 | ||
| -   The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly
 | ||
|     into memory that can be transfered to other processes without copying.
 | ||
| 
 | ||
| New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data
 | ||
| 
 | ||
| -   Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta.
 | ||
|     The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard
 | ||
|     ancillary data. See GstAncillaryMeta for details.
 | ||
| 
 | ||
| -   Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or
 | ||
|     gst_buffer_iterate_ancillary_meta().
 | ||
| 
 | ||
| -   Supported by the newly added AJA sink and source elements
 | ||
| 
 | ||
| DSD audio support
 | ||
| 
 | ||
| -   DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new
 | ||
|     GstDsdInfo and GstDsdFormat API.
 | ||
| 
 | ||
| -   Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and
 | ||
|     the gst-libav plugin to enable FFmpeg-based DSD elements and functionality.
 | ||
| 
 | ||
| Analytics and Machine Learning
 | ||
| 
 | ||
| -   A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number
 | ||
|     of observations from a data analysis process, for example from machine learning. It also contains a matrix of the
 | ||
|     relationship between those observations.
 | ||
| 
 | ||
| -   Three types of metadata are already defined in the library: object detection, classification and tracking.
 | ||
| 
 | ||
| -   A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection
 | ||
|     and classification metadata types.
 | ||
| 
 | ||
| -   The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual
 | ||
|     inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates
 | ||
|     GstAnalyticsRelationMeta.
 | ||
| 
 | ||
| -   The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image”
 | ||
|     type and the format is something that GStreamer knows.
 | ||
| 
 | ||
| -   In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with
 | ||
|     other machine learning acceleration frameworks.
 | ||
| 
 | ||
| Qt5 + Qt6 QML integration improvements
 | ||
| 
 | ||
| -   The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a
 | ||
|     prior glcolorconvert.
 | ||
| 
 | ||
| -   New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support
 | ||
|     for directly consuming BGRA and YV12 video frames without a prior glcolorconvert.
 | ||
| 
 | ||
| -   qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink.
 | ||
| 
 | ||
| DRM Modifier Support for dmabufs on Linux
 | ||
| 
 | ||
| The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used
 | ||
| extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and
 | ||
| also to exchange buffers with other subsystems such as Linux Media.
 | ||
| 
 | ||
| In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL
 | ||
| integration, Wayland renderers, etc.
 | ||
| 
 | ||
| GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components,
 | ||
| however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant
 | ||
| that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”.
 | ||
| 
 | ||
| With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated
 | ||
| between components.
 | ||
| 
 | ||
| This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g.
 | ||
| drm-format=(string)NV12:0x0x0100000000000001.
 | ||
| 
 | ||
| See the GStreamer DMA buffers design documentation for more details.
 | ||
| 
 | ||
| This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected
 | ||
| to land in one of the next minor releases.
 | ||
| 
 | ||
| New API has been added for easy handling of these new caps:
 | ||
| 
 | ||
| -   GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with
 | ||
|     gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info()
 | ||
| 
 | ||
| -   GST_VIDEO_DMA_DRM_CAPS_MAKE
 | ||
| 
 | ||
| -   GST_VIDEO_FORMAT_DMA_DRM
 | ||
| 
 | ||
| OpenGL integration enhancements
 | ||
| 
 | ||
| -   When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some
 | ||
|     necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API
 | ||
|     first.
 | ||
| 
 | ||
| -   Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with
 | ||
|     explicit modifiers.
 | ||
| 
 | ||
| -   Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing
 | ||
|     filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on
 | ||
|     GstVideoAggregator.
 | ||
| 
 | ||
| -   Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless.
 | ||
| 
 | ||
| -   Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API
 | ||
| 
 | ||
| -   Add support for more video formats:
 | ||
| 
 | ||
|     -   A420 8/10/12/16-bit.
 | ||
|     -   A422 8/10/12/16-bit.
 | ||
|     -   A444 8/10/12/16-bit.
 | ||
|     -   I420 10/12 bit.
 | ||
|     -   RBGA.
 | ||
| 
 | ||
| -   Add support for tiled video formats
 | ||
| 
 | ||
|     -   NV12_16L32S (Mediatek format)
 | ||
|     -   NV12_4L4 (Verisilicon Hantro format)
 | ||
| 
 | ||
| -   glcolorconvert now has API for retrieving shader strings for:
 | ||
| 
 | ||
|     -   swizzling (reordering components).
 | ||
|     -   YUV->RGB conversion.
 | ||
|     -   RGB->YUV conversion.
 | ||
| 
 | ||
| -   Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel
 | ||
|     ordering.
 | ||
| 
 | ||
| -   glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor.
 | ||
| 
 | ||
| -   GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for
 | ||
|     reducing the potential synchronisation delay when reusing OpenGL memory backed buffers.
 | ||
| 
 | ||
| Vulkan integration enhancements
 | ||
| 
 | ||
| -   Add support for the Vulkan H.264 and H.265 decoders.
 | ||
| 
 | ||
| -   Add support for timeline semaphores.
 | ||
| 
 | ||
| -   Optionally use newer Vulkan functions for format selection.
 | ||
| 
 | ||
| -   Add support for GPU-assisted validation.
 | ||
| 
 | ||
| -   Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell
 | ||
|     interface is being removed from compositors.
 | ||
| 
 | ||
| CUDA / NVCODEC integration and feature additions
 | ||
| 
 | ||
| -   New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes
 | ||
| 
 | ||
| -   New nvJPEG library based nvjpegenc JPEG encoder element
 | ||
| 
 | ||
| -   The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec,
 | ||
|     nvh265dec, nvvp8dec, and nvvp9dec, respectively.
 | ||
| 
 | ||
| -   GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption
 | ||
|     inserting.
 | ||
| 
 | ||
| -   OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements
 | ||
| 
 | ||
| -   CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not
 | ||
|     execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map
 | ||
|     flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed
 | ||
|     with the GstCudaMemory’s associated CUDA stream.
 | ||
| 
 | ||
| RTP stack improvements
 | ||
| 
 | ||
| -   New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element.
 | ||
|     This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain
 | ||
|     properties at the end of an RTSP media sub-pipeline.
 | ||
| 
 | ||
| -   New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic
 | ||
|     timeout of sources from which no data has been received for a while.
 | ||
| 
 | ||
| -   rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to
 | ||
|     bring it in line with the VP8 payloader.
 | ||
| 
 | ||
| -   rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new
 | ||
|     properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be
 | ||
|     useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access
 | ||
|     to the network of the PTP clock provider. The two new properties are:
 | ||
| 
 | ||
|     -   “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the
 | ||
|         media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media
 | ||
|         clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s
 | ||
|         Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is
 | ||
|         enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock,
 | ||
|         which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps.
 | ||
|         There is also no start-up delay, because there’s no clock sync that needs to be established first.
 | ||
| 
 | ||
|     -   “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp
 | ||
|         calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock
 | ||
|         for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of
 | ||
|         a clock reference meta.
 | ||
| 
 | ||
| -   RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header
 | ||
|     extensions.
 | ||
| 
 | ||
| -   rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but
 | ||
|     instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element
 | ||
|     in lieu of a jitter buffer.
 | ||
| 
 | ||
| -   RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer.
 | ||
|     Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets
 | ||
|     pushed before an output buffer is produced and checks all RTP input buffers for header extensions.
 | ||
| 
 | ||
|     -   Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay,
 | ||
|         rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay,
 | ||
|         rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay.
 | ||
| 
 | ||
| WebRTC improvements
 | ||
| 
 | ||
| -   Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22.
 | ||
| 
 | ||
| -   Advertise the local side of an end-of-candidates with an empty candidate string.
 | ||
| 
 | ||
| -   Add the number of Data Channels opened and closed to webrtcbin’s statistics.
 | ||
| 
 | ||
| -   Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as
 | ||
|     well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details.
 | ||
| 
 | ||
| Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support
 | ||
| 
 | ||
| -   hlsdemux2 now supports Low-Latency HLS (LL-HLS)
 | ||
| 
 | ||
| -   hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage.
 | ||
| 
 | ||
| -   hlsdemux2 handles fallback variant URLs.
 | ||
| 
 | ||
| -   hlsdemux2 is more responsive and accurate when handling seeks.
 | ||
| 
 | ||
| -   dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that
 | ||
|     will be used.
 | ||
| 
 | ||
| -   dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek”
 | ||
|     which allows playback to start immediately from the requested position without any previous download.
 | ||
| 
 | ||
| -   dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge.
 | ||
| 
 | ||
| -   dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec
 | ||
|     strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD.
 | ||
| 
 | ||
| -   No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use
 | ||
|     the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3.
 | ||
| 
 | ||
| W3C Media Source Extensions library
 | ||
| 
 | ||
| -   A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added.
 | ||
| 
 | ||
| -   Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs
 | ||
|     without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript
 | ||
|     bindings that match the Media Source API so their existing code can integrate with this library.
 | ||
| 
 | ||
| Closed Caption handling improvements
 | ||
| 
 | ||
| -   ccconverter supports converting between the two CEA-608 fields.
 | ||
| 
 | ||
| -   New cea608mux element for muxing multiple CEA-608 streams together.
 | ||
| 
 | ||
| -   Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section
 | ||
|     below for more details.
 | ||
| 
 | ||
| Precision Time Protocol (PTP) clock improvements
 | ||
| 
 | ||
| -   Many fixes and compatibility/interoperability improvements.
 | ||
| 
 | ||
| -   Better support for running on devices with multiple network interfaces.
 | ||
| 
 | ||
| -   Allow sync to master clock on same host.
 | ||
| 
 | ||
| -   PTP clock support is now also available on Windows.
 | ||
| 
 | ||
| -   The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android,
 | ||
|     Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is
 | ||
|     Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed.
 | ||
|     Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version
 | ||
|     currently in Debian stable. On Windows, Rust 1.54 is needed at least.
 | ||
| 
 | ||
| -   New ptp-helper Meson build option so PTP support can be disabled or required.
 | ||
| 
 | ||
| -   gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP
 | ||
|     subsystem, including TTL configuration.
 | ||
| 
 | ||
| Bayer 10/12/14/16-bit depth support
 | ||
| 
 | ||
| -   bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths
 | ||
| 
 | ||
| -   v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths
 | ||
| 
 | ||
| -   imagefreeze gained bayer support as well
 | ||
| 
 | ||
| MPEG-TS improvements
 | ||
| 
 | ||
| -   mpegtsdemux gained support for
 | ||
|     -   segment seeking for seamless non-flushing looping, and
 | ||
|     -   synchronous KLV
 | ||
| -   mpegtsmux now
 | ||
|     -   allows attaching PCR to non-PES streams
 | ||
|     -   allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the
 | ||
|         muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types.
 | ||
|     -   allows writing arbitrary Opus channel mapping families and up to 255 channels
 | ||
|     -   separate handling of DVB and ATSC AC3 descriptors
 | ||
| 
 | ||
| New elements and plugins
 | ||
| 
 | ||
| -   analyticsoverlay visualises object-detection metas on a video stream.
 | ||
| 
 | ||
| -   autovideoflip and autodeinterlace are two new auto elements.
 | ||
| 
 | ||
| -   AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC
 | ||
|     ancillary data.
 | ||
| 
 | ||
| -   New cea608mux element for muxing multiple CEA-608 streams together.
 | ||
| 
 | ||
| -   The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8
 | ||
|     frame parameters into human readable JSON data, which is useful for debugging and testing purposes.
 | ||
| 
 | ||
| -   New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec.
 | ||
| 
 | ||
| -   New onnxinference element to run ONNX inference models on video buffers.
 | ||
| 
 | ||
| -   New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element.
 | ||
|     This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server.
 | ||
| 
 | ||
| -   Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink
 | ||
| 
 | ||
| -   New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes.
 | ||
| 
 | ||
| -   Many exciting new Rust elements, see Rust section below.
 | ||
| 
 | ||
| -   New DirectWrite text rendering and Direct3D12 plugins (see Windows section below).
 | ||
| 
 | ||
| -   New vaav1enc element for encoding video in AV1 (See VA-API section)
 | ||
| 
 | ||
| -   New uvcsink element for exporting streams as UVC camera
 | ||
| 
 | ||
| New element features and additions
 | ||
| 
 | ||
| -   alphacombine supports I420_10LE now for 10-bit WebM/alpha support.
 | ||
| 
 | ||
| -   The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some
 | ||
|     new features:
 | ||
| 
 | ||
|     -   10-bit and HDR support for H.265 / HEVC and AV1 video encoders
 | ||
|     -   B-frame support in the H.264 encoder
 | ||
|     -   Initial support of pre-analysis and pre-encoding
 | ||
|     -   Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances.
 | ||
| 
 | ||
| -   appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements,
 | ||
|     as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition
 | ||
|     to the existing “max-bytes” property.
 | ||
| 
 | ||
| -   autovideoconvert exposes colorspace and scaler elements for well know elements
 | ||
| 
 | ||
| -   avtp: add AVTP Raw Video Format payload and de-payload support.
 | ||
| 
 | ||
| -   cacasink’s output driver can now be selected via the “driver” property.
 | ||
| 
 | ||
| -   camerabin: various fixes and stability improvements
 | ||
| 
 | ||
| -   clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would.
 | ||
| 
 | ||
| -   cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property.
 | ||
| 
 | ||
| -   dashdemux2 has a new “start-bitrate” property.
 | ||
| 
 | ||
| -   dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec
 | ||
|     strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD.
 | ||
| 
 | ||
| -   deinterlace: Add support for 10/12/16-bit planar YUV formats
 | ||
| 
 | ||
| -   The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware
 | ||
|     decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer.
 | ||
| 
 | ||
| -   encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new
 | ||
|     “Timestamper” element factory type and rank.
 | ||
| 
 | ||
| -   New fakevideodec element (see debugging section below).
 | ||
| 
 | ||
| -   filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is
 | ||
|     useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation
 | ||
|     over time.
 | ||
| 
 | ||
| -   flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because
 | ||
|     librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2.
 | ||
|     If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are
 | ||
|     always strictly increasing, inside one stream and also between the audio and video streams.
 | ||
| 
 | ||
| -   giostreamsink: Add a property to close the stream on stop().
 | ||
| 
 | ||
| -   h264parse improved its AU boundary detection.
 | ||
| 
 | ||
| -   h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages.
 | ||
| 
 | ||
| -   insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just
 | ||
|     via the insertbin API.
 | ||
| 
 | ||
| -   jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped
 | ||
|     on Windows and macOS and will work if there’s a user-installed JACK server/library setup.
 | ||
| 
 | ||
| -   jpegparse now has a rank so it will be autoplugged if needed.
 | ||
| 
 | ||
| -   kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers.
 | ||
| 
 | ||
| -   matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE
 | ||
| 
 | ||
| -   mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with
 | ||
|     “freeformat” MP3s.
 | ||
| 
 | ||
| -   msdk:
 | ||
| 
 | ||
|     -   DRM modifier support on Linux
 | ||
| 
 | ||
|     -   only expose codecs and capabilities actually supported by the platform
 | ||
| 
 | ||
|     -   msdkvpp video post-processing:
 | ||
| 
 | ||
|         -   new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping
 | ||
|         -   new compute scaling mode
 | ||
| 
 | ||
|     -   Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes.
 | ||
| 
 | ||
|     -   Encoders:
 | ||
| 
 | ||
|         -   msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI
 | ||
|         -   msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames
 | ||
|         -   msdkh264enc: Added BGRx format DMABuf support
 | ||
|         -   Advertise special image formats in low power mode
 | ||
| 
 | ||
| -   mxfdemux gained support for FFV1 demuxing
 | ||
| 
 | ||
| -   opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel
 | ||
|     layouts.
 | ||
| 
 | ||
| -   The oss plugin gained a device provider for audio device discovery
 | ||
| 
 | ||
| -   pcapparse learned how to handle the Linux “cooked” capture encapsulation v2
 | ||
| 
 | ||
| -   Intel Quick Sync plugin improvements:
 | ||
| 
 | ||
|     -   qsvh264enc gained more encoding options
 | ||
|     -   qsvh265dec now supports GBR decoding and HEVC RExt profiles
 | ||
| 
 | ||
| -   qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ
 | ||
|     video codec.
 | ||
| 
 | ||
| -   ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the
 | ||
|     ristsrc receive other payload types than MPEG-TS.
 | ||
| 
 | ||
| -   rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has
 | ||
|     been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With
 | ||
|     the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios.
 | ||
| 
 | ||
| -   rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling.
 | ||
| 
 | ||
| -   sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new
 | ||
|     “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property.
 | ||
| 
 | ||
| -   splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, …
 | ||
| 
 | ||
| -   srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped.
 | ||
| 
 | ||
| -   switchbin: many improvements, especially for caps handling and passthrough.
 | ||
| 
 | ||
| -   taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream
 | ||
|     tags.
 | ||
| 
 | ||
| -   timeoverlay: add buffer-count and buffer-offset time modes.
 | ||
| 
 | ||
| -   udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604.
 | ||
| 
 | ||
| -   videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not
 | ||
|     exposed directly as property.
 | ||
| 
 | ||
| -   videoflip: many orientation tag handling fixes and improvements
 | ||
| 
 | ||
| -   videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers.
 | ||
| 
 | ||
| -   volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just
 | ||
|     allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons).
 | ||
| 
 | ||
| -   waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput.
 | ||
| 
 | ||
| -   webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just
 | ||
|     output a stand-alone WebP image for each input buffer, just like before.
 | ||
| 
 | ||
| -   wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support.
 | ||
| 
 | ||
| -   x264enc gained support for 8-bit monochrome video (GRAY8).
 | ||
| 
 | ||
| -   ximagesrc gained navigation support (mouse and keyboard events).
 | ||
| 
 | ||
| -   y4mdec now parses extended headers to support high bit depth video.
 | ||
| 
 | ||
| Plugin and library moves
 | ||
| 
 | ||
| -   The AMR-NB and AMR-WB plugins have been moved from -bad to -good.
 | ||
| 
 | ||
| Plugin and element removals
 | ||
| 
 | ||
| -   The entire gst-omx package and plugin has been retired. See the OMX section below for more details.
 | ||
| 
 | ||
| -   The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin.
 | ||
| 
 | ||
| -   The kate subtitle plugin has been removed.
 | ||
| 
 | ||
| Miscellaneous API additions
 | ||
| 
 | ||
| GStreamer Core
 | ||
| 
 | ||
| -   gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured
 | ||
|     latency of a pipeline.
 | ||
| 
 | ||
| -   Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic
 | ||
|     plugins that register features at runtime. They are now able to provide information to the user why features might not be
 | ||
|     available. This is now used in the amfcodec, nvcodec, qsv, and va plugins.
 | ||
| 
 | ||
| -   GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject
 | ||
|     that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in
 | ||
|     GStreamer code that needs to be portable to e.g. Windows with MSVC.
 | ||
| 
 | ||
| -   gst_clear_context(), gst_clear_promise(), gst_clear_sample()
 | ||
| 
 | ||
| -   gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions
 | ||
| 
 | ||
| -   New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in
 | ||
|     matroskademux, qtdemux, dashdemux and dashdemux2
 | ||
| 
 | ||
| -   New utility functions to create a stream-id without a pad for elements:
 | ||
| 
 | ||
|     -   gst_element_decorate_stream_id()
 | ||
|     -   gst_element_decorate_stream_id_printf_valist()
 | ||
|     -   gst_element_decorate_stream_id_printf()
 | ||
| 
 | ||
| -   GstQueueArray gained API for sorting and sorted insertion
 | ||
| 
 | ||
| -   Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT
 | ||
|     which only succeeds if the result can later be fully deserialised again.
 | ||
| 
 | ||
| -   GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos().
 | ||
|     gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their
 | ||
|     own internal queuing.
 | ||
| 
 | ||
| -   GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual
 | ||
|     ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures
 | ||
|     that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped.
 | ||
| 
 | ||
| GstDiscoverer
 | ||
| 
 | ||
| -   New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo
 | ||
| 
 | ||
| GstSDP
 | ||
| 
 | ||
| -   Add gst_sdp_message_remove_media()
 | ||
| 
 | ||
| Video Library
 | ||
| 
 | ||
| DRM Modifier Support for dmabufs on Linux
 | ||
| 
 | ||
| See section above.
 | ||
| 
 | ||
| List of Video Formats for Passthrough
 | ||
| 
 | ||
| New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise
 | ||
| all supported formats for passthrough purposes:
 | ||
| 
 | ||
| -   GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY
 | ||
| -   gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings.
 | ||
| 
 | ||
| New Video Formats
 | ||
| 
 | ||
| -   12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants:
 | ||
| 
 | ||
|     -   A444_12BE, A444_12LE
 | ||
|     -   A422_12BE, A422_12LE
 | ||
|     -   A420_12BE, A420_12LE
 | ||
|     -   A444_16BE, A444_16LE
 | ||
|     -   A422_16BE, A422_16LE
 | ||
|     -   A420_16BE, A420_16LE
 | ||
| 
 | ||
| -   8-bit A422 / A444 (YUV with alpha channel) variant:
 | ||
| 
 | ||
|     -   A422
 | ||
|     -   A444
 | ||
| 
 | ||
| -   Planar 16-bit 4:4:4 RGB formats:
 | ||
| 
 | ||
|     -   GBR_16BE
 | ||
|     -   GBR_16LE
 | ||
| 
 | ||
| -   RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded
 | ||
|     with GBR color space, such as HEVC and VP9 GBR streams for example.
 | ||
| 
 | ||
| -   Two tiled Mediatek 10-bit formats:
 | ||
| 
 | ||
|     -   MT2110T
 | ||
|     -   MT2110R
 | ||
| 
 | ||
| -   Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro)
 | ||
| 
 | ||
| Miscellaneous performance, latency and memory optimisations
 | ||
| 
 | ||
| -   liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend.
 | ||
| 
 | ||
| -   liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs.
 | ||
| 
 | ||
| -   Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides
 | ||
|     much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it
 | ||
|     causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming.
 | ||
| 
 | ||
| -   As always there have been plenty of performance, latency and memory optimisations all over the place.
 | ||
| 
 | ||
| Tracing framework and debugging improvements
 | ||
| 
 | ||
| -   The gst-stats tool can now be passed a custom regular expression
 | ||
| 
 | ||
| -   gst-debug-viewer from the devtools module has seen minor improvements and fixes
 | ||
| 
 | ||
| New tracers
 | ||
| 
 | ||
| -   None in this release.
 | ||
| 
 | ||
| Debug logging system improvements
 | ||
| 
 | ||
| -   Nothing major in this cycle.
 | ||
| 
 | ||
| Fake video decoder
 | ||
| 
 | ||
| -   The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the
 | ||
|     caps and then pushes out raw video frames of the expected size in RGB format.
 | ||
| 
 | ||
| -   It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides
 | ||
|     an idea about how smooth the rendering is.
 | ||
| 
 | ||
| Tools
 | ||
| 
 | ||
| -   gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer
 | ||
|     to set the class or app-id.
 | ||
| 
 | ||
| -   gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2
 | ||
|     command line argument.
 | ||
| 
 | ||
| GStreamer FFmpeg wrapper
 | ||
| 
 | ||
| -   New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR).
 | ||
| 
 | ||
| -   Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes
 | ||
|     to have parsers and decoders separate.
 | ||
| 
 | ||
| -   Added codec mappings for AV1, MxPEG, FFVHuff video
 | ||
| 
 | ||
| -   Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412.
 | ||
| 
 | ||
| -   Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer.
 | ||
| 
 | ||
| -   The FFmpeg meson subproject wrap has been updated to v6.1
 | ||
| 
 | ||
| -   Note: see Known Issues section below for known issues with FFmpeg 6.0
 | ||
| 
 | ||
| GStreamer RTSP server
 | ||
| 
 | ||
| -   New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for
 | ||
|     connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain
 | ||
|     the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by
 | ||
|     setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but
 | ||
|     discard it if too much time has passed and instead force a new key unit.
 | ||
| 
 | ||
| -   rtspclientsink: apply “port-range” property for RTCP port selection as well
 | ||
| 
 | ||
| GStreamer VA-API support
 | ||
| 
 | ||
| GstVA
 | ||
| 
 | ||
| -   vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux
 | ||
| 
 | ||
| -   Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit
 | ||
|     modifiers. This supports both import and export of dmabufs.
 | ||
| 
 | ||
| -   Added vaav1enc element, available in recent Intel and AMD GPUs
 | ||
| 
 | ||
| -   Added support for the experimental VA-Win32 backend. It needs at least libva 1.18
 | ||
| 
 | ||
| -   Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised.
 | ||
| 
 | ||
| -   Bumped minimum libva version to 1.12
 | ||
| 
 | ||
| -   Enhanced support for RadeonSI Mesa driver for 10bit decoding
 | ||
| 
 | ||
| -   Register elements only for allowed drivers (Intel and Mesa, for the moment)
 | ||
| 
 | ||
| GStreamer-VAAPI
 | ||
| 
 | ||
| -   The new GstVA elements (see above) should be preferred when possible.
 | ||
| 
 | ||
| -   Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore.
 | ||
| 
 | ||
| -   Clean-ups and minimal fixes.
 | ||
| 
 | ||
| -   gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature
 | ||
|     equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest
 | ||
|     opportunity.
 | ||
| 
 | ||
| GStreamer Video4Linux2 support
 | ||
| 
 | ||
| -   New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver.
 | ||
| 
 | ||
| -   v4l2src now supports 10/12/14/16-bit bayer formats.
 | ||
| 
 | ||
| -   Stateful decoders now pass too large encoded frames over multiple buffers.
 | ||
| 
 | ||
| -   AV1 Stateless video decoder.
 | ||
| 
 | ||
| -   Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI
 | ||
| 
 | ||
| GStreamer OMX
 | ||
| 
 | ||
| -   The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it.
 | ||
|     There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based
 | ||
|     video encoders and decoders which have been the standard on embedded Linux for quite some time now.
 | ||
| 
 | ||
| -   Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it
 | ||
|     while planning their move to the Video4Linux API.
 | ||
| 
 | ||
| GStreamer Editing Services and NLE
 | ||
| 
 | ||
| -   Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of
 | ||
|     effects. By default scaling is done in the compositor.
 | ||
| 
 | ||
| -   Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as
 | ||
|     sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using
 | ||
|     gesdemux).
 | ||
| 
 | ||
| -   Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files
 | ||
|     cleaner and allowing to expose the following APIs:
 | ||
| 
 | ||
|     -   load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without
 | ||
|         requiring discovering the file when reloading a project.
 | ||
|     -   source-setup signal so user can tweak source elements during discovery
 | ||
| 
 | ||
| -   Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account
 | ||
|     that meta.
 | ||
| 
 | ||
| -   Expose audioconvert:mix-matrix property in audio sources
 | ||
| 
 | ||
| -   Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX
 | ||
|     etc..) and leverage all new features of that new element.
 | ||
| 
 | ||
| ges-launch
 | ||
| 
 | ||
| -   Fix setting keyframes
 | ||
| 
 | ||
| -   Add an ignore-eos option
 | ||
| 
 | ||
| -   Allow overriding container profile so that the user can build encoding profiles following the media format of a specific
 | ||
|     media file, for example, but ensuring it is muxed using a specific format
 | ||
| 
 | ||
| -   Ensure sink elements are inside a GstBin and never in a GstPipeline
 | ||
| 
 | ||
| -   Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the
 | ||
|     beginning of the chain while the syntax is +effect felt wrong
 | ||
| 
 | ||
| GStreamer validate
 | ||
| 
 | ||
| -   In action types, add a way to avoid checking property value after setting it, in case elements do it async for example.
 | ||
| 
 | ||
| -   Add a vmethod to free GstValidateActionParameters to be more binding friendly.
 | ||
| 
 | ||
| -   Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state.
 | ||
| 
 | ||
| -   Add support to run sub-pipelines/scenarios
 | ||
| 
 | ||
|     -   Added support to forward buffers from appsink to appsrc
 | ||
| 
 | ||
| -   Add a way to set pipeline base-time, start-time and force using the system clock.
 | ||
| 
 | ||
| -   Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving
 | ||
|     control when writing scenarios without requiring files with the content.
 | ||
| 
 | ||
| -   Add a “select-streams” action type to test “stream aware” elements.
 | ||
| 
 | ||
| -   Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait
 | ||
|     for a pad to get some specific caps set before executing an action.
 | ||
| 
 | ||
| -   validate: Add support to replace variables in deeply nested structures in particular for more complex action types where
 | ||
|     some of the properties are inside structures.
 | ||
| 
 | ||
| -   Fixed compatibility with Python 3.12.
 | ||
| 
 | ||
| GStreamer Python Bindings
 | ||
| 
 | ||
| gst-python is an extension of the regular GStreamer Python bindings based on gobject-introspection information and PyGObject,
 | ||
| and provides “syntactic sugar” in form of overrides for various GStreamer APIs that makes them easier to use in Python and more
 | ||
| pythonic; as well as support for APIs that aren’t available through the regular gobject-introspection based bindings, such as
 | ||
| e.g. GStreamer’s fundamental GLib types such as Gst.Fraction, Gst.IntRange etc.
 | ||
| 
 | ||
| -   Added a GstTagList override that makes a tag list act like a dict
 | ||
| 
 | ||
| -   Fix build and usage in Windows
 | ||
| 
 | ||
| -   Various fixes for Python >= 3.12
 | ||
| 
 | ||
| -   Rework libpython loading to be relocatable
 | ||
| 
 | ||
| -   Fix libpython dlopen on macOS
 | ||
| 
 | ||
| GStreamer C# Bindings
 | ||
| 
 | ||
| -   The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with
 | ||
|     that version.
 | ||
| 
 | ||
| -   GStreamer API added in recent GStreamer releases is now available
 | ||
| 
 | ||
| -   GstRtspServer bindings have been added, plus an RTSP server example
 | ||
| 
 | ||
| GStreamer Rust Bindings and Rust Plugins
 | ||
| 
 | ||
| The GStreamer Rust bindings and plugins are released separately with a different release cadence that’s tied to the twice-a-year
 | ||
| GNOME release cycle.
 | ||
| 
 | ||
| The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer
 | ||
| version starting at 1.14.
 | ||
| 
 | ||
| gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements
 | ||
| and plugins. The GStreamer 1.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be
 | ||
| backported as needed to the 0.12 brach for future 1.24.x bugfix releases.
 | ||
| 
 | ||
| Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++.
 | ||
| 
 | ||
| WebRTC
 | ||
| 
 | ||
| -   New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can
 | ||
|     support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element
 | ||
|     factory for easier usage but it is also possible for applications to provide new signalling protocol implementations.
 | ||
| 
 | ||
| -   webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to
 | ||
|     the default signaller.
 | ||
| 
 | ||
| -   A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller
 | ||
|     implementation is currently in a merge request in GitLab.
 | ||
| 
 | ||
| -   New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new
 | ||
|     element around webrtcsrc will be added.
 | ||
| 
 | ||
| -   New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer.
 | ||
| 
 | ||
| -   New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old
 | ||
|     whipsink element.
 | ||
| 
 | ||
| -   A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged
 | ||
|     into the git repository recently.
 | ||
| 
 | ||
| -   A new signaller and webrtcsink implementation for AWS Kinesis Video Streams
 | ||
| 
 | ||
| -   webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader
 | ||
|     configuration, similar to the already existing encoder-setup signal for encoders.
 | ||
| 
 | ||
| -   webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the
 | ||
|     navigation event protocol supported by webrtcsink.
 | ||
| 
 | ||
| -   webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any
 | ||
|     encoded stream parameters.
 | ||
| 
 | ||
| -   webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can
 | ||
|     be used, for example, for the same use-cases as the WebRTC Insertable Streams API.
 | ||
| 
 | ||
| -   gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc.
 | ||
| 
 | ||
| … and various other smaller improvements!
 | ||
| 
 | ||
| RTSP
 | ||
| 
 | ||
| -   New rtspsrc2 element. Only a subset of RTSP features are implemented so far:
 | ||
|     -   RTSP 1.0 support
 | ||
|     -   TCP, UDP, UDP-Multicast lower transports
 | ||
|     -   RTCP SR, RTCP RR, RTCP-based A/V sync
 | ||
|         -   Tested for correctness in multicast cases too
 | ||
|     -   Lower transport selection and order (NEW!)
 | ||
|         -   The existing rtspsrc has a hard-coded order list for lower transports
 | ||
|     -   Many advanced features are not implemented yet, such as non-live support. See the README for the current status.
 | ||
| 
 | ||
| GTK4
 | ||
| 
 | ||
| -   Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows.
 | ||
| 
 | ||
| -   Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set.
 | ||
| 
 | ||
| -   New background-color property for setting the color of the background of the frame and the borders, if any. This also allows
 | ||
|     setting a fully transparent background.
 | ||
| 
 | ||
| -   New scale-filter property for defining how to scale the frames.
 | ||
| 
 | ||
| -   Add Python example application to the repository.
 | ||
| 
 | ||
| -   Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the
 | ||
|     gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature.
 | ||
| 
 | ||
| Closed Caption
 | ||
| 
 | ||
| -   Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation.
 | ||
| 
 | ||
| -   Add support for translations within transcriberbin.
 | ||
| 
 | ||
| -   awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same
 | ||
|     time.
 | ||
| 
 | ||
| -   awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one.
 | ||
| 
 | ||
| Other new elements
 | ||
| 
 | ||
| -   New awss3putobjectsink that works similar to awss3sink but with a different upload strategy.
 | ||
| 
 | ||
| -   New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments.
 | ||
| 
 | ||
| -   New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process.
 | ||
|     This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust
 | ||
|     bindings, and is also used inside webrtcsrc and webrtcsink.
 | ||
| 
 | ||
| -   New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source.
 | ||
| 
 | ||
| -   New isomp4mux non-fragmented MP4 muxer element.
 | ||
| 
 | ||
| Other improvements
 | ||
| 
 | ||
| -   audiornnoise
 | ||
|     -   Attach audio level meta to output buffers.
 | ||
|     -   Add voice detection threshold property
 | ||
| -   fmp4mux
 | ||
|     -   Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH
 | ||
|     -   Add support for muxing Opus, VP8, VP9 and AV1 streams
 | ||
|     -   Add ‘offset-to-zero’ property and make media/track timescales configurable
 | ||
| -   hlssink3
 | ||
|     -   Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest.
 | ||
|     -   Allow generating I-frame-only playlist
 | ||
| -   ndi
 | ||
|     -   Closed Caption support in ndisrc / ndisink
 | ||
|     -   Zero-copy output support in ndisrc for raw video and audio
 | ||
| -   spotifyaudiosrc: Support configurable bitrate
 | ||
| 
 | ||
| For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer
 | ||
| 1.22) and 0.12 (shipped with GStreamer 1.24).
 | ||
| 
 | ||
| Cerbero Rust support
 | ||
| 
 | ||
| -   As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This
 | ||
|     includes Android and iOS now in addition to macOS and Windows/MSVC.
 | ||
| 
 | ||
| Build and Dependencies
 | ||
| 
 | ||
| -   Meson >= 1.1 is now required for all modules
 | ||
| 
 | ||
| -   The GLib requirement has been bumped to >= 2.64
 | ||
| 
 | ||
| -   liborc >= 0.4.38 is strongly recommended
 | ||
| 
 | ||
| -   libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675).
 | ||
| 
 | ||
| -   gst-libav was updated for FFmpeg API deprecations and removals
 | ||
| 
 | ||
| -   libwebpmux is required for the animated WebP support
 | ||
| 
 | ||
| -   The wpe plugin gained support for the WPEWebKit 2.0 API version
 | ||
| 
 | ||
| -   Bumped minimum libva version to 1.12 for the va plugin.
 | ||
| 
 | ||
| -   zxing: added support for the zxing-c++ 2.0 API
 | ||
| 
 | ||
| -   The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum
 | ||
|     required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54
 | ||
|     is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is
 | ||
|     available (if set to ptp-helper=enabled). cargo is not required for building.
 | ||
| 
 | ||
| -   gst-plugins-rs requires Rust 1.70 or newer.
 | ||
| 
 | ||
| -   Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need
 | ||
|     to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build
 | ||
|     option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since
 | ||
|     it’s still required at runtime for the soup and adaptivedemux2 plugins to function.
 | ||
| 
 | ||
| -   libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it
 | ||
|     still is a runtime dependency, so distros should make sure it remains a package dependency.
 | ||
| 
 | ||
| Monorepo build (née gst-build)
 | ||
| 
 | ||
| -   There is now a top-level meson build option to enable/require webrtc
 | ||
| 
 | ||
| -   The FFmpeg subproject wrap was udpated to 6.1
 | ||
| 
 | ||
| -   A libvpx wrap was added (for VP8/VP9 software encoding/decoding)
 | ||
| 
 | ||
| gstreamer-full
 | ||
| 
 | ||
| -   Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to
 | ||
|     create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type:
 | ||
|     dynamic (default) or static.
 | ||
| 
 | ||
| -   Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from
 | ||
|     the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin.
 | ||
| 
 | ||
| Development environment
 | ||
| 
 | ||
| -   add VSCode IDE integration
 | ||
| 
 | ||
| -   gst-env.py: Output a setting for the prompt with --only-environment
 | ||
| 
 | ||
| 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
 | ||
| 
 | ||
| -   New plugins have been added
 | ||
|     -   codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2
 | ||
| -   JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at
 | ||
|     plugin load time
 | ||
| -   Several recipes were ported to meson, leading to faster builds and better MSVC support
 | ||
|     -   ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing
 | ||
|     -   For more information, please see the tracker issue
 | ||
| -   Some recipes are now outdated or unnecessary and have been removed:
 | ||
|     -   intltool, libkate
 | ||
| -   Various recipe updated to their latest versions
 | ||
| -   Rust toolchain updated to 1.76.0 (latest as of writing)
 | ||
| -   Rust plugins are now stripped and debug info split out correctly, reducing their size
 | ||
| -   Fix several spurious build issues, especially with the Rust toolchain
 | ||
| -   CMake is picked up from the system if available
 | ||
| -   Cerbero will no longer OOM or consume excessive resources on low-end systems
 | ||
| -   Python recipes have been moved from setuptools to virtualenv
 | ||
| -   Fixed support for Python 3.12+
 | ||
| 
 | ||
| macOS
 | ||
| 
 | ||
| -   Minimum macOS version has been increased to 10.13 (High Sierra)
 | ||
|     -   Released 5½ years ago, >95% marketshare
 | ||
| -   Fix macOS app store validation issue caused by absolute RPATHs
 | ||
| -   Rosetta is automatically installed if required for universal builds on Apple Silicon
 | ||
| -   The official macOS binaries now also include static libs for the GStreamer Rust plugins
 | ||
| 
 | ||
| iOS
 | ||
| 
 | ||
| -   Minimum iOS version has been increased to 12.0
 | ||
| -   The iOS binary packages now include the GStreamer Rust plugins
 | ||
| -   tremor and ivorbisdec plugins are no longer shipped on iOS
 | ||
| 
 | ||
| Windows
 | ||
| 
 | ||
| -   New features shipped with the official binaries:
 | ||
|     -   plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC)
 | ||
|     -   plugin features: d3d11-wgc (Windows Graphics Capture Support)
 | ||
|     -   libraries: gstdxva-1.0
 | ||
| -   New qml6 plugin can be built on Windows with the qt6 variant enabled
 | ||
|     -   Similar to qt5, this plugin cannot be included in the official binaries
 | ||
| -   GLib process handling helpers for Windows are now shipped
 | ||
| -   Windows 11 SDK is now required for builds
 | ||
|     -   Visual Studio 2019 and newer ship this SDK
 | ||
| -   MSYS is now deprecated for building Windows binaries, will be removed in the next release
 | ||
|     -   MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you
 | ||
| -   Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now
 | ||
| -   Fixed Pango crash on 32-bit Windows
 | ||
| -   WiX packaging now works with cross-windows builds from linux
 | ||
| 
 | ||
| Linux
 | ||
| 
 | ||
| -   Linux packages will now also include static libs for the GStreamer Rust plugins
 | ||
| -   Add Python support for multiarch distributions
 | ||
| -   Build fixes for various recipes on multiarch distributions
 | ||
| -   Use arch-specific libdir correctly on multiarch distributions
 | ||
| -   gst-omx was removed from gstreamer, and hence is no longer shipped
 | ||
| -   Fixed Gentoo support
 | ||
| -   Added support for RHEL 9
 | ||
| -   Added support for Rocky Linux
 | ||
| -   Added support for Manjaro Linux
 | ||
| 
 | ||
| Android
 | ||
| 
 | ||
| -   Android NDK has been updated to r25c
 | ||
|     -   Only the Clang toolchain is used from the NDK now (both target and host)
 | ||
|     -   gnustl has been completely removed
 | ||
| -   The Android binary packages now include the GStreamer Rust plugins
 | ||
| -   tremor and ivorbisdec plugins are no longer shipped on Android
 | ||
| -   openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors
 | ||
| 
 | ||
| Platform-specific changes and improvements
 | ||
| 
 | ||
| Android
 | ||
| 
 | ||
| -   Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce
 | ||
|     overhead.
 | ||
| 
 | ||
| -   Add support for AV1 to the androidmedia video encoder and decoder.
 | ||
| 
 | ||
| Apple macOS and iOS
 | ||
| 
 | ||
| -   osxaudio: audio clock improvements (interpolate based on system time)
 | ||
| 
 | ||
| -   Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to
 | ||
|     NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on
 | ||
|     them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front
 | ||
|     again. This change also allows osxvideosink to receive navigation events correctly.
 | ||
| 
 | ||
| Windows
 | ||
| 
 | ||
| -   New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and
 | ||
|     dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay.
 | ||
| 
 | ||
| -   PTP clock support is now also available on Windows
 | ||
| 
 | ||
| -   qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink.
 | ||
| 
 | ||
| -   wasapi2 audio plugin:
 | ||
| 
 | ||
|     -   Added an option to monitor a loopback device’s mute state
 | ||
|     -   Allows process loopback capture on Windows 10
 | ||
| 
 | ||
| -   win32ipc supports zero-copy rendering now through a shared bufferpool.
 | ||
| 
 | ||
| -   Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens
 | ||
|     in an external process on Windows as well.
 | ||
| 
 | ||
| -   gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path.
 | ||
| 
 | ||
| -   d3d11 plugin:
 | ||
| 
 | ||
|     -   d3d11mpeg2dec element is promoted to PRIMARY + 1 rank
 | ||
|     -   Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes.
 | ||
|     -   Added HLSL shader pre-compilation (at binary build time) support in MSVC build.
 | ||
|     -   d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic
 | ||
|         sampling method.
 | ||
|     -   Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in
 | ||
|         the d3d11videosink plugin documentation.
 | ||
|     -   Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly.
 | ||
| 
 | ||
| -   New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is
 | ||
|     feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are:
 | ||
|     -   The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec,
 | ||
|         nvcodec, qsv, and dwrite are not integrated with d3d12 yet.
 | ||
|     -   H.264 video encoding support via d3d12h264enc element.
 | ||
|         -   Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK
 | ||
|     -   IPC, overlay, and deinterlace elements are not implemented in d3d12
 | ||
|     -   Windows Graphics Capture API based screen capturing is not implemented in d3d12
 | ||
|     -   In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build.
 | ||
|     -   All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK
 | ||
|         environment or appropriate plugin feature APIs if they want these elements autoplugged.
 | ||
| 
 | ||
| Documentation improvements
 | ||
| 
 | ||
| -   hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability
 | ||
|     issues.
 | ||
| 
 | ||
| Possibly Breaking Changes
 | ||
| 
 | ||
| -   gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would
 | ||
|     return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro
 | ||
|     version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version
 | ||
|     checks which have been fixed some time ago.
 | ||
| 
 | ||
| -   GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what
 | ||
|     GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every
 | ||
|     output frame based on the output time because they may change even though the input frame is not changing.
 | ||
| 
 | ||
| -   rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is
 | ||
|     still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be
 | ||
|     output.
 | ||
| 
 | ||
| -   timecodestamper: The “drop-frame” property now defaults to TRUE
 | ||
| 
 | ||
| -   The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec,
 | ||
|     nvvp8dec and nvvp9dec, respectively.
 | ||
| 
 | ||
| Known Issues
 | ||
| 
 | ||
| -   There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least
 | ||
|     avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected.
 | ||
| 
 | ||
| Statistics
 | ||
| 
 | ||
| -   4643 commits
 | ||
| 
 | ||
| -   2405 Merge Requests
 | ||
| 
 | ||
| -   850 Issues
 | ||
| 
 | ||
| -   290+ Contributors
 | ||
| 
 | ||
| -   ~25% of all commits and Merge Requests were in Rust modules
 | ||
| 
 | ||
| -   4747 files changed
 | ||
| 
 | ||
| -   469633 lines added
 | ||
| 
 | ||
| -   209842 lines deleted
 | ||
| 
 | ||
| -   259791 lines added (net)
 | ||
| 
 | ||
| Contributors
 | ||
| 
 | ||
| Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro
 | ||
| Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen,
 | ||
| Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart
 | ||
| Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos
 | ||
| Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris
 | ||
| Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian
 | ||
| Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan
 | ||
| Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev
 | ||
| Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña
 | ||
| González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François
 | ||
| Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar,
 | ||
| hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song,
 | ||
| Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub
 | ||
| Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson
 | ||
| Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan
 | ||
| Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan
 | ||
| Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh
 | ||
| Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng,
 | ||
| Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman,
 | ||
| Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart
 | ||
| Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev,
 | ||
| medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel
 | ||
| Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan,
 | ||
| Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter
 | ||
| Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał
 | ||
| Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert
 | ||
| Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity,
 | ||
| Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov,
 | ||
| Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan
 | ||
| Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider,
 | ||
| Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia
 | ||
| Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan,
 | ||
| Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, …
 | ||
| 
 | ||
| … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
 | ||
| 
 | ||
| Stable 1.24 branch
 | ||
| 
 | ||
| After the 1.24.0 release there will be several 1.24.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.24.x
 | ||
| bug-fix releases will be made from the git 1.24 branch, which will be a stable branch.
 | ||
| 
 | ||
| 1.24.0
 | ||
| 
 | ||
| GStreamer 1.24.0 was released on 4 March 2024.
 | ||
| 
 | ||
| Schedule for 1.26
 | ||
| 
 | ||
| Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26
 | ||
| release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository.
 | ||
| 
 | ||
| The schedule for 1.26 is yet to be decided.
 | ||
| 
 | ||
| 1.26 will be backwards-compatible to the stable 1.24, 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, Thibault Saunier, and Víctor Manuel Jáquez Leal.
 | ||
| 
 | ||
| License: CC BY-SA 4.0
 |