From b125253cade5432e535ef2ea848ac00d2fb5286d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 4 Mar 2024 23:51:42 +0000 Subject: [PATCH] Release 1.24.0 --- girs/GES-1.0.gir | 4 +- girs/Gst-1.0.gir | 4 +- girs/GstPbutils-1.0.gir | 4 +- meson.build | 2 +- subprojects/gst-devtools/NEWS | 1257 ++++++++++++++++- subprojects/gst-devtools/RELEASE | 16 +- subprojects/gst-devtools/gst-devtools.doap | 10 + subprojects/gst-devtools/meson.build | 2 +- subprojects/gst-docs/meson.build | 2 +- .../gst-docs/symbols/symbol_index.json | 366 +++++ .../gst-docs/symbols/symbols_version.txt | 2 +- subprojects/gst-editing-services/NEWS | 1257 ++++++++++++++++- subprojects/gst-editing-services/RELEASE | 19 +- .../gst-editing-services.doap | 10 + subprojects/gst-editing-services/meson.build | 2 +- subprojects/gst-examples/meson.build | 2 +- .../gst-integration-testsuites/meson.build | 2 +- subprojects/gst-libav/NEWS | 1257 ++++++++++++++++- subprojects/gst-libav/RELEASE | 19 +- subprojects/gst-libav/gst-libav.doap | 10 + subprojects/gst-libav/meson.build | 2 +- subprojects/gst-plugins-bad/NEWS | 1257 ++++++++++++++++- subprojects/gst-plugins-bad/README.md | 2 +- subprojects/gst-plugins-bad/RELEASE | 19 +- .../gst-plugins-bad/gst-plugins-bad.doap | 10 + subprojects/gst-plugins-bad/meson.build | 2 +- subprojects/gst-plugins-base/NEWS | 1257 ++++++++++++++++- subprojects/gst-plugins-base/README.md | 2 +- subprojects/gst-plugins-base/RELEASE | 19 +- .../gst-plugins-base/gst-plugins-base.doap | 10 + subprojects/gst-plugins-base/meson.build | 2 +- subprojects/gst-plugins-good/NEWS | 1257 ++++++++++++++++- subprojects/gst-plugins-good/README.md | 2 +- subprojects/gst-plugins-good/RELEASE | 19 +- .../gst-plugins-good/gst-plugins-good.doap | 10 + subprojects/gst-plugins-good/meson.build | 2 +- subprojects/gst-plugins-rs.wrap | 2 +- subprojects/gst-plugins-ugly/NEWS | 1257 ++++++++++++++++- subprojects/gst-plugins-ugly/README.md | 2 +- subprojects/gst-plugins-ugly/RELEASE | 19 +- .../gst-plugins-ugly/gst-plugins-ugly.doap | 10 + subprojects/gst-plugins-ugly/meson.build | 2 +- subprojects/gst-python/NEWS | 1257 ++++++++++++++++- subprojects/gst-python/RELEASE | 19 +- subprojects/gst-python/gst-python.doap | 10 + subprojects/gst-python/meson.build | 2 +- subprojects/gst-rtsp-server/NEWS | 1257 ++++++++++++++++- subprojects/gst-rtsp-server/RELEASE | 19 +- .../gst-rtsp-server/gst-rtsp-server.doap | 10 + subprojects/gst-rtsp-server/meson.build | 2 +- subprojects/gstreamer-sharp/meson.build | 2 +- .../generated/Gst.PbUtils/Constants.cs | 4 +- .../sources/generated/Gst/Constants.cs | 4 +- .../sources/generated/gstreamer-sharp-api.xml | 16 +- subprojects/gstreamer-vaapi/NEWS | 1257 ++++++++++++++++- subprojects/gstreamer-vaapi/RELEASE | 19 +- .../gstreamer-vaapi/gstreamer-vaapi.doap | 10 + subprojects/gstreamer-vaapi/meson.build | 2 +- subprojects/gstreamer/NEWS | 1257 ++++++++++++++++- subprojects/gstreamer/README.md | 2 +- subprojects/gstreamer/RELEASE | 19 +- subprojects/gstreamer/gstreamer.doap | 10 + subprojects/gstreamer/meson.build | 2 +- 63 files changed, 13761 insertions(+), 830 deletions(-) diff --git a/girs/GES-1.0.gir b/girs/GES-1.0.gir index f1c5dcabc4..5fd2c43f12 100644 --- a/girs/GES-1.0.gir +++ b/girs/GES-1.0.gir @@ -15458,11 +15458,11 @@ contains one frame) - + - + diff --git a/girs/Gst-1.0.gir b/girs/Gst-1.0.gir index 510a075b17..6b8673ea4d 100644 --- a/girs/Gst-1.0.gir +++ b/girs/Gst-1.0.gir @@ -49386,12 +49386,12 @@ determine a order for the two provided values. - + The micro version of GStreamer at compile time: - + The minor version of GStreamer at compile time: diff --git a/girs/GstPbutils-1.0.gir b/girs/GstPbutils-1.0.gir index 04a6087cd1..87ed9de9d1 100644 --- a/girs/GstPbutils-1.0.gir +++ b/girs/GstPbutils-1.0.gir @@ -2899,12 +2899,12 @@ in debugging. - + The micro version of GStreamer's gst-plugins-base libraries at compile time. - + The minor version of GStreamer's gst-plugins-base libraries at compile time. diff --git a/meson.build b/meson.build index c5286db9d4..db32a57fba 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gstreamer-full', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, diff --git a/subprojects/gst-devtools/NEWS b/subprojects/gst-devtools/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-devtools/NEWS +++ b/subprojects/gst-devtools/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-devtools/RELEASE b/subprojects/gst-devtools/RELEASE index 9f03034804..a6695f0313 100644 --- a/subprojects/gst-devtools/RELEASE +++ b/subprojects/gst-devtools/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-devtools 1.23.90. +This is GStreamer gst-devtools 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ diff --git a/subprojects/gst-devtools/gst-devtools.doap b/subprojects/gst-devtools/gst-devtools.doap index 933fbf0cfa..5180e43ae4 100644 --- a/subprojects/gst-devtools/gst-devtools.doap +++ b/subprojects/gst-devtools/gst-devtools.doap @@ -53,6 +53,16 @@ + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-devtools/meson.build b/subprojects/gst-devtools/meson.build index d4e37a733a..d78f9d238b 100644 --- a/subprojects/gst-devtools/meson.build +++ b/subprojects/gst-devtools/meson.build @@ -1,5 +1,5 @@ project('gst-devtools', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'c_std=gnu99', diff --git a/subprojects/gst-docs/meson.build b/subprojects/gst-docs/meson.build index 6286b17bd5..32d6ab7b32 100644 --- a/subprojects/gst-docs/meson.build +++ b/subprojects/gst-docs/meson.build @@ -1,5 +1,5 @@ project('GStreamer manuals and tutorials', 'c', - version: '1.23.90', + version: '1.24.0', meson_version : '>= 1.1') hotdoc_p = find_program('hotdoc') diff --git a/subprojects/gst-docs/symbols/symbol_index.json b/subprojects/gst-docs/symbols/symbol_index.json index a172839ebb..caa1232bdf 100644 --- a/subprojects/gst-docs/symbols/symbol_index.json +++ b/subprojects/gst-docs/symbols/symbol_index.json @@ -871,6 +871,21 @@ "GST_ALLOCATOR_SHM", "GST_ALLOCATOR_SYSMEM", "GST_ALLOCATOR_VASURFACE", + "GST_ANALYTICS_MTD_CAST", + "GST_ANALYTICS_MTD_TYPE_ANY", + "GST_ANALYTICS_RELATION_META_API_TYPE", + "GST_ANALYTICS_RELATION_META_INFO", + "GST_ANALYTICS_REL_TYPE_ANY", + "GST_ANALYTICS_REL_TYPE_CONTAIN", + "GST_ANALYTICS_REL_TYPE_IS_PART_OF", + "GST_ANALYTICS_REL_TYPE_LAST", + "GST_ANALYTICS_REL_TYPE_NONE", + "GST_ANALYTICS_REL_TYPE_RELATE_TO", + "GST_ANCILLARY_META_API_TYPE", + "GST_ANCILLARY_META_FIELD_INTERLACED_FIRST", + "GST_ANCILLARY_META_FIELD_INTERLACED_SECOND", + "GST_ANCILLARY_META_FIELD_PROGRESSIVE", + "GST_ANCILLARY_META_INFO", "GST_APP_LEAKY_TYPE_DOWNSTREAM", "GST_APP_LEAKY_TYPE_NONE", "GST_APP_LEAKY_TYPE_UPSTREAM", @@ -2397,6 +2412,7 @@ "GST_INFO", "GST_INFO_ID", "GST_INFO_OBJECT", + "GST_INF_RELATION_SPAN", "GST_INSERT_BIN_API", "GST_INSTALL_PLUGINS_CRASHED", "GST_INSTALL_PLUGINS_ERROR", @@ -3530,6 +3546,7 @@ "GST_OBJECT_CAST", "GST_OBJECT_CLASS_CAST", "GST_OBJECT_FLAGS", + "GST_OBJECT_FLAG_CONSTRUCTED", "GST_OBJECT_FLAG_IS_SET", "GST_OBJECT_FLAG_LAST", "GST_OBJECT_FLAG_MAY_BE_LEAKED", @@ -4572,6 +4589,7 @@ "GST_TAG_CONDUCTOR", "GST_TAG_CONTACT", "GST_TAG_CONTAINER_FORMAT", + "GST_TAG_CONTAINER_SPECIFIC_TRACK_ID", "GST_TAG_COPYRIGHT", "GST_TAG_COPYRIGHT_URI", "GST_TAG_DATE", @@ -6785,6 +6803,48 @@ "GstAlsaSrc:device", "GstAlsaSrc:device-name", "GstAlsaSrc:use-driver-timestamps", + "GstAmfAv1Enc!sink", + "GstAmfAv1Enc!src", + "GstAmfAv1EncPreset", + "GstAmfAv1EncPreset::balanced", + "GstAmfAv1EncPreset::default", + "GstAmfAv1EncPreset::high-quality", + "GstAmfAv1EncPreset::quality", + "GstAmfAv1EncPreset::speed", + "GstAmfAv1EncRateControl", + "GstAmfAv1EncRateControl::cbr", + "GstAmfAv1EncRateControl::cqp", + "GstAmfAv1EncRateControl::default", + "GstAmfAv1EncRateControl::lcvbr", + "GstAmfAv1EncRateControl::vbr", + "GstAmfAv1EncUsage", + "GstAmfAv1EncUsage::low-latency", + "GstAmfAv1EncUsage::transcoding", + "GstAmfEncPAActivityType", + "GstAmfEncPAActivityType::y", + "GstAmfEncPAActivityType::yuv", + "GstAmfEncPACAQStrength", + "GstAmfEncPACAQStrength::high", + "GstAmfEncPACAQStrength::low", + "GstAmfEncPACAQStrength::medium", + "GstAmfEncPAHQMBMode", + "GstAmfEncPAHQMBMode::auto", + "GstAmfEncPAHQMBMode::none", + "GstAmfEncPAPAQMode", + "GstAmfEncPAPAQMode::caq", + "GstAmfEncPAPAQMode::none", + "GstAmfEncPASceneChangeDetectionSensitivity", + "GstAmfEncPASceneChangeDetectionSensitivity::high", + "GstAmfEncPASceneChangeDetectionSensitivity::low", + "GstAmfEncPASceneChangeDetectionSensitivity::medium", + "GstAmfEncPAStaticSceneDetectionSensitivity", + "GstAmfEncPAStaticSceneDetectionSensitivity::high", + "GstAmfEncPAStaticSceneDetectionSensitivity::low", + "GstAmfEncPAStaticSceneDetectionSensitivity::medium", + "GstAmfEncPATAQMode", + "GstAmfEncPATAQMode::mode1", + "GstAmfEncPATAQMode::mode2", + "GstAmfEncPATAQMode::none", "GstAmfEncoder", "GstAmfH264Enc!sink", "GstAmfH264Enc!src", @@ -6849,6 +6909,38 @@ "GstAmrwbDec", "GstAmrwbDec!sink", "GstAmrwbDec!src", + "GstAnalyticsClsMtd", + "GstAnalyticsClsMtd.id", + "GstAnalyticsClsMtd.meta", + "GstAnalyticsMtd", + "GstAnalyticsMtd.id", + "GstAnalyticsMtd.meta", + "GstAnalyticsMtdImpl", + "GstAnalyticsMtdImpl.name", + "GstAnalyticsMtdType", + "GstAnalyticsODMtd", + "GstAnalyticsODMtd.id", + "GstAnalyticsODMtd.meta", + "GstAnalyticsRelTypes", + "GstAnalyticsRelationMeta", + "GstAnalyticsRelationMetaInitParams", + "GstAnalyticsRelationMetaInitParams.initial_buf_size", + "GstAnalyticsRelationMetaInitParams.initial_relation_order", + "GstAnalyticsTrackingMtd", + "GstAnalyticsTrackingMtd.id", + "GstAnalyticsTrackingMtd.meta", + "GstAncillaryMeta", + "GstAncillaryMeta.DID", + "GstAncillaryMeta.SDID_block_number", + "GstAncillaryMeta.c_not_y_channel", + "GstAncillaryMeta.checksum", + "GstAncillaryMeta.data", + "GstAncillaryMeta.data_count", + "GstAncillaryMeta.field", + "GstAncillaryMeta.line", + "GstAncillaryMeta.meta", + "GstAncillaryMeta.offset", + "GstAncillaryMetaField", "GstApeDemux", "GstApeDemux!sink", "GstApeDemux!src", @@ -8257,6 +8349,7 @@ "GstCACASinkDithering::8x8", "GstCACASinkDithering::none", "GstCACASinkDithering::random", + "GstCACASinkDriver", "GstCACATv", "GstCACATv!sink", "GstCACATv!src", @@ -8719,6 +8812,14 @@ "GstCudaGraphicsResource.resource", "GstCudaGraphicsResource.type", "GstCudaGraphicsResourceType", + "GstCudaIpcIOMode", + "GstCudaIpcIOMode::copy", + "GstCudaIpcIOMode::import", + "GstCudaIpcMode", + "GstCudaIpcMode::legacy", + "GstCudaIpcMode::mmap", + "GstCudaIpcSink!sink", + "GstCudaIpcSrc!src", "GstCudaMemory", "GstCudaMemory.context", "GstCudaMemory.info", @@ -9156,6 +9257,8 @@ "GstD3D12Upload!sink", "GstD3D12Upload!src", "GstD3D12VideoSink!sink", + "GstD3D12Vp8Dec!sink", + "GstD3D12Vp8Dec!src", "GstD3D12Vp9Dec!sink", "GstD3D12Vp9Dec!src", "GstD3DVideoSink", @@ -13569,6 +13672,12 @@ "GstNvDevice0H264Enc", "GstNvDevice0H265Enc", "GstNvEncoder", + "GstNvEncoder:cc-insert", + "GstNvEncoderMultiPass", + "GstNvEncoderMultiPass::default", + "GstNvEncoderMultiPass::disabled", + "GstNvEncoderMultiPass::two-pass", + "GstNvEncoderMultiPass::two-pass-quarter", "GstNvEncoderPreset", "GstNvEncoderPreset::default", "GstNvEncoderPreset::hp", @@ -13578,6 +13687,13 @@ "GstNvEncoderPreset::low-latency", "GstNvEncoderPreset::low-latency-hp", "GstNvEncoderPreset::low-latency-hq", + "GstNvEncoderPreset::p1", + "GstNvEncoderPreset::p2", + "GstNvEncoderPreset::p3", + "GstNvEncoderPreset::p4", + "GstNvEncoderPreset::p5", + "GstNvEncoderPreset::p6", + "GstNvEncoderPreset::p7", "GstNvEncoderRCMode", "GstNvEncoderRCMode::cbr", "GstNvEncoderRCMode::cbr-hq", @@ -13585,6 +13701,16 @@ "GstNvEncoderRCMode::cqp", "GstNvEncoderRCMode::vbr", "GstNvEncoderRCMode::vbr-hq", + "GstNvEncoderSeiInsertMode", + "GstNvEncoderSeiInsertMode::disabled", + "GstNvEncoderSeiInsertMode::insert", + "GstNvEncoderSeiInsertMode::insert-and-drop", + "GstNvEncoderTune", + "GstNvEncoderTune::default", + "GstNvEncoderTune::high-quality", + "GstNvEncoderTune::lossless", + "GstNvEncoderTune::low-latency", + "GstNvEncoderTune::ultra-low-latency", "GstNvH264Dec!sink", "GstNvH264Dec!src", "GstNvH264Enc", @@ -13609,6 +13735,8 @@ "GstNvH265Enc:temporal-aq", "GstNvH265Enc:vbv-buffer-size", "GstNvH265Enc:weighted-pred", + "GstNvJpegEnc!sink", + "GstNvJpegEnc!src", "GstNvPreset", "GstNvPreset::default", "GstNvPreset::hp", @@ -14663,6 +14791,7 @@ "GstRTPBaseDepayload::clear-extensions", "GstRTPBaseDepayload::request-extension", "GstRTPBaseDepayload:auto-header-extension", + "GstRTPBaseDepayload:extensions", "GstRTPBaseDepayload:max-reorder", "GstRTPBaseDepayload:source-info", "GstRTPBaseDepayload:stats", @@ -22474,6 +22603,7 @@ "ajasink:channel", "ajasink:device-identifier", "ajasink:end-frame", + "ajasink:handle-ancillary-meta", "ajasink:output-cpu-core", "ajasink:output-destination", "ajasink:queue-size", @@ -22484,6 +22614,7 @@ "ajasink:timecode-index", "ajasinkcombiner", "ajasrc", + "ajasrc:attach-ancillary-meta", "ajasrc:audio-source", "ajasrc:audio-system", "ajasrc:capture-cpu-core", @@ -22528,20 +22659,73 @@ "alsasrc:device", "alsasrc:device-name", "alsasrc:use-driver-timestamps", + "amfav1enc", + "amfav1enc:adapter-luid", + "amfav1enc:bitrate", + "amfav1enc:gop-size", + "amfav1enc:max-bitrate", + "amfav1enc:max-qp-i", + "amfav1enc:max-qp-p", + "amfav1enc:min-qp-i", + "amfav1enc:min-qp-p", + "amfav1enc:pa-activity-type", + "amfav1enc:pa-caq-strength", + "amfav1enc:pa-frame-sad", + "amfav1enc:pa-hqmb-mode", + "amfav1enc:pa-initial-qp", + "amfav1enc:pa-lookahead-buffer-depth", + "amfav1enc:pa-ltr", + "amfav1enc:pa-max-qp", + "amfav1enc:pa-paq-mode", + "amfav1enc:pa-scene-change-detection", + "amfav1enc:pa-scene-change-detection-sensitivity", + "amfav1enc:pa-static-scene-detection", + "amfav1enc:pa-static-scene-detection-sensitivity", + "amfav1enc:pa-taq-mode", + "amfav1enc:pre-analysis", + "amfav1enc:pre-encode", + "amfav1enc:preset", + "amfav1enc:qp-i", + "amfav1enc:qp-p", + "amfav1enc:rate-control", + "amfav1enc:ref-frames", + "amfav1enc:smart-access-video", + "amfav1enc:usage", "amfh264enc", "amfh264enc:adapter-luid", + "amfh264enc:adaptive-mini-gop", "amfh264enc:aud", + "amfh264enc:b-frames", + "amfh264enc:b-reference", "amfh264enc:bitrate", "amfh264enc:cabac", "amfh264enc:gop-size", + "amfh264enc:max-b-frames", "amfh264enc:max-bitrate", "amfh264enc:max-qp", "amfh264enc:min-qp", + "amfh264enc:pa-activity-type", + "amfh264enc:pa-caq-strength", + "amfh264enc:pa-frame-sad", + "amfh264enc:pa-hqmb-mode", + "amfh264enc:pa-initial-qp", + "amfh264enc:pa-lookahead-buffer-depth", + "amfh264enc:pa-ltr", + "amfh264enc:pa-max-qp", + "amfh264enc:pa-paq-mode", + "amfh264enc:pa-scene-change-detection", + "amfh264enc:pa-scene-change-detection-sensitivity", + "amfh264enc:pa-static-scene-detection", + "amfh264enc:pa-static-scene-detection-sensitivity", + "amfh264enc:pa-taq-mode", + "amfh264enc:pre-analysis", + "amfh264enc:pre-encode", "amfh264enc:preset", "amfh264enc:qp-i", "amfh264enc:qp-p", "amfh264enc:rate-control", "amfh264enc:ref-frames", + "amfh264enc:smart-access-video", "amfh264enc:usage", "amfh265enc", "amfh265enc:adapter-luid", @@ -22553,11 +22737,28 @@ "amfh265enc:max-qp-p", "amfh265enc:min-qp-i", "amfh265enc:min-qp-p", + "amfh265enc:pa-activity-type", + "amfh265enc:pa-caq-strength", + "amfh265enc:pa-frame-sad", + "amfh265enc:pa-hqmb-mode", + "amfh265enc:pa-initial-qp", + "amfh265enc:pa-lookahead-buffer-depth", + "amfh265enc:pa-ltr", + "amfh265enc:pa-max-qp", + "amfh265enc:pa-paq-mode", + "amfh265enc:pa-scene-change-detection", + "amfh265enc:pa-scene-change-detection-sensitivity", + "amfh265enc:pa-static-scene-detection", + "amfh265enc:pa-static-scene-detection-sensitivity", + "amfh265enc:pa-taq-mode", + "amfh265enc:pre-analysis", + "amfh265enc:pre-encode", "amfh265enc:preset", "amfh265enc:qp-i", "amfh265enc:qp-p", "amfh265enc:rate-control", "amfh265enc:ref-frames", + "amfh265enc:smart-access-video", "amfh265enc:usage", "amrnbdec", "amrnbdec:variant", @@ -34353,6 +34554,7 @@ "cacasink", "cacasink:anti-aliasing", "cacasink:dither", + "cacasink:driver", "cacasink:screen-height", "cacasink:screen-width", "cacatv", @@ -34513,6 +34715,17 @@ "cudaconvertscale", "cudaconvertscale:add-borders", "cudadownload", + "cudaipcsink", + "cudaipcsink:address", + "cudaipcsink:cuda-device-id", + "cudaipcsink:ipc-mode", + "cudaipcsrc", + "cudaipcsrc:address", + "cudaipcsrc:buffer-size", + "cudaipcsrc:connection-timeout", + "cudaipcsrc:cuda-device-id", + "cudaipcsrc:io-mode", + "cudaipcsrc:processing-deadline", "cudascale", "cudascale:add-borders", "cudaupload", @@ -34594,6 +34807,7 @@ "curlsmtpsink:subject", "curlsmtpsink:use-ssl", "cutter", + "cutter:audio-level-meta", "cutter:leaky", "cutter:pre-length", "cutter:run-length", @@ -34864,6 +35078,10 @@ "d3d12videosink:sampling-method", "d3d12videosink:scale-x", "d3d12videosink:scale-y", + "d3d12vp8dec", + "d3d12vp8dec:adapter-luid", + "d3d12vp8dec:device-id", + "d3d12vp8dec:vendor-id", "d3d12vp9dec", "d3d12vp9dec:adapter-luid", "d3d12vp9dec:device-id", @@ -39035,6 +39253,43 @@ "gst_allocator_free", "gst_allocator_register", "gst_allocator_set_default", + "gst_analytics_cls_mtd_get_index_by_quark", + "gst_analytics_cls_mtd_get_length", + "gst_analytics_cls_mtd_get_level", + "gst_analytics_cls_mtd_get_mtd_type", + "gst_analytics_cls_mtd_get_quark", + "gst_analytics_mtd_get_id", + "gst_analytics_mtd_get_mtd_type", + "gst_analytics_mtd_get_size", + "gst_analytics_mtd_type_get_name", + "gst_analytics_od_mtd_get_confidence_lvl", + "gst_analytics_od_mtd_get_location", + "gst_analytics_od_mtd_get_mtd_type", + "gst_analytics_od_mtd_get_obj_type", + "gst_analytics_relation_get_length", + "gst_analytics_relation_meta_add_cls_mtd", + "gst_analytics_relation_meta_add_mtd", + "gst_analytics_relation_meta_add_od_mtd", + "gst_analytics_relation_meta_add_one_cls_mtd", + "gst_analytics_relation_meta_add_tracking_mtd", + "gst_analytics_relation_meta_api_get_type", + "gst_analytics_relation_meta_exist", + "gst_analytics_relation_meta_get_cls_mtd", + "gst_analytics_relation_meta_get_direct_related", + "gst_analytics_relation_meta_get_info", + "gst_analytics_relation_meta_get_mtd", + "gst_analytics_relation_meta_get_mtd_data", + "gst_analytics_relation_meta_get_od_mtd", + "gst_analytics_relation_meta_get_relation", + "gst_analytics_relation_meta_get_tracking_mtd", + "gst_analytics_relation_meta_iterate", + "gst_analytics_relation_meta_set_relation", + "gst_analytics_tracking_mtd_get_info", + "gst_analytics_tracking_mtd_get_mtd_type", + "gst_analytics_tracking_mtd_set_lost", + "gst_analytics_tracking_mtd_update_last_seen", + "gst_ancillary_meta_api_get_type", + "gst_ancillary_meta_get_info", "gst_app_sink_get_buffer_list_support", "gst_app_sink_get_caps", "gst_app_sink_get_drop", @@ -39483,6 +39738,9 @@ "gst_bit_writer_reset_and_get_buffer", "gst_bit_writer_reset_and_get_data", "gst_bit_writer_set_pos", + "gst_buffer_add_analytics_relation_meta", + "gst_buffer_add_analytics_relation_meta_full", + "gst_buffer_add_ancillary_meta", "gst_buffer_add_audio_clipping_meta", "gst_buffer_add_audio_downmix_meta", "gst_buffer_add_audio_level_meta", @@ -39528,6 +39786,8 @@ "gst_buffer_find_memory", "gst_buffer_foreach_meta", "gst_buffer_get_all_memory", + "gst_buffer_get_analytics_relation_meta", + "gst_buffer_get_ancillary_meta", "gst_buffer_get_audio_clipping_meta", "gst_buffer_get_audio_downmix_meta", "gst_buffer_get_audio_downmix_meta_for_channels", @@ -39571,6 +39831,7 @@ "gst_buffer_is_all_memory_writable", "gst_buffer_is_memory_range_writable", "gst_buffer_is_writable", + "gst_buffer_iterate_ancillary_meta", "gst_buffer_iterate_meta", "gst_buffer_iterate_meta_filtered", "gst_buffer_list_add", @@ -42167,6 +42428,9 @@ "gst_player_visualizations_get", "gst_plugin_add_dependency", "gst_plugin_add_dependency_simple", + "gst_plugin_add_status_error", + "gst_plugin_add_status_info", + "gst_plugin_add_status_warning", "gst_plugin_error_quark", "gst_plugin_feature_check_version", "gst_plugin_feature_get_name", @@ -42189,6 +42453,9 @@ "gst_plugin_get_package", "gst_plugin_get_release_date_string", "gst_plugin_get_source", + "gst_plugin_get_status_errors", + "gst_plugin_get_status_infos", + "gst_plugin_get_status_warnings", "gst_plugin_get_version", "gst_plugin_is_loaded", "gst_plugin_list_free", @@ -43465,6 +43732,7 @@ "gst_structure_remove_fields", "gst_structure_remove_fields_valist", "gst_structure_serialize", + "gst_structure_serialize_full", "gst_structure_set", "gst_structure_set_array", "gst_structure_set_list", @@ -65737,6 +66005,7 @@ "nvautogpuh264enc:min-qp-b", "nvautogpuh264enc:min-qp-i", "nvautogpuh264enc:min-qp-p", + "nvautogpuh264enc:multi-pass", "nvautogpuh264enc:nonref-p", "nvautogpuh264enc:preset", "nvautogpuh264enc:qp-b", @@ -65748,6 +66017,7 @@ "nvautogpuh264enc:spatial-aq", "nvautogpuh264enc:strict-gop", "nvautogpuh264enc:temporal-aq", + "nvautogpuh264enc:tune", "nvautogpuh264enc:vbv-buffer-size", "nvautogpuh264enc:weighted-pred", "nvautogpuh264enc:zero-reorder-delay", @@ -65769,6 +66039,7 @@ "nvautogpuh265enc:min-qp-b", "nvautogpuh265enc:min-qp-i", "nvautogpuh265enc:min-qp-p", + "nvautogpuh265enc:multi-pass", "nvautogpuh265enc:nonref-p", "nvautogpuh265enc:preset", "nvautogpuh265enc:qp-b", @@ -65780,11 +66051,16 @@ "nvautogpuh265enc:spatial-aq", "nvautogpuh265enc:strict-gop", "nvautogpuh265enc:temporal-aq", + "nvautogpuh265enc:tune", "nvautogpuh265enc:vbv-buffer-size", "nvautogpuh265enc:weighted-pred", "nvautogpuh265enc:zero-reorder-delay", "nvav1dec", "nvav1dec:cuda-device-id", + "nvav1dec:init-max-height", + "nvav1dec:init-max-width", + "nvav1dec:max-display-delay", + "nvav1dec:num-output-surfaces", "nvcudah264enc", "nvcudah264enc:aq-strength", "nvcudah264enc:aud", @@ -65803,6 +66079,7 @@ "nvcudah264enc:min-qp-b", "nvcudah264enc:min-qp-i", "nvcudah264enc:min-qp-p", + "nvcudah264enc:multi-pass", "nvcudah264enc:nonref-p", "nvcudah264enc:preset", "nvcudah264enc:qp-b", @@ -65814,6 +66091,7 @@ "nvcudah264enc:spatial-aq", "nvcudah264enc:strict-gop", "nvcudah264enc:temporal-aq", + "nvcudah264enc:tune", "nvcudah264enc:vbv-buffer-size", "nvcudah264enc:weighted-pred", "nvcudah264enc:zero-reorder-delay", @@ -65834,6 +66112,7 @@ "nvcudah265enc:min-qp-b", "nvcudah265enc:min-qp-i", "nvcudah265enc:min-qp-p", + "nvcudah265enc:multi-pass", "nvcudah265enc:nonref-p", "nvcudah265enc:preset", "nvcudah265enc:qp-b", @@ -65845,6 +66124,7 @@ "nvcudah265enc:spatial-aq", "nvcudah265enc:strict-gop", "nvcudah265enc:temporal-aq", + "nvcudah265enc:tune", "nvcudah265enc:vbv-buffer-size", "nvcudah265enc:weighted-pred", "nvcudah265enc:zero-reorder-delay", @@ -65866,6 +66146,7 @@ "nvd3d11h264enc:min-qp-b", "nvd3d11h264enc:min-qp-i", "nvd3d11h264enc:min-qp-p", + "nvd3d11h264enc:multi-pass", "nvd3d11h264enc:nonref-p", "nvd3d11h264enc:preset", "nvd3d11h264enc:qp-b", @@ -65877,6 +66158,7 @@ "nvd3d11h264enc:spatial-aq", "nvd3d11h264enc:strict-gop", "nvd3d11h264enc:temporal-aq", + "nvd3d11h264enc:tune", "nvd3d11h264enc:vbv-buffer-size", "nvd3d11h264enc:weighted-pred", "nvd3d11h264enc:zero-reorder-delay", @@ -65897,6 +66179,7 @@ "nvd3d11h265enc:min-qp-b", "nvd3d11h265enc:min-qp-i", "nvd3d11h265enc:min-qp-p", + "nvd3d11h265enc:multi-pass", "nvd3d11h265enc:nonref-p", "nvd3d11h265enc:preset", "nvd3d11h265enc:qp-b", @@ -65908,12 +66191,18 @@ "nvd3d11h265enc:spatial-aq", "nvd3d11h265enc:strict-gop", "nvd3d11h265enc:temporal-aq", + "nvd3d11h265enc:tune", "nvd3d11h265enc:vbv-buffer-size", "nvd3d11h265enc:weighted-pred", "nvd3d11h265enc:zero-reorder-delay", "nvh264dec", "nvh264dec!sink", "nvh264dec!src", + "nvh264dec:cuda-device-id", + "nvh264dec:init-max-height", + "nvh264dec:init-max-width", + "nvh264dec:max-display-delay", + "nvh264dec:num-output-surfaces", "nvh264enc", "nvh264enc:aud", "nvh264enc:b-adapt", @@ -65927,6 +66216,11 @@ "nvh265dec", "nvh265dec!sink", "nvh265dec!src", + "nvh265dec:cuda-device-id", + "nvh265dec:init-max-height", + "nvh265dec:init-max-width", + "nvh265dec:max-display-delay", + "nvh265dec:num-output-surfaces", "nvh265enc", "nvh265enc:aud", "nvh265enc:b-adapt", @@ -65940,6 +66234,9 @@ "nvjpegdec", "nvjpegdec!sink", "nvjpegdec!src", + "nvjpegenc", + "nvjpegenc:cuda-device-id", + "nvjpegenc:quality", "nvmpeg2videodec", "nvmpeg2videodec!sink", "nvmpeg2videodec!src", @@ -65952,11 +66249,21 @@ "nvvp8dec", "nvvp8dec!sink", "nvvp8dec!src", + "nvvp8dec:cuda-device-id", + "nvvp8dec:init-max-height", + "nvvp8dec:init-max-width", + "nvvp8dec:max-display-delay", + "nvvp8dec:num-output-surfaces", "nvvp8sldec", "nvvp8sldec:cuda-device-id", "nvvp9dec", "nvvp9dec!sink", "nvvp9dec!src", + "nvvp9dec:cuda-device-id", + "nvvp9dec:init-max-height", + "nvvp9dec:init-max-width", + "nvvp9dec:max-display-delay", + "nvvp9dec:num-output-surfaces", "nvvp9sldec", "nvvp9sldec:cuda-device-id", "objectdetectionoverlay", @@ -67967,6 +68274,64 @@ "struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows_log2", "struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_size_bytes", "struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).upscaled_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3)", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_bit_depth", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_film_grain_params", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_height", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_id", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_type", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_global_motion_params", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_lf_params", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_mi_cols", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_mi_rows", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_order_hint", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_render_height", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_render_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_segmentation_params", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_subsampling_x", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_subsampling_y", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_tile_info", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_upscaled_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_valid", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3)", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_frame_idx", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_tile_col", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_tile_row", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).coded_tile_data", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).tile_data_size_minus_1", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3)", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_col_end", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_col_start", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_row_end", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_row_start", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_col", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_offset", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_row", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_size", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3)", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).begin_first_frame", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).current_frame_id", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).frame_height", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).frame_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_col_starts", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_cols", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_row_starts", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_rows", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).operating_point", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).operating_point_idc", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).prev_frame_id", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).ref_info", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).render_height", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).render_width", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).seen_frame_header", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).sequence_changed", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_cols", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_cols_log2", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows_log2", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_size_bytes", + "struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).upscaled_width", "subparse", "subparse:subtitle-encoding", "subparse:video-fps", @@ -68655,6 +69020,7 @@ "volume", "volume:mute", "volume:volume", + "volume:volume-full-range", "vorbisdec", "vorbisenc", "vorbisenc:bitrate", diff --git a/subprojects/gst-docs/symbols/symbols_version.txt b/subprojects/gst-docs/symbols/symbols_version.txt index 193d140301..614245ec45 100644 --- a/subprojects/gst-docs/symbols/symbols_version.txt +++ b/subprojects/gst-docs/symbols/symbols_version.txt @@ -1 +1 @@ -1.23 \ No newline at end of file +1.24 \ No newline at end of file diff --git a/subprojects/gst-editing-services/NEWS b/subprojects/gst-editing-services/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-editing-services/NEWS +++ b/subprojects/gst-editing-services/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-editing-services/RELEASE b/subprojects/gst-editing-services/RELEASE index a89d5c63c8..b842983a6b 100644 --- a/subprojects/gst-editing-services/RELEASE +++ b/subprojects/gst-editing-services/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-editing-services 1.23.90. +This is GStreamer gst-editing-services 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-editing-services/gst-editing-services.doap b/subprojects/gst-editing-services/gst-editing-services.doap index 404bab9961..1d2fe2f7cb 100644 --- a/subprojects/gst-editing-services/gst-editing-services.doap +++ b/subprojects/gst-editing-services/gst-editing-services.doap @@ -30,6 +30,16 @@ GStreamer library for creating audio and video editors + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-editing-services/meson.build b/subprojects/gst-editing-services/meson.build index d57497a73b..ba6bf3eb2d 100644 --- a/subprojects/gst-editing-services/meson.build +++ b/subprojects/gst-editing-services/meson.build @@ -1,5 +1,5 @@ project('gst-editing-services', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-examples/meson.build b/subprojects/gst-examples/meson.build index 8934961ad0..680364ff90 100644 --- a/subprojects/gst-examples/meson.build +++ b/subprojects/gst-examples/meson.build @@ -1,4 +1,4 @@ -project('gst-examples', 'c', version : '1.23.90', license : 'LGPL') +project('gst-examples', 'c', version : '1.24.0', license : 'LGPL') static_build = get_option('default_library') == 'static' cc = meson.get_compiler('c') diff --git a/subprojects/gst-integration-testsuites/meson.build b/subprojects/gst-integration-testsuites/meson.build index 52c77d9924..f051c4dc98 100644 --- a/subprojects/gst-integration-testsuites/meson.build +++ b/subprojects/gst-integration-testsuites/meson.build @@ -1 +1 @@ -project('gst-integration-testsuites', [], version: '1.23.90', meson_version : '>= 1.1', license: 'LGPL') +project('gst-integration-testsuites', [], version: '1.24.0', meson_version : '>= 1.1', license: 'LGPL') diff --git a/subprojects/gst-libav/NEWS b/subprojects/gst-libav/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-libav/NEWS +++ b/subprojects/gst-libav/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-libav/RELEASE b/subprojects/gst-libav/RELEASE index 55f163a0b1..89f9e2295e 100644 --- a/subprojects/gst-libav/RELEASE +++ b/subprojects/gst-libav/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-libav 1.23.90. +This is GStreamer gst-libav 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-libav/gst-libav.doap b/subprojects/gst-libav/gst-libav.doap index adeda96b14..e269d4b1c5 100644 --- a/subprojects/gst-libav/gst-libav.doap +++ b/subprojects/gst-libav/gst-libav.doap @@ -32,6 +32,16 @@ colorspace conversion elements. + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-libav/meson.build b/subprojects/gst-libav/meson.build index 66c754cde2..e391786e2c 100644 --- a/subprojects/gst-libav/meson.build +++ b/subprojects/gst-libav/meson.build @@ -1,5 +1,5 @@ project('gst-libav', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-bad/NEWS b/subprojects/gst-plugins-bad/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-plugins-bad/NEWS +++ b/subprojects/gst-plugins-bad/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-plugins-bad/README.md b/subprojects/gst-plugins-bad/README.md index 39a03d5aed..eb6c080630 100644 --- a/subprojects/gst-plugins-bad/README.md +++ b/subprojects/gst-plugins-bad/README.md @@ -1,4 +1,4 @@ -GStreamer 1.23.x development series +GStreamer 1.24.x stable series WHAT IT IS ---------- diff --git a/subprojects/gst-plugins-bad/RELEASE b/subprojects/gst-plugins-bad/RELEASE index 0920f070e7..42d5d7827e 100644 --- a/subprojects/gst-plugins-bad/RELEASE +++ b/subprojects/gst-plugins-bad/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-plugins-bad 1.23.90. +This is GStreamer gst-plugins-bad 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-plugins-bad/gst-plugins-bad.doap b/subprojects/gst-plugins-bad/gst-plugins-bad.doap index 5474ff4e14..afcb44dace 100644 --- a/subprojects/gst-plugins-bad/gst-plugins-bad.doap +++ b/subprojects/gst-plugins-bad/gst-plugins-bad.doap @@ -33,6 +33,16 @@ real live maintainer, or some actual wide use. + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-plugins-bad/meson.build b/subprojects/gst-plugins-bad/meson.build index 72cc4660a1..a0eb1dbc4d 100644 --- a/subprojects/gst-plugins-bad/meson.build +++ b/subprojects/gst-plugins-bad/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-base/NEWS b/subprojects/gst-plugins-base/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-plugins-base/NEWS +++ b/subprojects/gst-plugins-base/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-plugins-base/README.md b/subprojects/gst-plugins-base/README.md index 39a03d5aed..eb6c080630 100644 --- a/subprojects/gst-plugins-base/README.md +++ b/subprojects/gst-plugins-base/README.md @@ -1,4 +1,4 @@ -GStreamer 1.23.x development series +GStreamer 1.24.x stable series WHAT IT IS ---------- diff --git a/subprojects/gst-plugins-base/RELEASE b/subprojects/gst-plugins-base/RELEASE index 29634420dd..54a5796e5e 100644 --- a/subprojects/gst-plugins-base/RELEASE +++ b/subprojects/gst-plugins-base/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-plugins-base 1.23.90. +This is GStreamer gst-plugins-base 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-plugins-base/gst-plugins-base.doap b/subprojects/gst-plugins-base/gst-plugins-base.doap index 38ea20ab1f..a15816a962 100644 --- a/subprojects/gst-plugins-base/gst-plugins-base.doap +++ b/subprojects/gst-plugins-base/gst-plugins-base.doap @@ -34,6 +34,16 @@ A wide range of video and audio decoders, encoders, and filters are included. + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-plugins-base/meson.build b/subprojects/gst-plugins-base/meson.build index 28f90b2002..16a72e7583 100644 --- a/subprojects/gst-plugins-base/meson.build +++ b/subprojects/gst-plugins-base/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-base', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-good/NEWS b/subprojects/gst-plugins-good/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-plugins-good/NEWS +++ b/subprojects/gst-plugins-good/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-plugins-good/README.md b/subprojects/gst-plugins-good/README.md index 39a03d5aed..eb6c080630 100644 --- a/subprojects/gst-plugins-good/README.md +++ b/subprojects/gst-plugins-good/README.md @@ -1,4 +1,4 @@ -GStreamer 1.23.x development series +GStreamer 1.24.x stable series WHAT IT IS ---------- diff --git a/subprojects/gst-plugins-good/RELEASE b/subprojects/gst-plugins-good/RELEASE index 3af965c139..7842f1ef3e 100644 --- a/subprojects/gst-plugins-good/RELEASE +++ b/subprojects/gst-plugins-good/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-plugins-good 1.23.90. +This is GStreamer gst-plugins-good 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-plugins-good/gst-plugins-good.doap b/subprojects/gst-plugins-good/gst-plugins-good.doap index 5f44a8572a..feafc02a23 100644 --- a/subprojects/gst-plugins-good/gst-plugins-good.doap +++ b/subprojects/gst-plugins-good/gst-plugins-good.doap @@ -32,6 +32,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library). + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-plugins-good/meson.build b/subprojects/gst-plugins-good/meson.build index 2af2e2eceb..8ae36510a9 100644 --- a/subprojects/gst-plugins-good/meson.build +++ b/subprojects/gst-plugins-good/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-good', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-rs.wrap b/subprojects/gst-plugins-rs.wrap index 0d926be928..acae669fc6 100644 --- a/subprojects/gst-plugins-rs.wrap +++ b/subprojects/gst-plugins-rs.wrap @@ -2,4 +2,4 @@ directory=gst-plugins-rs url=https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git push-url=git@gitlab.freedesktop.org:gstreamer/gst-plugins-rs.git -revision=gstreamer-1.23.90 +revision=gstreamer-1.24.0 diff --git a/subprojects/gst-plugins-ugly/NEWS b/subprojects/gst-plugins-ugly/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-plugins-ugly/NEWS +++ b/subprojects/gst-plugins-ugly/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-plugins-ugly/README.md b/subprojects/gst-plugins-ugly/README.md index 39a03d5aed..eb6c080630 100644 --- a/subprojects/gst-plugins-ugly/README.md +++ b/subprojects/gst-plugins-ugly/README.md @@ -1,4 +1,4 @@ -GStreamer 1.23.x development series +GStreamer 1.24.x stable series WHAT IT IS ---------- diff --git a/subprojects/gst-plugins-ugly/RELEASE b/subprojects/gst-plugins-ugly/RELEASE index 1d71f9636d..a0fc31e347 100644 --- a/subprojects/gst-plugins-ugly/RELEASE +++ b/subprojects/gst-plugins-ugly/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-plugins-ugly 1.23.90. +This is GStreamer gst-plugins-ugly 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap index 375452ff0a..84a24d8108 100644 --- a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap +++ b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap @@ -33,6 +33,16 @@ might be widely known to present patent problems. + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-plugins-ugly/meson.build b/subprojects/gst-plugins-ugly/meson.build index db771e2354..83a979c383 100644 --- a/subprojects/gst-plugins-ugly/meson.build +++ b/subprojects/gst-plugins-ugly/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-ugly', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-python/NEWS b/subprojects/gst-python/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-python/NEWS +++ b/subprojects/gst-python/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-python/RELEASE b/subprojects/gst-python/RELEASE index 84b3b1f902..3213cd6252 100644 --- a/subprojects/gst-python/RELEASE +++ b/subprojects/gst-python/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-python 1.23.90. +This is GStreamer gst-python 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-python/gst-python.doap b/subprojects/gst-python/gst-python.doap index e45a0c804d..902aa5ff56 100644 --- a/subprojects/gst-python/gst-python.doap +++ b/subprojects/gst-python/gst-python.doap @@ -30,6 +30,16 @@ GStreamer Python Bindings is a set of overrides and Gst fundamental types handli + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-python/meson.build b/subprojects/gst-python/meson.build index 5cccbcc3b6..f240b6fd8a 100644 --- a/subprojects/gst-python/meson.build +++ b/subprojects/gst-python/meson.build @@ -1,5 +1,5 @@ project('gst-python', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'c_std=gnu99', diff --git a/subprojects/gst-rtsp-server/NEWS b/subprojects/gst-rtsp-server/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gst-rtsp-server/NEWS +++ b/subprojects/gst-rtsp-server/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gst-rtsp-server/RELEASE b/subprojects/gst-rtsp-server/RELEASE index 8fd89b74ed..9ec7af4ced 100644 --- a/subprojects/gst-rtsp-server/RELEASE +++ b/subprojects/gst-rtsp-server/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gst-rtsp-server 1.23.90. +This is GStreamer gst-rtsp-server 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gst-rtsp-server/gst-rtsp-server.doap b/subprojects/gst-rtsp-server/gst-rtsp-server.doap index ad64dc8ba9..dfd598076e 100644 --- a/subprojects/gst-rtsp-server/gst-rtsp-server.doap +++ b/subprojects/gst-rtsp-server/gst-rtsp-server.doap @@ -30,6 +30,16 @@ RTSP server library based on GStreamer + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gst-rtsp-server/meson.build b/subprojects/gst-rtsp-server/meson.build index ceaef5fe5b..9959fd6d5b 100644 --- a/subprojects/gst-rtsp-server/meson.build +++ b/subprojects/gst-rtsp-server/meson.build @@ -1,5 +1,5 @@ project('gst-rtsp-server', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : ['warning_level=1', 'buildtype=debugoptimized']) diff --git a/subprojects/gstreamer-sharp/meson.build b/subprojects/gstreamer-sharp/meson.build index 878ebf9a1f..4ed50854ef 100644 --- a/subprojects/gstreamer-sharp/meson.build +++ b/subprojects/gstreamer-sharp/meson.build @@ -1,4 +1,4 @@ -project('gstreamer-sharp', ['cs', 'c'], version: '1.23.90', +project('gstreamer-sharp', ['cs', 'c'], version: '1.24.0', meson_version : '>= 1.1', license: 'LGPL') fs = import ('fs') diff --git a/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs b/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs index 98441b22e7..9ef70afa4f 100644 --- a/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs +++ b/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs @@ -17,8 +17,8 @@ namespace Gst.PbUtils { public const string ENCODING_CATEGORY_ONLINE_SERVICE = @"online-service"; public const string ENCODING_CATEGORY_STORAGE_EDITING = @"storage-editing"; public const int PLUGINS_BASE_VERSION_MAJOR = 1; - public const int PLUGINS_BASE_VERSION_MICRO = 90; - public const int PLUGINS_BASE_VERSION_MINOR = 23; + public const int PLUGINS_BASE_VERSION_MICRO = 0; + public const int PLUGINS_BASE_VERSION_MINOR = 24; public const int PLUGINS_BASE_VERSION_NANO = 0; #endregion } diff --git a/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs b/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs index d09fdd3048..23ef2cee92 100644 --- a/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs +++ b/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs @@ -171,8 +171,8 @@ namespace Gst { public const int VALUE_LESS_THAN = -1; public const int VALUE_UNORDERED = 2; public const int VERSION_MAJOR = 1; - public const int VERSION_MICRO = 90; - public const int VERSION_MINOR = 23; + public const int VERSION_MICRO = 0; + public const int VERSION_MINOR = 24; public const int VERSION_NANO = 0; #endregion } diff --git a/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml b/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml index 07370f5373..38719ba1c1 100644 --- a/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml +++ b/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml @@ -12342,10 +12342,10 @@ - - - - + + + + @@ -22376,10 +22376,10 @@ - - - - + + + + diff --git a/subprojects/gstreamer-vaapi/NEWS b/subprojects/gstreamer-vaapi/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gstreamer-vaapi/NEWS +++ b/subprojects/gstreamer-vaapi/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gstreamer-vaapi/RELEASE b/subprojects/gstreamer-vaapi/RELEASE index deb3a19926..c81ca23d05 100644 --- a/subprojects/gstreamer-vaapi/RELEASE +++ b/subprojects/gstreamer-vaapi/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer gstreamer-vaapi 1.23.90. +This is GStreamer gstreamer-vaapi 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap index beef5ae276..e998687eb5 100644 --- a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap +++ b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap @@ -25,6 +25,16 @@ + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gstreamer-vaapi/meson.build b/subprojects/gstreamer-vaapi/meson.build index d4f4667b3c..9990d8eca0 100644 --- a/subprojects/gstreamer-vaapi/meson.build +++ b/subprojects/gstreamer-vaapi/meson.build @@ -1,5 +1,5 @@ project('gstreamer-vaapi', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gstreamer/NEWS b/subprojects/gstreamer/NEWS index 98173eb704..0a7f0b6afe 100644 --- a/subprojects/gstreamer/NEWS +++ b/subprojects/gstreamer/NEWS @@ -1,15 +1,10 @@ GStreamer 1.24 Release Notes -GStreamer 1.24 has not been released yet. It is scheduled for release ASAP. - -GStreamer 1.23.90 is the first release candidate (rc1) for 1.24. - -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. +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: Friday 23 February 2024, 13:00 UTC (log) +Last updated: Monday 4 March 2024, 23:00 UTC (log) Introduction @@ -20,73 +15,804 @@ As always, this release is again packed with many new features, bug fixes and ot Highlights -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. -Plugin removals +Plugin and element removals -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. -- liborc 0.4.35 (latest: 0.4.37) 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. -- as always there have been plenty of performance, latency and memory optimisations all over the place. +- 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. -Miscellaneous other changes and enhancements - -- This section will be completed in due course +- 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 -- This section will be completed in due course +- None in this release. Debug logging system improvements -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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. -GStreamer FFMPEG wrapper +- 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. -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 @@ -94,47 +820,289 @@ GStreamer OMX 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 -- This section will be completed in due course +- 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 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.24 API. +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 +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 the outside they look just like a plugin written in C or C++. +Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -New Rust plugins and elements +WebRTC -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- Meson >= 1.1 is now required for all modules -Monorepo build (neé gst-build) +- The GLib requirement has been bumped to >= 2.64 -- This section will be completed in due course +- 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 @@ -143,61 +1111,225 @@ available, such as Windows, Android, iOS, and macOS. General improvements -- This section will be completed in due course +- 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 / iOS +macOS -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and + dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. -Linux +- PTP clock support is now also available on Windows -- This section will be completed in due course +- 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 -- This section will be completed in due course +- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability + issues. Possibly Breaking Changes -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +- 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 -- This section will be completed in due course +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 @@ -207,20 +1339,21 @@ bug-fix releases will be made from the git 1.24 branch, which will be a stable b 1.24.0 -1.24.0 has not yet been released. +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 confirmed. We’re still busy getting 1.24 out! +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. +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 diff --git a/subprojects/gstreamer/README.md b/subprojects/gstreamer/README.md index 39a03d5aed..eb6c080630 100644 --- a/subprojects/gstreamer/README.md +++ b/subprojects/gstreamer/README.md @@ -1,4 +1,4 @@ -GStreamer 1.23.x development series +GStreamer 1.24.x stable series WHAT IT IS ---------- diff --git a/subprojects/gstreamer/RELEASE b/subprojects/gstreamer/RELEASE index 623a215a19..f5708747f1 100644 --- a/subprojects/gstreamer/RELEASE +++ b/subprojects/gstreamer/RELEASE @@ -1,13 +1,15 @@ -This is GStreamer core 1.23.90. +This is GStreamer core 1.24.0. -GStreamer 1.23 is the unstable development branch leading up to the next major -stable version which will be 1.24. +The GStreamer team is thrilled to announce a new major feature release +of your favourite cross-platform multimedia framework! + +As always, this release is again packed with new features, bug fixes and +other improvements. -The 1.23 development series adds new features on top of the 1.22 series and is -part of the API and ABI-stable 1.x release series of the GStreamer multimedia -framework. +The 1.24 release series adds new features on top of the 1.22 series and is +part of the API and ABI-stable 1.x release series. -Full release notes will one day be found at: +Full release notes can be found at: https://gstreamer.freedesktop.org/releases/1.24/ @@ -85,9 +87,6 @@ or pop into one of our Matrix chat rooms, see for more details. -There is also a legacy IRC channel, #gstreamer on the OFTC IRC network, -which is also bridged into the Matrix network. - Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. Use the Discourse forum instead. diff --git a/subprojects/gstreamer/gstreamer.doap b/subprojects/gstreamer/gstreamer.doap index 36161c1aa9..5bae6e3423 100644 --- a/subprojects/gstreamer/gstreamer.doap +++ b/subprojects/gstreamer/gstreamer.doap @@ -38,6 +38,16 @@ hierarchy, and a set of media-agnostic core elements. + + + 1.24.0 + main + + 2024-03-04 + + + + 1.23.90 diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build index e23864636d..540d6d290e 100644 --- a/subprojects/gstreamer/meson.build +++ b/subprojects/gstreamer/meson.build @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.23.90', + version : '1.24.0', meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ])