1 GStreamer 1.18 Release Notes
3 GStreamer 1.18.0 was originally released on 7 September 2020.
5 See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
6 version of this document.
8 Last updated: Monday 7 September 2020, 10:30 UTC (log)
12 The GStreamer team is proud to announce a new major feature release in
13 the stable 1.x API series of your favourite cross-platform multimedia
16 As always, this release is again packed with many new features, bug
17 fixes and other improvements.
21 - GstTranscoder: new high level API for applications to transcode
22 media files from one format to another
24 - High Dynamic Range (HDR) video information representation and
25 signalling enhancements
27 - Instant playback rate change support
29 - Active Format Description (AFD) and Bar Data support
31 - ONVIF trick modes support in both GStreamer RTSP server and client
33 - Hardware-accelerated video decoding on Windows via DXVA2 /
36 - Microsoft Media Foundation plugin for video capture and
37 hardware-accelerated video encoding on Windows
39 - qmlgloverlay: New overlay element that renders a QtQuick scene over
40 the top of an input video stream
42 - New imagesequencesrc element to easily create a video stream from a
43 sequence of jpeg or png images
45 - dashsink: Add new sink to produce DASH content
47 - dvbsubenc: DVB Subtitle encoder element
49 - TV broadcast compliant MPEG-TS muxing with constant bitrate muxing
52 - rtmp2: new RTMP client source and sink element implementation
54 - svthevcenc: new SVT-HEVC-based H.265 video encoder
56 - vaapioverlay compositor element using VA-API
58 - rtpmanager support for Google’s Transport-Wide Congestion Control
61 - splitmuxsink and splitmuxsrc gained support for auxiliary video
64 - webrtcbin now contains some initial support for renegotiation
65 involving stream addition and removal
67 - New RTP source and sink elements to easily set up RTP streaming via
70 - New Audio Video Transport Protocol (AVTP) plugin for Time-Sensitive
73 - Support for the Video Services Forum’s Reliable Internet Stream
74 Transport (RIST) TR-06-1 Simple Profile
76 - Universal Windows Platform (UWP) support
78 - rpicamsrc element for capturing from the Raspberry Pi camera
80 - RTSP Server TCP interleaved backpressure handling improvements as
81 well as support for Scale/Speed headers
83 - GStreamer Editing Services gained support for nested timelines,
84 per-clip speed rate control and the OpenTimelineIO format.
86 - Autotools build system has been removed in favour of Meson
88 Major new features and changes
90 Noteworthy new features and API
92 Instant playback rate changes
94 Changing the playback rate as quickly as possible so far always required
95 a flushing seek. This generally works, but has the disadvantage of
96 flushing all data from the playback pipeline and requiring the demuxer
97 or parser to do a full-blown seek including resetting its internal state
98 and resetting the position of the data source. It might also require
99 considerable decoding effort to get to the right position to resume
100 playback from at the higher rate.
102 This release adds a new mechanism to achieve quasi-instant rate changes
103 in certain playback pipelines without interrupting the flow of data in
104 the pipeline. This is activated by sending a seek with the
105 GST_SEEK_FLAG_INSTANT_RATE_CHANGE flag and start_type = stop_type =
106 GST_SEEK_TYPE_NONE. This flag does not work for all pipelines, in which
107 case it is necessary to fall back to sending a full flushing seek to
108 change the playback rate. When using this flag, the seek event is only
109 allowed to change the current rate and can modify the trickmode flags
110 (e.g. keyframe only or not), but it is not possible to change the
111 current playback position, playback direction or do a flush.
113 This is particularly useful for streaming use cases like HLS or DASH
114 where the streaming download should not be interrupted when changing
117 Instant rate changing is handled in the pipeline in a specific sequence
118 which is detailed in the seeking design docs. Most elements don’t need
119 to worry about this, only elements that sync to the clock need some
120 special handling which is implemented in the GstBaseSink base class, so
121 should be taken care of automatically in most normal playback pipelines
124 See Jan’s GStreamer Conference 2019 talk “Changing Playback Rate
125 Instantly” for more information.
127 You can try this feature by passing the -i command line option to
128 gst-play-1.0. It is supported at least by qtdemux, tsdemux, hlsdemux,
131 Google Transport-Wide Congestion Control
133 rtpmanager now supports the parsing and generating of RTCP messages for
134 the Google Transport-Wide Congestion Control RTP Extension, as described
136 https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01.
138 This “just” provides the required plumbing/infrastructure, it does not
139 actually make effect any actual congestion control on the sender side,
140 but rather provides information for applications to use to make such
143 See Håvard’s “Google Transport-Wide Congestion Control” talk for more
144 information about this feature.
146 GstTranscoder: a new high-level transcoding API for applications
148 The new GstTranscoder library, along with transcodebin and
149 uritranscodebin elements, provides high level API for applications to
150 transcode media files from one format to another. Watch Thibault’s talk
151 “GstTranscoder: A High Level API to Quickly Implement Transcoding
152 Capabilities in your Applications” for more information.
154 This also comes with a gst-transcoder-1.0 command line utility to
155 transcode one URI into another URI based on the specified encoding
158 Active Format Description (AFD) and Bar Data support
160 The GstVideo Ancillary Data API has gained support for Active Format
161 Description (AFD) and Bar data.
163 This includes various two new buffer metas: GstVideoAFDMeta and
166 GStreamer now also parses and extracts AFD/Bar data in the h264/h265
167 video parsers, and supports both capturing them and outputting them in
168 the decklink elements. See Aaron’s lightning talk at the GStreamer
169 Conference for more background.
171 ONVIF trick modes support in both GStreamer RTSP server and client
173 - Support for the various trick modes described in section 6 of the
174 ONVIF streaming spec has been implemented in both gst-rtsp-server
176 - Various new properties in rtspsrc must be set to take advantage of
178 - Examples are available here: test-onvif-server.c and
180 - Watch Mathieu Duponchelle’s talk “Implementing a Trickmode Player
181 with ONVIF, RTSP and GStreamer” for more information and a live
184 GStreamer Codecs library with decoder base classes
186 This introduces a new library in gst-plugins-bad which contains a set of
187 base classes that handle bitstream parsing and state tracking for the
188 purpose of decoding different codecs. Currently H264, H265, VP8 and VP9
189 are supported. These bases classes are meant primarily for internal use
190 in GStreamer and are used in various decoder elements in connection with
191 low level decoding APIs like DXVA, NVDEC, VAAPI and V4L2 State Less
192 decoders. The new library is named gstreamer-codecs-1.0 /
193 libgstcodecs-1.0 and is not yet guaranteed to be API stable across major
196 MPEG-TS muxing improvements
198 The GStreamer MPEG-TS muxer has seen major improvements on various
199 fronts in this cycle:
201 - It has been ported to the GstAggregator base class which means it
202 can work in defined-latency mode with live input sources and
203 continue streaming if one of the inputs stops producing data.
205 - atscmux, a new ATSC-specific tsmux subclass
207 - Constant Bit Rate (CBR) muxing support via the new bitrate property
208 which allows setting the target bitrate in bps. If this is set the
209 muxer will insert null packets as padding to achieve the desired
210 multiplex-wide constant bitrate.
212 - compliance fixes for TV broadcasting use cases (esp. ATSC). See
213 Jan’s talk “TV Broadcast compliant MPEG-TS” for details.
215 - Streams can now be added and removed at runtime: Until now, any
216 streams in tsmux had to be present when the element started
217 outputting its first buffer. Now they can appear at any point during
218 the stream, or even disappear and reappear later using the same PID.
220 - new pcr-interval property allows applications to configure the
221 desired interval instead of hardcoding it
223 - basic SCTE-35 support. This is enabled by setting the scte-35-pid
224 property on the muxer. Sending SCTE-35 commands is then done by
225 creating the appropriate SCTE-35 GstMpegtsSection and sending them
228 - MPEG-2 AAC handling improvements
232 - New qmlgloverlay element for rendering a QtQuick scene over the top
233 of a video stream. qmlgloverlay requires that Qt support adopting an
234 external OpenGL context and is known to work on X11 and Windows.
235 Wayland is known not to work due to limitations within Qt. Check out
236 the example to see how it works.
238 - The clocksync element is a generic element that can be placed in a
239 pipeline to synchronise passing buffers to the clock at that point.
240 This is similar to identity sync=true, but because it isn’t
241 GstBaseTransform-based, it can process GstBufferLists without
242 breaking them into separate GstBuffers. It is also more discoverable
243 than the identity option. Note that you do not need to insert this
244 element into your pipeline to make GStreamer sync to the pipeline
245 clock, this is usually handled automatically by the elements in the
246 pipeline (sources and sinks mostly). This element is useful to feed
247 non-live input such as local files into elements that expect live
248 input such as webrtcbin.`
250 - New imagesequencesrc element to easily create a video stream from a
251 sequence of JPEG or PNG images (or any other encoding where the type
252 can be detected), basically a multifilesrc made specifically for
255 - rpicamsrc element for capturing raw or encoded video (H.264, MJPEG)
256 from the Raspberry Pi camera. This works much like the popular
257 raspivid command line utility but outputs data nicely timestamped
258 and formatted in order to integrate nicely with other GStreamer
259 elements. Also comes with a device provider so applications can
260 discover the camera if available.
262 - aatv and cacatv video filters that transform video ASCII art style
264 - avtp: new Audio Video Transport Protocol (AVTP) plugin for Linux.
265 See Andre Guedes’ talk “Audio/Video Bridging (AVB) support in
266 GStreamer” for more details.
268 - clockselect: a pipeline element that enables clock selection/forcing
269 via gst-launch pipeline syntax.
271 - dashsink: Add new sink to produce DASH content. See Stéphane’s talk
272 or blog post for details.
274 - dvbsubenc: a DVB subtitle encoder element
276 - microdns: a libmicrodns-based mdns device provider to discover RTSP
277 cameras on the local network
279 - mlaudiosink: new audio sink element for the Magic Leap platform,
280 accompanied by an MLSDK implementation in the amc plugin
282 - msdkvp9enc: VP9 encoder element for the Intel MediaSDK
284 - rist: new plugin implementing support for the Video Services Forum’s
285 Reliable Internet Stream Transport (RIST) TR-06-1 Simple Profile.
286 See Nicolas’ blog post “GStreamer support for the RIST
287 Specification” for more details.
289 - rtmp2: new RTMP client source and sink elements with fully
290 asynchronous network operations, better robustness and additional
291 features such as handling ping and stats messages, and adobe-style
292 authentication. The new rtmp2src and rtmp2sink elements should be
293 API-compatible with the old rtmpsrc / rtmpsink elements and should
294 work as drop-in replacements.
296 - new RTP source and sink elements to easily set up RTP streaming via
297 rtp:// URIs: The rtpsink and rtpsrc elements add an URI interface so
298 that streams can be decoded with decodebin using rtp:// URIs. These
299 can be used as follows: ``` gst-launch-1.0 videotestsrc ! x264enc !
300 rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234
302 gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1
303 ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0 rtpsrc
304 uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay !
305 avdec_h264 ! videoconvert ! xvimagesink
307 gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay
308 config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0
309 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay
310 ! avdec_mpeg4 ! videoconvert ! xvimagesink ```
312 - svthevcenc: new SVT-HEVC-based H.265 video encoder
314 - switchbin: new helper element which chooses between a set of
315 processing chains (paths) based on input caps, and changes the
316 active chain if new caps arrive. Paths are child objects, which are
317 accessed by the GstChildProxy interface. See the switchbin
318 documentation for a usage example.
320 - vah264dec: new experimental va plugin with an element for H.264
321 decoding with VA-API using GStreamer’s new stateless decoder
322 infrastructure (see Linux section below).
324 - v4l2codecs: introduce an V4L2 CODECs Accelerator supporting the new
325 CODECs uAPI in the Linux kernel (see Linux section below)
327 - zxing new plugin to detect QR codes and barcodes, based on libzxing
329 - also see the Rust plugins section below which contains plenty of new
330 exciting plugins written in Rust!
332 New element features and additions
336 - filesink: Add a new “full” buffer mode. Previously the default and
337 full modes were the same. Now the default mode is like before: it
338 accumulates all buffers in a buffer list until the threshold is
339 reached and then writes them all out, potentially in multiple
340 writes. The new full mode works by always copying memory to a single
341 memory area and writing everything out with a single write once the
342 threshold is reached.
344 - multiqueue: Add stats property and
345 current-level-{buffers, bytes, time} pad properties to query the
346 current levels of the corresponding internal queue.
350 - alsa: implement a device provider
352 - alsasrc: added use-driver-timestamp property to force use of
353 pipeline timestamps (and disable driver timestamps) if so desired
355 - audioconvert: fix changing the mix-matrix property at runtime
357 - appsrc: added support for segment forwarding or custom GstSegments
358 via GstSample, enabled via the handle-segment-change property. This
359 only works for segments in TIME format for now.
361 - compositor: various performance optimisations, checkerboard drawing
362 fixes, and support for VUYA format
364 - encodebin: Fix and refactor smart encoding; ensure that a single
365 segment is pushed into encoders; improve force-key-unit event
368 - opusenc: Add low delay option (audio-type=restricted-lowdelay) to
369 disable the SILK layer and achieve only 5ms delay.
371 - opusdec: add stats property to retrieve various decoder statistics.
373 - uridecodebin3: Let decodebin3 do its stream selection if no one
376 - decodebin3: Avoid overriding explicit user selection of streams
378 - playbin: add flag to force use of software decoders over any
379 hardware decoders that might also be available
381 - playbin3, playbin: propagate sink context
383 - rawvideoparse: Fix tiling support, allow setting colorimetry
385 - subparse: output plain utf8 text instead of pango-markup formatted
386 text if downstream requires it, useful for interop with elements
387 that only accept utf8-formatted subtitles such as muxers or closed
390 - tcpserversrc, tcpclientsrc: add stats property with TCP connection
391 stats (some are only available on Linux though)
393 - timeoverlay: add show-times-as-dates, datetime-format and
394 datetime-epoch properties to display times with dates
396 - videorate: Fix changing rate property during playback; reverse
397 playback fixes; update QoS events taking into account our rate
399 - videoscale: pass through and transform size sensitive metas instead
400 of just dropping them
404 - avidemux can handle H.265 video now. Our advice remains to
405 immediately cease all contact and communication with anyone who
406 hands you H.265 video in an AVI container, however.
408 - avimux: Add support for S24LE and S32LE raw audio and v210 raw video
409 formats; support more than 2 channels of raw audio.
411 - souphttpsrc: disable session sharing and cookie jar when the cookies
412 property is set; correctly handle seeks past the end of the content
414 - deinterlace: new YADIF deinterlace method which should provide
415 better quality than the existing methods and is LGPL licensed;
416 alternate fields are supported as input to the deinterlacer as well
417 now, and there were also fixes for switching the deinterlace mode on
420 - flvmux: in streamable mode allow adding new pads even if the initial
421 header has already been written. Old clients will only process the
422 initial stream, new clients will get a header with the new streams.
423 The skip-backwards-streams property can be used to force flvmux to
424 skip and drop a few buffers rather than produce timestamps that go
425 backward and confuse librtmp-based clients. There’s also better
426 handling for timestamp rollover when streaming for a long time.
428 - imagefreeze: Add live mode, which can be enabled via the new is-live
429 property. In this mode frames will only be output in PLAYING state
430 according to the negotiated framerate, skipping frames if the output
431 can’t keep up (e.g. because it’s blocked downstream). This makes it
432 possible to actually use imagefreeze in live pipelines without
433 having to manually ensure somehow that it starts outputting at the
434 current running time and without still risking to fall behind
437 - matroskademux, qtdemux: Provide audio lead-in for some lossy formats
438 when doing accurate seeks, to make sure we can actually decode
439 samples at the desired position. This is especially important for
440 non-linear audio/video editing use-cases.
442 - matroskademux, matroskamux: Handle interlaced field order (tff, bff)
446 - new offset-to-zero property to offset all streams to start at
447 zero. This takes the timestamp of the earliest stream and
448 offsets it so that it starts at 0. Some software (VLC,
449 ffmpeg-based) does not properly handle Matroska files that start
450 at timestamps much bigger than zero, which could happen with
452 - added a creation-time property to explicitly set the creation
453 time to write into the file headers. Useful when remuxing, for
454 example, but also for live feeds where the DateUTC header can be
455 set a UTC timestamp corresponding to the beginning of the file.
456 - the muxer now also always waits for caps on sparse streams, and
457 warns if caps arrive after the header has already been sent,
458 otherwise the subtitle track might be silently absent in the
459 final file. This might affect applications that send sparse data
460 into matroskamux via an appsrc element, which will usually not
461 send out the initial caps before it sends out the first buffer.
463 - pulseaudio: device provider improvements: fix discovery of
464 newly-added devices and hide the alsa device provider if we provide
467 - qtdemux: raw audio handling improvements, support for AC4 audio, and
468 key-units trickmode interval support
472 - was ported to the GstAggregator base class which allows for
473 better handling of live inputs, but might entail minor
474 behavioural changes for sparse inputs if inputs are not live.
475 - has also gained a force-create-timecode-trak property to create
476 a timecode trak in non-mov flavors, which may not be supported
477 by Apple but is supported by other software such as Final Cut
479 - also a force-chunks property to force the creation of chunks
480 even in single-stream files, which is required for Apple ProRes
482 - also supports 8k resolutions in prefill mode with ProRes.
484 - rtpbin gained a request-jitterbuffer signal which allows
485 applications to plug in their own jitterbuffer implementation such
486 as the threadsharing jitterbuffer from the Rust plugins, for
489 - rtprtxsend: add clock-rate-map property to allow generic RTP input
490 caps without a clock-rate whilst still supporting the max-size-time
491 property for bundled streams.
493 - rtpssrcdemux: introduce max-streams property to guard against
494 attacks where the sender changes SSRC for every RTP packet.
496 - rtph264pay, rtph264pay: implement STAP-A and various aggregation
497 modes controled by the new aggegrate-mode property: none to not
498 aggregate NAL units (as before), zero-latency to aggregate NAL units
499 until a VCL or suffix unit is included, or max to aggregate all NAL
500 units with the same timestamp (which adds one frame of latency). The
501 default has been kept at none for backwards compatibility reasons
502 and because various RTP/RTSP implementions don’t handle aggregation
503 well. For WebRTC use cases this should be set to zero-latency,
506 - rtpmp4vpay: add support for config-interval=-1 to resend headers
507 with each IDR keyframe, like other video payloaders.
509 - rtpvp8depay: Add wait-for-keyframe property for waiting until the
510 next keyframe after packet loss. Useful if the video stream was not
511 encoded with error resilience enabled, in which case packet loss
512 tends to cause very bad artefacts when decoding, and waiting for the
513 next keyframe instead improves user experience considerably.
515 - splitmuxsink and splitmuxsrc can now handle auxiliary video streams
516 in addition to the primary video stream. The primary video stream is
517 still used to select fragment cut points at keyframe boundaries.
518 Auxilliary video streams may be broken up at any packet - so
519 fragments may not start with a keyframe for those streams.
523 - new muxer-preset and sink-preset properties for setting
525 - a new start-index property to set the initial fragment id
526 - and a new muxer-pad-map property which explicitly maps
527 splitmuxsink pads to the muxer pads they should connect to,
528 overriding the implicit logic that tries to match pads but
529 yields arbitrary names.
530 - Also includes the actual sink element in the fragment-opened and
531 fragment-closed element messages now, which is especially useful
532 for sinks without a location property or when finalisation of
533 the fragments is done asynchronously.
535 - videocrop: add support for Y444, Y41B and Y42B pixel formats
537 - vp8enc, vp9enc: change default value of VP8E_SET_STATIC_THRESHOLD
538 from 0 to 1 which matches what Google WebRTC does and results in
539 lower CPU usage; also added a new bit-per-pixel property to select a
540 better default bitrate
542 - v4l2: add support for ABGR, xBGR, RGBA, and RGBx formats and for
543 handling interlaced video in alternate fields interlace mode (one
544 field per buffer instead of one frame per picture with both fields
547 - v4l2: Profile and level probing support for H264, H265, MPEG-4,
548 MPEG-2, VP8, and VP9 video encoders and decoders
552 - asfdemux: extract more metadata: disc number and disc count
556 - respect YouTube bitrate recommendation when user sets the
557 YouTube profile preset
558 - separate high-10 video formats from 8-bit formats to improve
559 depth negotiation and only advertise suitable input raw formats
560 for the desired output depth
561 - forward downstream colorimetry and chroma-site restrictions to
563 - support more color primaries/mappings
567 - av1enc: add threads, row-mt and tile-{columns,rows} properties for
568 this AOMedia AV1 encoder
570 - ccconverter: implement support for CDP framerate conversions
572 - ccextractor: Add remove-caption-meta property to remove caption
573 metas from the outgoing video buffers
575 - decklink: add support for 2K DCI video modes, widescreen NTSC/PAL,
576 and for parsing/outputting AFD/Bar data. Also implement a simple
577 device provider for Decklink devices.
579 - dtlsrtpenc: add rtp-sync property which synchronises RTP streams to
580 the pipeline clock before passing them to funnel for merging with
583 - fdkaac: also decode MPEG-2 AAC; encoder now supports more
584 multichannel/surround sound layouts
586 - hlssink2: add action signals for custom playlist/fragment handling:
587 Instead of always going through the file system API we allow the
588 application to modify the behaviour. For the playlist itself and
589 fragments, the application can provide a GOutputStream. In addition
590 the sink notifies the application whenever a fragment can be
593 - interlace: can now output data in alternate fields mode; added field
594 switching mode for 2:2 field pattern
596 - iqa: Add a mode property to enable strict mode that checks that all
597 the input streams have the exact same number of frames; also
598 implement the child proxy interface
600 - mpeg2enc: add disable-encode-retries property for lower CPU usage
602 - mpeg4videoparse: allow re-sending codec config at IDR via
605 - mpegtsparse: new alignment property to determine number of TS
606 packets per output buffer, useful for feeding an MPEG-TS stream for
607 sending via udpsink. This can be used in combination with the
608 split-on-rai property that makes sure to start a new output buffer
609 for any TS packet with the Random Access Indicator set. Also set
610 delta unit buffer flag on non-random-access buffers.
612 - mpegdemux: add an ignore-scr property to ignore the SCR in
613 non-compliant MPEG-PS streams with a broken SCR, which will work as
614 long as PTS/DTS in the PES header is consistently increasing.
618 - add an ignore-pcr property to ignore MPEG-TS streams with broken
619 PCR streams on which we can’t reliably recover correct
621 - new latency property to allow applications to lower the
622 advertised worst-case latency of 700ms if they know their
623 streams support this (must have timestamps in higher frequency
624 than required by the spec)
625 - support for AC4 audio
627 - msdk - Intel Media SDK plugin for hardware-accelerated video
628 decoding and encoding on Windows and Linux:
630 - mappings for more video formats: Y210, Y410, P012_LE, Y212_LE
631 - encoders now support bitrate changes and input format changes in
633 - msdkh264enc, msdkh265enc: add support for CEA708 closed caption
635 - msdkh264enc, msdkh265enc: set Region of Interest (ROI) region
637 - msdkh264enc, msdkh265enc: new tune property to enable low-power
639 - msdkh265enc: add support 12-bit 4:2:0 encoding and 8-bit 4:2:2
640 encoding and VUYA, Y210, and Y410 as input formats
641 - msdkh265enc: add support for screen content coding extension
642 - msdkh265dec: add support for main-12/main-12-intra,
643 main-422-10/main-422-10-intra 10bit,
644 main-422-10/main-422-10-intra 8bit,
645 main-422-12/main-422-12-intra, main-444-10/main-444-10-intra,
646 main-444-12/main-444-12-intra, and main-444 profiles
647 - msdkvp9dec: add support for 12-bit 4:4:4
648 - msdkvpp: add support for Y410 and Y210 formats, cropping via
649 properties, and a new video-direction property.
651 - mxf: Add support for CEA-708 CDP from S436 essence tracks. mxfdemux
652 can now handle Apple ProRes
654 - nvdec: add H264 + H265 stateless codec implementation nvh264sldec
655 and nvh265sldec with fewer features but improved latency. You can
656 set the environment variable GST_USE_NV_STATELESS_CODEC=h264 to use
657 the stateless decoder variant as nvh264dec instead of the “normal”
658 NVDEC decoder implementation.
660 - nvdec: add support for 12-bit 4:4:4/4:2:0 and 10-bit 4:2:0 decoding
664 - add more rate-control options, support for B-frame encoding (if
665 device supports it), an aud property to toggle Access Unit
666 Delimiter insertion, and qp-{min,max,const}-{i,p,b} properties.
667 - the weighted-pred property enables weighted prediction.
668 - support for more input formats, namely 8-bit and 10-bit RGB
669 formats (BGRA, RGBA, RGB10A2, BGR10A2) and YV12 and VUYA.
670 - on-the-fly resolution changes are now supported as well.
671 - in case there are multiple GPUs on the system, there are also
672 per-GPU elements registered now, since different devices will
673 have different capabilities.
674 - nvh265enc can now support 10-bit YUV 4:4:4 encoding and 8-bit
675 4:4:4 / 10-bit 4:2:0 formats up to 8K resolution (with some
676 devices). In case of HDR content HDR related SEI nals will be
677 inserted automatically.
679 - openjpeg: enable multi-threaded decoding and add support for
680 sub-frame encoding (for lower latency)
682 - rtponviftimestamp: add opt-out “drop-out-of-segment” property
684 - spanplc: new stats property
686 - srt: add support for IPv6 and for using hostnames instead of IP
687 addresses; add streamid property, but also allow passing the id via
688 the stream URI; add wait-for-connection property to srtsink
690 - timecodestamper: this element was rewritten with an updated API
691 (properties); it has gained many new properties, seeking support and
692 support for linear timecode (LTC) from an audio stream.
694 - uvch264src now comes with a device provider to advertise available
695 camera sources that support this interface (mostly Logitech C920s)
697 - wpe: Add software rendering support and support for mouse scroll
700 - x265enc: support more 8/10/12 bits 4:2:0, 4:2:2 and 4:4:4 profiles;
701 add support for mastering display info and content light level
706 - Add mapping for SpeedHQ video codec used by NDI
708 - Add mapping for aptX and aptX-HD
710 - avivf_mux: support VP9 and AV1
712 - avvidenc: shift output buffer timestamps and output segment by 1h
713 just like x264enc does, to allow for negative DTS.
715 - avviddec: Limit default number of decoder threads on systems with
716 more than 16 cores, as the number of threads used in avdec has a
717 direct impact on the latency of the decoder, which is of as many
718 frames as threads, so a large numbers of threads can make for
719 latency levels that can be problematic in some applications.
721 - avviddec: Add thread-type property that allows applications to
722 specify the preferred multithreading method (auto, frame, slice).
723 Note that thread-type=frame may introduce additional latency
724 especially in live pipelines, since it introduces a decoding delay
725 of number of thread frames.
727 Plugin and library moves
729 - There were no plugin moves or library moves in this cycle.
731 - The rpicamsrc element was moved into -good from an external
732 repository on github.
736 The following elements or plugins have been removed:
738 - The yadif video deinterlacing plugin from gst-plugins-bad, which was
739 one of the few GPL licensed plugins, has been removed in favour of
740 deinterlace method=yadif.
742 - The avdec_cdgraphics CD Graphics video decoder element from
743 gst-libav was never usable in GStreamer and we now have a cdgdec
744 element written in Rust in gst-plugins-rs to replace it.
746 - The VDPAU plugin has been unmaintained and unsupported for a very
747 long time and does not have the feature set we expect from
748 hardware-accelerated video decoders. It’s been superseded by the
749 nvcodec plugin leveraging NVIDIA’s NVDEC API.
751 Miscellaneous API additions
755 - gst_task_resume(): This new API allows resuming a task if it was
756 paused, while leaving it in stopped state if it was stopped or not
757 started yet. This can be useful for callback-based driver workflows,
758 where you basically want to pause and resume the task when buffers
759 are notified while avoiding the race with a gst_task_stop() coming
762 - info: add printf extensions GST_TIMEP_FORMAT and GST_STIMEP_FORMAT
763 for printing GstClockTime/GstClockTimeDiff pointers, which is much
764 more convenient to use in debug log statements than the usual
765 GST_TIME_FORMAT-followed-by-GST_TIME_ARGS dance. Also add an
766 explicit GST_STACK_TRACE_SHOW_NONE enum value.
768 - gst_element_get_current_clock_time() and
769 gst_element_get_current_running_time(): new helper functions for
770 getting an element clock’s time, and the clock time minus base time,
771 respectively. Useful when adding additional input branches to
772 elements such as compositor, audiomixer, flvmux, interleave or
773 input-selector to determine initial pad offsets and such.
775 - seeking: Add GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED to just skip
776 B-frames during trick mode, showing both keyframes + P-frame, and
777 add support for it in h264parse and h265parse.
779 - elementfactory: add GST_ELEMENT_FACTORY_TYPE_HARDWARE to allow
780 elements to advertise that they are hardware-based or interact with
781 hardware. This has multiple applications:
783 - it makes it possible to easily differentiate hardware and
784 software based element implementations such as audio or video
785 encoders and decoders. This is useful in order to force the use
786 of software decoders for specific use cases, or to check if a
787 selected decoder is actually hardware-accelerated or not.
788 - elements interacting with hardware and their respective drivers
789 typically don’t know the actually supported capabilities until
790 the element is set into at least READY state and can open a
791 device handle and probe the hardware.
793 - gst_uri_from_string_escaped(): identical to gst_uri_from_string()
794 except that the userinfo and fragment components of the URI will not
795 be unescaped while parsing. This is needed for correctly parsing
796 usernames or passwords with : in them .
798 - paramspecs: new GstParamSpec flag GST_PARAM_CONDITIONALLY_AVAILABLE
799 to indicate that a property might not always exist.
801 - gst_bin_iterate_all_by_element_factory_name() finds elements in a
804 - pad: gst_pad_get_single_internal_link() is a new convenience
805 function to return the single internal link of a pad, which is
806 useful e.g. to retrieve the output pad of a new multiqueue request
809 - datetime: Add constructors to create datetimes with timestamps in
810 microseconds, gst_date_time_new_from_unix_epoch_local_time_usecs()
811 and gst_date_time_new_from_unix_epoch_utc_usecs().
813 - gst_debug_log_get_lines() gets debug log lines formatted in the same
814 way the default log handler would print them
816 - GstSystemClock: Add GST_CLOCK_TYPE_TAI as GStreamer abstraction for
817 CLOCK_TAI, to support transmission offloading features where network
818 packets are timestamped with the time they are deemed to be actually
819 transmitted. Useful in combination with the new AVTP plugin.
821 - miscellaneous utility functions: gst_clear_uri(),
822 gst_structure_take().
824 - harness: Added gst_harness_pull_until_eos()
828 - gst_base_src_new_segment() allows subclasses to update the
829 segment to be used at runtime from the ::create() function. This
830 deprecates gst_base_src_new_seamless_segment()
831 - gst_base_src_negotiate() allows subclasses to trigger format
832 renegotiation at runtime from inside the ::create() or ::alloc()
835 - GstBaseSink: new stats property and gst_base_sink_get_stats() method
836 to retrieve various statistics such as average frame rate and
837 dropped/rendered buffers.
839 - GstBaseTransform: gst_base_transform_reconfigure() is now public
840 API, useful for subclasses that need to completely re-implement the
841 ::submit_input_buffer() virtual method
845 - gst_aggregator_update_segment() allows subclasses to update the
846 output segment at runtime. Subclasses should use this function
847 rather than push a segment event onto the source pad directly.
848 - new sample selection API:
849 - subclasses should now call gst_aggregator_selected_samples()
850 from their ::aggregate() implementation to signal that they
851 have selected the next samples they will aggregate
852 - GstAggregator will then emit the samples-selected signal
853 where handlers can then look up samples per pad via
854 gst_aggregator_peek_next_sample().
855 - This is useful for example to atomically update input pad
856 properties in mixer subclasses such as compositor.
857 Applications can now update properties with precise control
858 of when these changes will take effect, and for which input
860 - gst_aggregator_finish_buffer_list() allows subclasses to push
861 out a buffer list, improving efficiency in some cases.
862 - a ::negotiate() virtual method was added, for consistency with
863 other base classes and to allow subclasses to completely
864 override the negotiation behaviour.
865 - the new ::sink_event_pre_queue() and ::sink_query_pre_queue()
866 virtual methods allow subclasses to intercept or handle
867 serialized events and queries before they’re queued up
870 GStreamer Plugins Base Libraries
874 - audioaggregator, audiomixer: new output-buffer-duration-fraction
875 property which allows use cases such as keeping the buffers output
876 by compositor on one branch and audiomixer on another perfectly
877 aligned, by requiring the compositor to output a n/d frame rate, and
878 setting output-buffer-duration-fraction to d/n on the audiomixer.
880 - GstAudioDecoder: new max-errors property so applications can
881 configure at what point the decoder should error out, or tell it to
884 - gst_audio_make_raw_caps() and gst_audio_formats_raw() are
885 bindings-friendly versions of the GST_AUDIO_CAPS_MAKE() C macro.
887 - gst_audio_info_from_caps() now handles encoded audio formats as well
891 - GstEncodingProfile:
892 - Do not restrict number of similar profiles in a container
893 - add GstValue serialization function
894 - codec utils now support more H.264/H.265 profiles/levels and have
895 improved extension handling
899 - rtpbasepayloader: Add scale-rtptime property for scaling RTP
900 timestamp according to the segment rate (equivalent to RTSP speed
901 parameter). This is useful for ONVIF trickmodes via RTSP.
903 - rtpbasepayload: add experimental property for embedding twcc
904 sequencenumbers for Transport-Wide Congestion Control (gated behind
905 the GST_RTP_ENABLE_EXPERIMENTAL_TWCC_PROPERTY environment
906 variable) - more generic API for enabling this is expected to land
907 in the next development cycle.
909 - rtcpbuffer: add RTPFB_TYPE_TWCC for Transport-Wide Congestion
913 gst_rtp_buffer_get_extension_onebyte_header_from_bytes()``, so that one can parse theGBytes`
914 returned by gst_rtp_buffer_get_extension_bytes()
916 - rtpbasedepayload: Add max-reorder property to make the
917 previously-hardcoded value when to consider a sender to have
918 restarted configurable. In some scenarios it’s particularly useful
919 to set max-reorder=0 to disable the behaviour that the depayloader
920 will drop packets: when max-reorder is set to 0 all
921 reordered/duplicate packets are considered coming from a restarted
926 - add gst_rtsp_url_get_request_uri_with_control() to create request
927 uri combined with control url
929 - GstRTSPConnection: add the possibility to limit the Content-Length
930 for RTSP messages via
931 gst_rtsp_connection_set_content_length_limit(). The same
932 functionality is also exposed in gst-rtsp-server.
936 - add support for parsing the extmap attribute from caps and storing
937 inside caps The extmap attribute allows mapping RTP extension header
938 IDs to well-known RTP extension header specifications. See RFC8285
943 - update to latest iso-code and support more languages
945 - add tags for acoustid id & acoustid fingerprint, plus MusicBrainz ID
950 - High Dynamic Range (HDR) video information representation and
951 signalling enhancements:
953 - New APIs for HDR video information representation and
955 - GstVideoMasteringDisplayInfo: display color volume info as
957 - GstVideoContentLightLevel: content light level specified in
958 CEA-861.3, Appendix A.
959 - plus functions to serialise/deserialise and add them to or
961 - gst_video_color_{matrix,primaries,transfer}_{to,from}_iso():
962 new utilility functions for conversion from/to ISO/IEC
964 - add ARIB STD-B67 transfer chracteristic function
965 - add SMPTE ST 2084 support and BT 2100 colorimetry
966 - define bt2020-10 transfer characteristics for clarity:
967 bt707, bt2020-10, and bt2020-12 transfer characteristics are
968 functionally identical but have their own unique values in
970 - h264parse, h265parse: Parse mastering display info and content
971 light level from SEIs.
972 - matroskademux: parse HDR metadata
973 - matroskamux: Write MasteringMetadata and Max{CLL,FALL}. Enable
974 muxing with HDR meta data if upstream provided it
975 - avviddec: Extract HDR information if any and map bt2020-10, PQ
976 and HLG transfer functions
978 - added bt601 transfer function (for completeness)
980 - support for more pixel formats:
982 - Y412 (packed 12 bits 4:4:4:4)
983 - Y212 (packed 12 bits 4:2:2)
984 - P012 (semi-planar 4:2:0)
985 - P016_{LE,BE} (semi-planar 16 bits 4:2:0)
986 - Y444_16{LE,BE} (planar 16 bits 4:4:4)
987 - RGB10A2_LE (packed 10-bit RGB with 2-bit alpha channel)
988 - NV12_32L32 (NV12 with 32x32 tiles in linear order)
989 - NV12_4L4 (NV12 with 4x4 tiles in linear order)
993 - new max-errors property so applications can configure at what
994 point the decoder should error out, or tell it to just keep
997 - new qos property to disable dropping frames because of QoS, and
998 post QoS messages on the bus when dropping frames. This is
999 useful for example in a scenario where the decoded video is
1000 tee-ed off to go into a live sink that syncs to the clock in one
1001 branch, and an encoding and save to file pipeline in the other
1002 branch. In that case one wouldn’t want QoS events from the video
1003 sink make the decoder drop frames because that would also leave
1004 gaps in the encoding branch then.
1008 - gst_video_encoder_finish_subframe() is new API to push out
1009 subframes (e.g. slices), so encoders can split the encoding into
1010 subframes, which can be useful to reduce the overall end-to-end
1011 latency as we no longer need to wait for the full frame to be
1012 encoded to start decoding or sending out the data.
1013 - new min-force-key-unit-interval property allows configuring the
1014 minimum interval between force-key-unit requests and prevents a
1015 big bitrate increase if a lot of key-units are requested in a
1016 short period of time (as might happen in live streaming RTP
1017 pipelines when packet loss is detected).
1018 - various force-key-unit event handling fixes
1020 - GstVideoAggregator, compositor, glvideomixer: expose
1021 max-last-buffer-repeat property on pads. This can be used to have a
1022 compositor display either the background or a stream on a lower
1023 zorder after a live input stream freezes for a certain amount of
1024 time, for example because of network issues.
1026 - gst_video_format_info_component() is new API to find out which
1027 components are packed into a given plane, which is useful to prevent
1028 us from assuming a 1-1 mapping between planes and components.
1030 - gst_video_make_raw_caps() and gst_video_formats_raw() are
1031 bindings-friendly versions of the GST_VIDEO_CAPS_MAKE() C macro.
1033 - video-blend: Add support for blending on top of 16 bit per component
1034 formats, which makes sure we can support every currently supported
1035 raw video format for blending subtitles or logos on top of video.
1037 - GST_VIDEO_BUFFER_IS_TOP_FIELD() and
1038 GST_VIDEO_BUFFER_IS_BOTTOM_FIELD() convenience macros to check
1039 whether the video buffer contains only the top field or bottom field
1040 of an interlaced picture.
1042 - GstVideoMeta now includes an alignment field with the
1043 GstVideoAlignment so buffer producers can explicitly specify the
1044 exact geometry of the planes, allowing users to easily know the
1045 padded size and height of each plane. Default values will be used if
1048 Use gst_video_meta_set_alignment() to set the alignment and
1049 gst_video_meta_get_plane_size() or gst_video_meta_get_plane_height()
1050 to compute the plane sizes or plane heights based on the information
1053 - gst_video_info_align_full() works like gst_video_info_align() but
1054 also retrieves the plane sizes.
1058 - support for SCTE-35 sections
1060 - extend support for ATSC tables:
1062 - System Time Table (STT)
1063 - Master Guide Table (MGT)
1064 - Rating Region Table (RRT)
1066 Miscellaneous performance, latency and memory optimisations
1068 As always there have been many performance and memory usage improvements
1069 across all components and modules. Some of them have already been
1070 mentioned elsewhere so won’t be repeated here.
1072 The following list is only a small snapshot of some of the more
1073 interesting optimisations that haven’t been mentioned in other contexts
1076 - caps negotiation, structure and GValue performance optimizations
1078 - systemclock: clock waiting performance improvements (moved from
1079 GstPoll to GCond for waiting), especially on Windows.
1081 - rtpsession: add support for buffer lists on the recv path for better
1082 performance with higher packet rate streams.
1084 - rtpjitterbuffer: internal timer handling has been rewritten for
1085 better performance, see Nicolas’ talk “Revisiting RTP Jitter Buffer
1086 Timers” for more details.
1088 - H.264/H.265 parsers and RTP payloaders/depayloaders have been
1089 optimised for latency to make sure data is processed and pushed out
1090 as quickly as possible
1092 - video-scaler: correctness and performance improvements, esp. for
1093 interlaced formats and GBRA
1095 - GstVideoEncoder has gained new API to push out subframes
1096 (e.g. slices), so encoders can split the encoding into subframes,
1097 which can be useful to reduce the overall end-to-end latency as we
1098 no longer need to wait for the full frame to be encoded to start
1099 decoding or sending out the data.
1101 This is complemented by the new GST_VIDEO_BUFFER_FLAG_MARKER which
1102 is a video-specific buffer flag to mark the end of a video frame, so
1103 elements can know that they have received all data for a frame
1104 without waiting for the beginning of the next frame. This is similar
1105 to how the RTP marker flag is used in many RTP video mappings.
1107 The video encoder base class now also releases the internal stream
1108 lock before pushing out data, so as to not block the input side of
1109 things from processing more data in the meantime.
1111 Miscellaneous other changes and enhancements
1113 - it is now possible to modify the initial rank of plugin features
1114 without modifying the source code or writing code to do so
1115 programmatically via the GST_PLUGIN_FEATURE_RANK environment
1116 variable. Users can adjust the rank of plugin(s) by passing a
1117 comma-separated list of feature:rank pairs where rank can be a
1118 numerical value or one of NONE, MARGINAL, SECONDARY, PRIMARY, and
1119 MAX. Example: GST_PLUGIN_FEATURE_RANK=myh264dec:MAX,avdec_h264:NONE
1120 sets the rank of the myh264dec element feature to the maximum and
1121 that of avdec_h264 to 0 (none), thus ensuring that myh264dec is
1122 prefered as H264 decoder in an autoplugging context.
1124 - GstDeviceProvider now does a static probe on start as fallback for
1125 providers that don’t support dynamic probing to make things easier
1130 - webrtcbin now contains initial support for renegotiation involving
1131 stream addition and removal. There are a number of caveats to this
1132 initial renegotiation support and many complex scenarios are known
1133 to require some work.
1135 - webrtcbin now exposes the internal ICE object for advanced
1136 configuration options. Using the internal ICE object, it is possible
1137 to toggle UDP or TCP connection usage as well as provide local
1140 - Fix a number of call flows within webrtcbin’s GstPromise handling
1141 where a promise was never replied to. This has been fixed and now a
1142 promise will always receive a reply.
1144 - webrtcbin now exposes a latency property for configuring the
1145 internal rtpjitterbuffer latency and buffering when receiving
1148 - webrtcbin now only synchronises the RTP part of a stream, allowing
1149 RTCP messages to skip synchronisation entirely.
1151 - Fixed most of the webrtcbin state properties (connection-state,
1152 ice-connection-state, signaling-state, but not ice-gathering-state
1153 as that requires newer API in libnice and will be fixed in the next
1154 release series) to advance through the state values correctly. Also
1155 implemented DTLS connection states in the DTLS elements so that
1156 peer-connection-state is not always new.
1158 - webrtcbin now accounts for the a=ice-lite attribute in a remote SDP
1159 offer and will configure the internal ICE implementation
1162 - webrtcbin will now resolve .local candidate addresses using the
1163 system DNS resolver. .local candidate addresses are now produced by
1164 web browsers to help protect the privacy of users.
1166 - webrtcbin will now add candidates found in the SDP to the internal
1167 ICE agent. This was previously unsupported and required using the
1168 add-ice-candidate signal manually from the application.
1170 - webrtcbin will now correctly parse a TURN URI that contains a
1171 username or password with a : in it.
1173 - The GStreamer WebRTC library gained a GstWebRTCDataChannel object
1174 roughly matching the interface exposed by the WebRTC specification
1175 to allow for easier binding generation and use of data channels.
1179 GStreamer OpenGL bindings/build related changes
1181 - The GStreamer OpenGL library (libgstgl) now ships pkg-config files
1182 for platform-specific API where libgstgl provides a public
1183 integration interface and a pkg-config file for a dependency on the
1184 detected OpenGL headers. The new list of pkg-config files in
1185 addition to the original gstreamer-gl-1.0 are gstreamer-gl-x11-1.0,
1186 gstreamer-gl-wayland-1.0, gstreamer-gl-egl-1.0, and
1187 gstreamer-gl-prototypes-1.0 (for OpenGL headers when including
1188 gst/gl/gstglfuncs.h).
1190 - GStreamer OpenGL now ships some platform-specific introspection data
1191 for platforms that have a public interface. This should allow for
1192 easier integration with bindings involving platform specific
1193 functionality. The new introspection data files are named
1194 GstGLX11-1.0, GstGLWayland-1.0, and GstGLEGL-1.0.
1196 GStreamer OpenGL Features
1198 - The iOS implementation no longer accesses UIKit objects off the main
1199 thread fixing a loud warning message when used in iOS applications.
1201 - Support for mouse and keyboard handling using the GstNavigation
1202 interface was added for the wayland implementation complementing the
1203 already existing support for the X11 and Windows implementations.
1205 - A new helper base class for source elements, GstGLBaseSrc is
1206 provided to ease writing source elements producing OpenGL video
1209 - Support for some more 12-bit and 16-bit video formats (Y412_LE,
1210 Y412_BE, Y212_LE, Y212_BE, P012_LE, P012_BE, P016, NV16, NV61) was
1211 added to glcolorconvert.
1213 - glupload can now import dma-buf’s into external-oes textures.
1215 - A new display type for EGLDevice-based systems was added. It is
1216 currently opt-in by using either the GST_GL_PLATFORM=egl-device
1217 environment variable or manual construction
1218 (gst_gl_display_egl_device_new*()) due to compatibility issues with
1221 - Support was added for WinRT/UWP using the ANGLE project for running
1222 OpenGL-based pipelines within a UWP application.
1224 - Various elements now support changing the GstGLDisplay to be used at
1225 runtime in simple cases. This is primarily helpful for changing or
1226 adding an OpenGL-based video sink that must share an OpenGL context
1227 with an external source to an already running pipeline.
1229 GStreamer Vulkan integration
1231 - There is now a GStreamer Vulkan library to provide integration
1232 points and helpers with applications and external GStreamer Vulkan
1233 based elements. The structure of the library is modelled similarly
1234 to the already existing GStreamer OpenGL library. Please note that
1235 the API is still unstable and may change in future releases,
1236 particularly around memory handling. The GStreamer Vulkan library
1237 contains objects for sharing the vkInstance, vkDevice, vkQueue,
1238 vkImage, VkMemory, etc with other elements and/or the application as
1239 well as some helper objects for using Vulkan in an application or
1242 - Added support for building and running on/for the Android and
1243 Windows systems to complement the existing XCB, Wayland, MacOS, and
1244 iOS implementations.
1246 - XCB gained support for mouse/keyboard events using the GstNavigation
1249 - New vulkancolorconvert element for converting between color formats.
1250 vulkancolorconvert can currently convert to/from all 8-bit RGBA
1251 formats as well as 8-bit RGBA formats to/from the YUV formats AYUV,
1254 - New vulkanviewconvert element for converting between stereo view
1255 layouts. vulkanviewconvert can currently convert between all of the
1256 single memory formats (side-by-side, top-bottom, column-interleaved,
1257 row-interleaved, checkerboard, left, right, mono).
1259 - New vulkanimageidentity element for a blit from the input vulkan
1260 image/s to a new vulkan image/s.
1262 - The vulkansink element can now scale the input image to the output
1263 window/surface size where that information is available.
1265 - The vulkanupload element can now configure a transfer from system
1266 memory to VulkanImage-based memory. Previously, this required two
1267 vulkanupload elements.
1269 Tracing framework and debugging improvements
1271 - gst_tracing_get_active_tracers() returns a list of active tracer
1272 objects. This can be used to interact with tracers at runtime using
1273 GObject API such as action signals. This has been implemented in the
1274 leaks tracer for snapshotting and retrieving leaked/active objects
1277 - The leaks tracer can now be interacted with programmatically at
1278 runtime via GObject action signals:
1280 - get-live-object returns a list of live (allocated) traced
1282 - log-live-objects logs a list of live objects into the debug log.
1283 This is the same as sending the SIGUSR1 signal on unix systems,
1284 but works on all operating systems including Windows.
1285 - activity-start-tracking, activity-get-checkpoint,
1286 activity-log-checkpoint, activity-stop-tracking: add support for
1287 tracking and checkpointing objects, similar to what was
1288 previously available via SIGUSR2 on unix systems, but works on
1289 all operating systems including Windows.
1291 - various GStreamer gdb debug helper improvements:
1293 - new ‘gst-pipeline-tree’ command
1294 - more gdb helper functions: gst_element_pad(), gst_pipeline() and
1296 - support for queries and buffers
1297 - print more info for segment events, print event seqnums, object
1298 pointers and structures
1299 - improve gst-print command to show more pad and element
1306 - now prints the pipeline position and duration if available when the
1307 pipeline is advancing. This is hopefully more user-friendly and
1308 gives visual feedback on the terminal that the pipeline is actually
1309 up and running. This can be disabled with the --no-position command
1312 - the parse-launch pipeline syntax now has support for presets:
1313 use@preset=<preset-name>" after an element to load a preset.
1317 - new --color command line option to force coloured output even if not
1320 gst-tester-1.0 (new)
1322 - gst-tester-1.0 is a new tool for plugin developers to launch
1323 .validatetest files with TAP compatible output, meaning it can
1324 easily and cleanly be integrated with the meson test harness. It
1325 allows you to use gst-validate (from the gst-devtools module) to
1326 write integration tests in any GStreamer repository whilst keeping
1327 the tests as close as possible to the code. The tool transparently
1328 handles gst-validate being installed or not: if it is not installed
1329 those integration tests will simply be skipped.
1333 - interactive keyboard controls now also work on Windows
1335 gst-transcoder-1.0 (new)
1337 - gst-transcoder-1.0 is a new command line tool to transcode one URI
1338 into another URI based on the specified encoding profile using the
1339 new GstTranscoder API (see above).
1341 GStreamer RTSP server
1343 - Fix issue where the first few packets (i.e. keyframes) could
1344 sometimes be dropped if the rtsp media pipeline had a live input.
1345 This was a regression from GStreamer 1.14. There are more fixes
1346 pending for that which will hopefully land in 1.18.1.
1348 - Fix backpressure handling when sending data in TCP interleave mode
1349 where RTSP requests and responses and RTP/RTCP packets flow over the
1350 same RTSP TCP connection: The previous implementation would at some
1351 point stop sending data to other clients when a single client
1352 stopped consuming data or did not consume data fast enough. This
1353 obviously created problems for shared media, where the same stream
1354 from a single producer pipeline is sent to multiple clients. Instead
1355 we now manage a backlog in the server’s stream-transport component
1356 and remove slow clients once this backlog exceeds a maximum duration
1357 (which is currently hardcoded).
1359 - Onvif Streaming Specification trick modes support (see section at
1362 - Scale/Speed header support: Speed will deliver the data at the
1363 requested speed, which means increasing the data bandwidth for
1364 speeds > 1.0. Scale will attempt to do the same without affecting
1365 the overall bandwidth requirement vis-a-vis normal playback speed
1366 (e.g. it might drop data for fast-forward playback).
1368 - rtspclientsink: send buffer lists in one go for better performance
1372 - A lot of work was done adding support for media-driver (iHD), the
1373 new VAAPI driver for Intel, mostly for Gen9 onwards.
1375 - Available color formats and frame sizes are now detected at run-time
1376 according to the context configuration.
1378 - Gallium drivers have been re-enabled in the allowed drivers list
1380 - Improved the mapping between VA formats and GStreamer formats by
1381 generating a mapping table at run-time since even among different
1382 drivers the mapping might be different, particularly for RGB with
1385 - The experimental Flexible Encoding Infrastructure (FEI) elements
1386 have been removed since they were not really actively maintained or
1389 - Enhanced the juggling of DMABuf buffers and VASurface metas
1391 - New vaapioverlay element: a compositor element using VA VPP blend
1392 capabilities to accelerate overlaying and compositing. Example
1395 gst-launch-1.0 -vf videotestsrc ! vaapipostproc ! tee name=testsrc ! queue \
1396 ! vaapioverlay sink_1::xpos=300 sink_1::alpha=0.75 name=overlay ! vaapisink \
1397 testsrc. ! queue ! overlay.
1401 - added video-orientation support, supporting frame mirroring and
1404 - added cropping support, either via properties (crop-left,
1405 crop-right, crop-bottom and crop-top) or buffer meta.
1407 - new skin-tone-enhancenment-level property which is the iHD
1408 replacement of the i965 driver’s sink-tone-level. Both are
1409 incompatible with each other, so both were kept.
1411 - handle video colorimetry
1413 - support HDR10 tone mapping
1417 - resurrected wayland backend for non-weston compositors by extracting
1418 the DMABuf from the VASurface and rendering it.
1420 - merged the video overlay API for wayland. Now applications can
1421 define the “window” to render on.
1423 - demoted the vaapisink element to secondary rank since libva
1424 considers rendering as a second-class feature.
1428 - new common target-percentage property which is the desired target
1429 percentage of bitrate for variable rate control.
1431 - encoders now extract their caps from the driver at registration
1434 - vaapivp9enc: added support for low power mode and support for
1435 profile 2 (profile 0 by default)
1437 - vaapih264enc: new max-qp property that sets the maximum quantization
1438 value. Support for ICQ and QBVR bitrate control mode, adding a
1439 quality-factor property for these modes. Support baseline profile as
1440 constrained-baseline
1444 - support for main-444 and main-12 encoding profiles.
1445 - new max-qp property that sets the maximum quantization value.
1446 - support for ICQ and QBVR bitrate control mode, adding a
1447 quality-factor property for these modes.
1448 - handle SCC profiles.
1449 - num-tile-cols and num-tile-row properties to specify the number
1451 - the low-delay-b property was deprecated and is now determined
1453 - improved profile selection through caps.
1457 - Decoder surfaces are not bound to their context any longer and can
1458 thus be created and used dynamically, removing the deadlock
1461 - Reverse playback is now fluid
1463 - Forward Region-of-Interest (ROI) metas downstream
1465 - GLTextureUploadMeta uses DMABuf when GEM is not available. Now
1466 Gallium drivers can use this meta for rendering with EGL.
1468 - vaapivp9dec: support for 4:2:2 and 4:4:4 chroma type streams
1470 - vaapih265dec: skip all pictures prior to the first I-frame. Enable
1471 passing range extension flags to the driver. Handle SCC profiles.
1473 - vaapijpegdec: support for 4:0:0, 4:1:1, 4:2:2 and 4:4:4 chroma types
1476 - vaapih264dec: handle baseline streams as constrained-baseline if
1477 possible and make it more tolerant when encountering unknown NALs
1481 - omxvideoenc: use new video encoder subframe API to push out slices
1482 as soon as they’re ready
1484 - omxh264enc, omxh265enc: negotiate subframe mode via caps. To enable
1485 it, force downstream caps to video/x-h264,alignment=nal or
1486 video/x-h265,alignment=nal.
1488 - omxh264enc: Add ref-frames property
1490 - Zynq ultrascale+ specific video encoder/decoder improvements:
1492 - GRAY8 format support
1493 - support for alternate fields interlacing mode
1494 - video encoder: look-ahead, long-term-ref, and long-term-freq
1497 GStreamer Editing Services and NLE
1499 - Added nested timelines and subproject support so that GES projects
1500 can be used as clips, potentially serializing nested projects in the
1501 main file or referencing external project files.
1503 - Implemented an OpenTimelineIO GES formatter. This means GES and
1504 GStreamer can now load and save projects in all the formats
1507 - Implemented a GESMarkerList object which allow setting timed
1508 metadata on any GES object.
1510 - Fixed audio rendering issues during clip transition by ensuring that
1511 a single segment is pushed into encoders.
1513 - The GESUriClipAsset API is now MT safe.
1515 - Added ges_meta_container_register_static_meta() to allow fixing a
1516 type for a specific metadata without actually setting a value.
1518 - The framepositioner element now handles resizing the project and
1519 keeps the same positioning when the aspect ratio is not changed .
1521 - Reworked the documentation, making it more comprehensive and much
1524 - Added APIs to retrieve natural size and framerate of a clip (for
1525 example in the case of URIClip it is the framerate/size of the
1528 - ges_container_edit() is now deprecated and GESTimelineElement gained
1529 the ges_timeline_element_edit() method so the editing API is now
1530 usable from any element in the timeline.
1532 - GESProject::loading was added so applications can be notified about
1533 when a new timeline starts loading.
1535 - Implemented the GstStream API in GESTimeline.
1537 - Added a way to add a timeoverlay inside the test source (potentially
1540 - Added APIs to convert times to frame numbers and vice versa:
1542 - ges_timeline_get_frame_time()
1544 - ges_timeline_get_frame_at()
1546 - ges_clip_asset_get_frame_time()
1548 - ges_clip_get_timeline_time_from_source_frame()
1550 Quite a few validate tests have been implemented to check the
1551 behavior for various demuxer/codec formats
1553 - Added ges_layer_set_active_for_tracks() which allows muting layers
1554 for the specified tracks
1556 - Deprecated GESImageSource and GESMultiFileSource now that we have
1557 imagesequencesrc which handles the imagesequence “protocol”
1559 - Stopped exposing ‘deinterlacing’ children properties for clip types
1560 where they do not make sense.
1562 - Added support for simple time remapping effects
1566 - Introduced the concept of “Test files” allowing to implement “all
1567 included” test cases, meaning that inside the file the following can
1570 - The application arguments
1571 - The validate configurations
1572 - The validate scenario
1574 This replaces the previous big dictionary file in
1575 gst-validate-launcher to implement specific test cases.
1577 We set several variables inside the files (as well as inside
1578 scenarios and config files) to make them relocatable.
1580 The file format has been enhanced so it is easier to read and write,
1581 for example line ending with a coma or (curly) brackets can now be
1582 used as continuation marker so you do not need to add \ at the end
1583 of lines to write a structure on several lines.
1585 - Support the imagesequence “protocol” and added integration tests for
1588 - Added action types to allow the scenario to run the Test Clock for
1589 better reproducibility of tests.
1591 - Support generating tests to check that seeking is frame accurate
1594 - Added ways to record buffers checksum (in different ways) in the
1595 validateflow module.
1597 - Added vp9 encoding tests.
1599 - Enhanced seeking action types implementation to allow support for
1602 - Output improvements:
1604 - Logs are now in markdown formats (and bat is used to dump them
1606 - File format issues in scenarios/configs/tests files are nicely
1607 reported with the line numbers now.
1609 GStreamer Python Bindings
1611 - Python 2.x is no longer supported
1613 - Support mapping buffers without any memcpy:
1615 - Added a ContextManager to make the API more pythonic
1617 with buf.map(Gst.MapFlags.READ | Gst.MapFlags.WRITE) as info:
1620 - Added high-level helper API for constructing pipelines:
1622 - Gst.Bin.make_and_add(factory_name, instance_name=None)
1623 - Gst.Element.link_many(element, ...)
1625 GStreamer C# Bindings
1627 - Bind gst_buffer_new_wrapped() manually to fix memory handling.
1629 - Fix gst_promise_new_with_change_func() where bindgen didn’t properly
1630 detect the func as a closure.
1632 - Declare GstVideoOverlayComposition and GstVideoOverlayRectangle as
1633 opaque type and subclasses of Gst.MiniObject. This changes the API
1634 but without this all usage will cause memory corruption or simply
1637 - on Windows, look for gstreamer, glib and gobject DLLs using the MSVC
1638 naming convention (i.e. gstvideo-1.0-0.dll instead of
1639 libgstvideo-1.0-0.dll).
1641 The names of these DLLs have to be hardcoded in the bindings, and
1642 most C# users will probably be using the Microsoft toolchain anyway.
1644 This means that the MSVC compiler is now required to build the
1645 bindings, MingW will no longer work out of the box.
1647 GStreamer Rust Bindings and Rust Plugins
1649 The GStreamer Rust bindings are released separately with a different
1650 release cadence that’s tied to gtk-rs, but the latest release has
1651 already been updated for the new GStreamer 1.18 API, so there’s
1652 absolutely no excuse why your next GStreamer application can’t be
1653 written in Rust anymore.
1655 gst-plugins-rs, the module containing GStreamer plugins written in Rust,
1656 has also seen lots of activity with many new elements and plugins.
1658 What follows is a list of elements and plugins available in
1659 gst-plugins-rs, so people don’t miss out on all those potentially useful
1660 elements that have no C equivalent.
1664 - audiornnoise: New element for audio denoising which implements the
1665 noise removal algorithm of the Xiph RNNoise library, in Rust
1666 - rsaudioecho: Port of the audioecho element from gst-plugins-good
1667 rsaudioloudnorm: Live audio loudness normalization element based on
1668 the FFmpeg af_loudnorm filter
1669 - claxondec: FLAC lossless audio codec decoder element based on the
1670 pure-Rust claxon implementation
1671 - csoundfilter: Audio filter that can use any filter defined via the
1672 Csound audio programming language
1673 - lewtondec: Vorbis audio decoder element based on the pure-Rust
1674 lewton implementation
1678 - cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
1679 on a pure-Rust CD+G implementation, used for example by karaoke CDs
1680 - cea608overlay: CEA-608 Closed Captions overlay element
1681 - cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
1682 subtitles) converter
1683 - tttocea608: CEA-608 Closed Captions from timed-text converter
1684 - mccenc/mccparse: MacCaption Closed Caption format encoder and parser
1685 - sccenc/sccparse: Scenarist Closed Caption format encoder and parser
1686 - dav1dec: AV1 video decoder based on the dav1d decoder implementation
1688 - rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
1689 encoder implementation
1690 - rsflvdemux: Alternative to the flvdemux FLV demuxer element from
1691 gst-plugins-good, not feature-equivalent yet
1692 - rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
1693 implementations by the image-rs project
1697 - textwrap: Element for line-wrapping timed text (e.g. subtitles) for
1698 better screen-fitting, including hyphenation support for some
1701 Rust network plugins
1703 - reqwesthttpsrc: HTTP(S) source element based on the Rust
1704 reqwest/hyper HTTP implementations and almost feature-equivalent
1705 with the main GStreamer HTTP source souphttpsrc
1706 - s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
1707 - awstranscriber: Live audio to timed text transcription element using
1708 the Amazon AWS Transcribe API
1710 Generic Rust plugins
1712 - sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
1714 - togglerecord: Recording element that allows to pause/resume
1715 recordings easily and considers keyframe boundaries
1716 - fallbackswitch/fallbacksrc: Elements for handling potentially
1717 failing (network) sources, restarting them on errors/timeout and
1718 showing a fallback stream instead
1719 - threadshare: Set of elements that provide alternatives for various
1720 existing GStreamer elements but allow to share the streaming threads
1721 between each other to reduce the number of threads
1722 - rsfilesrc/rsfilesink: File source/sink elements as replacements for
1723 the existing filesrc/filesink elements
1725 Build and Dependencies
1727 - The Autotools build system has finally been removed in favour of the
1728 Meson build system. Developers who currently use gst-uninstalled
1729 should move to gst-build.
1731 - API and plugin documentation are no longer built with gtk_doc. The
1732 gtk_doc documentation has been removed in favour of a new unified
1733 documentation module built with hotdoc (also see “Documentation
1734 improvements” section below). Distributors should use the
1735 documentation release tarball instead of trying to package hotdoc
1736 and building the documentation from scratch.
1738 - gst-plugins-bad now includes an internal copy of libusrsctp, as
1739 there are problems in usrsctp with global shared state, lack of API
1740 stability guarantees, and the absence of any kind of release
1741 process. We also can’t rely on distros shipping a version with the
1742 fixes we need. Both firefox and Chrome bundle their own copies too.
1743 It is still possible to build against an external copy of usrsctp if
1746 - nvcodec no longer needs the NVIDIA NVDEC/NVENC SDKs available at
1747 build time, only at runtime. This allows distributions to ship this
1748 plugin by default and it will just start to work when the required
1749 run-time SDK libraries are installed by the user, without users
1750 needing to build and install the plugin from source.
1752 - the gst-editing-services tarball is now named gst-editing-services
1753 for consistency (used to be gstreamer-editing-services).
1755 - the gst-validate tarball has been superseded by the gst-devtools
1756 tarball for consistency with the git module name.
1760 gst-build is a meta-module and serves primarily as our uninstalled
1761 development environment. It makes it easy to build most of GStreamer,
1762 but unlike Cerbero it only comes with a limited number of external
1763 dependencies that can be built as subprojects if they are not found on
1766 gst-build is based on Meson and replaces the old autotools
1767 gst-uninstalled script.
1769 - The ‘uninstalled’ target has been renamed to ‘devenv’
1771 - Experimental gstreamer-full library containing all built plugins and
1772 their deps when building with -Ddefault_library=static. A monolithic
1773 library is easier to distribute, and may be required in some
1774 environments. GStreamer core, GLib and GObject are always included,
1775 but external dependencies are still dynamically linked. The
1776 gst-full-libraries meson option allows adding other GStreamer
1777 libraries to the gstreamer-full build. This is an experiment for now
1778 and its behaviour or API may still change in future releases.
1780 - Add glib-networking as a subproject when glib is a subproject and
1781 load gio modules in the devenv, tls option control whether to use
1784 - git-worktree: Allow multiple worktrees for subproject branches
1786 - Guard against meson being run from inside the uninstalled devenv, as
1787 this might have unexpected consequences.
1789 - our ffmpeg and x264 meson ports have been updated to the latest
1790 stable version (you might need to update the subprojects checkout
1791 manually though, or just remove the checkouts so meson checks out
1792 the latest version again; improvements for this are pending in
1793 meson, but not merged yet).
1797 Cerbero is a meta build system used to build GStreamer plus dependencies
1798 on platforms where dependencies are not readily available, such as
1799 Windows, Android, iOS and macOS.
1801 General improvements
1803 - Recipe build steps are done in parallel wherever possible. This
1804 leads to massive improvements in overall build time.
1805 - Several recipes were ported to Meson, which improved build times
1806 - Moved from using both GnuTLS and OpenSSL to only OpenSSL
1807 - Moved from yasm to nasm for all assembly compilation
1808 - Support zsh when running the cerbero shell command
1809 - Numerous version upgrades for dependencies
1810 - Default to xz for tarball binary packages. bz2 can be selected with
1811 the --compress-method option to package.
1812 - Added boolean variant for controlling the optimization level:
1814 - Ship .pc pkgconfig files for all plugins in the binary packages
1815 - CMake and nasm will only be built by Cerbero if the system versions
1817 - The nvcodec variant was removed and the nvcodec plugin is built by
1818 default now (as it no longer requires the SDK to be installed at
1819 build time, only at runtime)
1823 - Minimum iOS SDK version bumped to 11.0
1824 - Minimum macOS SDK version bumped to 10.11
1825 - No longer need to manually add support for newer iOS SDK versions
1826 - Added Vulkan elements via MoltenVK
1827 - Build times were improved by code-signing all build tools
1828 - macOS framework ships all gstreamer libraries instead of an outdated
1830 - Ship pkg-config in the macOS framework package
1831 - fontconfig: Fix EXC_BAD_ACCESS crash on iOS ARM64
1832 - Improved App Store compatibility by setting LC_VERSION_MIN_MACOSX,
1833 fixing relocations, and improved bitcode support
1837 - MinGW-GCC toolchain was updated to 8.2. It uses the Universal CRT
1838 instead of MSVCRT which eliminates cross-CRT issues in the Visual
1840 - Require Windows 7 or newer for running binaries produced by Cerbero
1841 - Require Windows x86_64 for running Cerbero to build binary packages
1842 - Cerbero no longer uses C:/gstreamer/1.0 as a prefix when building.
1843 That prefix is reserved for use by the MSI installers.
1844 - Several recipes can now be buit with Visual Studio instead of MinGW.
1845 Ported to meson: opus, libsrtp, harfbuzz, cairo, openh264, libsoup,
1846 libusrsctp. Existing build system: libvpx, openssl.
1847 - Support building using Visual Studio for 32-bit x86. Previously we
1848 only supported building for 32-bit x86 using the MinGW toolchain.
1849 - Fixed annoying msgmerge popups in the middle of cerbero builds
1850 - Added configuration options vs_install_path and vs_install_version
1851 for specifying custom search locations for older Visual Studio
1852 versions that do not support vswhere. You can set these in
1853 ~/.cerbero/cerbero.cbc where ~ is the MSYS homedir, not your Windows
1855 - New Windows-specific plugins: d3d11, mediafoundation, wasapi2
1856 - Numerous compatibility and reliability fixes when running Cerbero on
1857 Windows, especially non-English locales
1858 - proxy-libintl now exports the same symbols as gettext, which makes
1859 it a drop-in replacement
1860 - New mapping variant for selecting the Visual Studio CRT to use:
1861 -v vscrt=<value>. Valid values are md, mdd, and auto (default). A
1862 separate prefix is used when building with either md (release) or
1863 mdd (debug), and the outputted package will have +debug in the
1864 filename. This variant is also used for selecting the correct Qt
1865 libraries (debug vs release) to use when building with -v qt5 on
1867 - Support cross-compile on Windows to Windows ARM64 and ARMv7
1868 - Support cross-compile on Windows to the Universal Windows Platform
1869 (UWP). Only the subset of plugins that can be built entirely with
1870 Visual Studio will be selected in this case. To do so, use the
1871 config/cross-uwp-universal.cbc configuration, which will build
1872 ARM64, x86, and x86_64 binaries linked to the release CRT, with
1873 optimizations enabled, and debugging turned on. You can combine this
1874 with -v vscrt=mdd to produce binaries linked to the debug CRT. You
1875 can turn off optimizations with the -v nooptimization variant.
1877 Windows MSI installer
1879 - Require Windows 7 or newer for running GStreamer
1880 - Fixed some issues with shipping of pkg-config in the Windows
1882 - Plugin PDB debug files are now shipped in the development package,
1883 not the runtime package
1884 - Ship installers for 32-bit binaries built with Visual Studio
1885 - Ship debug and release “universal” (ARM64, X86, and X86_64) tarballs
1886 built for the Universal Windows Platform
1887 - Windows MSI installers now install into separate prefixes when
1888 building with MSVC and MinGW. Previously both would be installed
1889 into C:/gstreamer/1.0/x86 or C:/gstreamer/1.0/x86_64. Now, the
1890 installation prefixes are:
1892 ----------------------------------------------------------------------------------------------------------------
1893 Target Path Build options
1894 --------------------------- ------------------------------------ -----------------------------------------------
1895 MinGW 32-bit C:/gstreamer/1.0/mingw_x86 -c config/win32.cbc
1897 MinGW 64-bit C:/gstreamer/1.0/mingw_x86_64 -c config/win64.cbc
1899 MSVC 32-bit C:/gstreamer/1.0/msvc_x86 -c config/win32.cbc -v visualstudio
1901 MSVC 64-bit C:/gstreamer/1.0/msvc_x86_64 -c config/win64.cbc -v visualstudio
1903 MSVC 32-bit (debug) C:/gstreamer/1.0/msvc-debug_x86 -c config/win32.cbc -v visualstudio,vscrt=mdd
1905 MSVC 64-bit (debug) C:/gstreamer/1.0/msvc-debug_x86_64 -c config/win64.cbc -v visualstudio,vscrt=mdd
1906 ----------------------------------------------------------------------------------------------------------------
1908 Note: UWP binary packages are tarballs, not MSI installers.
1912 - Support creating MSI installers using WiX when cross-compiling to
1914 - Support running cross-windows binaries with Wine when using the
1915 shell and runit cerbero commands
1916 - Added bash-completion support inside the cerbero shell on Linux
1917 - Require a system-wide installation of openssl on Linux
1918 - Added variant -v vaapi to build gstreamer-vaapi and the new gstva
1920 - Debian packaging was disabled because it does not work. Help in
1921 fixing this is appreciated.
1922 - Trimmed the list of packages needed for bootstrap on Linux
1926 - Updated to NDK r21
1928 - Support Qt 5.14+ binary package layout
1930 Platform-specific changes and improvements
1934 - opensles: Remove hard-coded buffer-/latency-time values and allow
1935 openslessink to handle 48kHz streams.
1937 - photography interface and camera source: Add additional settings
1938 relevant to Android such as: Exposure mode property, extra colour
1939 tone values (aqua, emboss, sketch, neon), extra scene modes
1940 (backlight, flowers, AR, HDR), and missing virtual methods for
1941 exposure mode, analog gain, lens focus, colour temperature, min &
1942 max exposure time. Add new effects and scene modes to Camera
1947 - vtdec can now output to Vulkan-backed memory for zerocopy support
1948 with the Vulkan elements.
1952 - d3d11videosink: new Direct3D11-based video sink with support for
1953 HDR10 rendering if supported.
1955 - Hardware-accelerated video decoding on Windows via DXVA2 /
1956 Direct3D11 using native Windows APIs rather than per-vendor SDKs
1957 (like MSDK for Intel or NVCODEC for NVidia). Plus modern Direct3D11
1958 integration rather than the almost 20-year old Direct3D9 from
1959 Windows XP times used in d3dvideosink. Formats supported for
1960 decoding are H.264, H.265, VP8, and VP9, and zero-copy operation
1961 should be supported in combination with the new d3d11videosink. See
1962 Seungha’s blog post “Windows DXVA2 (via Direct3D 11) Support in
1963 GStreamer 1.17” for more details.
1965 - Microsoft Media Foundation plugin for hardware-accelerated video
1966 encoding on Windows using native Windows APIs rather than per-vendor
1967 SDKs. Formats supported for encoding are H.264, H.265 and VP9. Also
1968 includes audio encoders for AAC and MP3. See Seungha’s blog post
1969 “Bringing Microsoft Media Foundation to GStreamer” for some more
1972 - new mfvideosrc video capture source element using the latest Windows
1973 APIs rather than ancient APIs used by ksvideosrc/winks. ksvideosrc
1974 should be considered deprecated going forward.
1976 - d3d11: add d3d11convert, a color space conversion and rescaling
1977 element using shaders, and introduce d3d11upload and d3d11download
1978 elements that work just like glupload and gldownload but for D3D11.
1980 - Universal Windows Platform (UWP) support, including official
1981 GStreamer binary packages for it. Check out Nirbheek’s latest blog
1982 post “GStreamer 1.18 supports the Universal Windows Platform” for
1985 - systemclock correctness and reliability fixes, and also don’t start
1986 the system clock at 0 any longer (which shouldn’t make any
1987 difference to anyone, as absolute clock time values are supposed to
1988 be meaningless in themselves, only the rate of increase matters).
1990 - toolchain specific plugin registry: the registry cache is now named
1991 differently for MSVC and MinGW toolchains/packages, which should
1992 avoid problems when switching between binaries built with a
1993 different toolchain.
1995 - new wasapi2 plugin mainly to support UWP applications. The core
1996 logic of this plugin is almost identical to existing wasapi plugin,
1997 but the main target is Windows 10 and UWP. This plugin uses WinRT
1998 APIs, so will likely not work on Windows 8 or older. Unlike the
1999 existing wasapi plugin, this plugin supports automatic stream
2000 routing (auto fallback when device was removed) and device level
2001 mute/volume control. Exclusive streaming mode is not supported,
2002 however, and loopback features are not implemented yet. It is also
2003 only possible to build this plugin with MSVC and the Windows 10 SDK,
2004 it can’t be cross-compiled with the MingW toolchain.
2006 - new dxgiscreencapsrc element which uses the Desktop Duplication API
2007 to capture the desktop screen at high speed. This is only supported
2008 on Windows 8 or later. Compared to the existing elements
2009 dxgiscreencapsrc offers much better performance, works in High DPI
2010 environments and draws an accurate mouse cursor.
2012 - d3dvideosink was downgraded to secondary rank, d3d11videosink is
2013 preferred now. Support OverlayComposition for GPU overlay
2014 compositing of subtitles and logos.
2016 - debug log output fixes, esp. with a non-UTF8 locale/codepage
2018 - speex, jack: fixed crashes on Windows caused by cross-CRT issues
2020 - gst-play-1.0 interactive keyboard controls now also work on Windows
2024 - kmssink: Add support for P010 and P016 formats
2026 - vah264dec: new experimental va plugin with an element for H.264
2027 decoding with VA-API. This novel approach, different from
2028 gstreamer-vaapi, uses the gstcodecs library for decoder state
2029 handling, which it is hoped will make for cleaner code because it
2030 uses VA-API without further layers or wrappers. Check out Víctor’s
2031 blog post “New VA-API H.264 decoder in gst-plugins-bad” for the full
2032 lowdown and the limitations of this new plugin, and how to give it a
2035 - v4l2codecs: introduce a V4L2 CODECs Accelerator. This plugin will
2036 support the new CODECs uAPI in the Linux kernel, which consists of
2037 an accelerator interface similar to DXVA, NVDEC, VDPAU and VAAPI. So
2038 far H.264 and VP8 are supported. This is used on certain embedded
2039 systems such as i.mx8m, rk3288, rk3399, Allwinner H-series SoCs.
2041 Documentation improvements
2043 - unified documentation containing tutorials, API docs, plugin docs,
2044 etc. all under one roof, shipped in form of a documentation release
2045 tarball containing both devhelp and html documentation.
2047 - all documentation is now generated using hotdoc, gtk-doc is no
2048 longer used. Distributors should use the above-mentioned
2049 documentation release tarball instead of trying to package hotdoc
2050 and building the documentation from scratch.
2052 - there is now documentation for wrapper plugins like gst-libav and
2053 frei0r, as well as tracer plugins.
2055 - for more info, check out Thibault’s “GStreamer Documentation”
2056 lightning talk from the 2019 GStreamer Conference.
2058 - new API for plugins to support the documentation system:
2060 - new GParamSpecFlag GST_PARAM_DOC_SHOW_DEFAULT to make
2061 gst-inspect-1.0 (and the documentation) show the paramspec’s
2062 default value rather than the actually set value as default
2063 - GstPadTemplate getter and setter for “documentation caps”,
2064 gst_pad_template_set_documentation_caps() and
2065 gst_pad_template_get_documentation_caps(): This can be used in
2066 elements where the caps of pad templates are dynamically
2067 generated and/or dependent on the environment, to override the
2068 caps shown in the documentation (usually to advertise the full
2069 set of possible caps).
2070 - gst_type_mark_as_plugin_api() for marking types as plugin API,
2071 used for plugin-internal types like enums, flags, pad
2072 subclasses, boxed types, and such.
2074 Possibly Breaking Changes
2076 - GstVideo: the canonical list of raw video formats (for use in caps)
2077 has been reordered, so video elements such as videotestsrc or
2078 videoconvert might negotiate to a different format now than before.
2079 The new format might be a higher-quality format or require more
2080 processing overhead, which might affect pipeline performance.
2082 - mpegtsdemux used to wrongly advertise H.264 and H.265 video
2083 elementary streams as alignment=nal. This has now been fixed and
2084 changed to alignment=none, which means an h264parse or h265parse
2085 element is now required after tsdemux for some pipelines where there
2086 wasn’t one before, e.g. in transmuxing scenarios (tsdemux ! tsmux).
2087 Pipelines without such a parser may now fail to link or error out at
2088 runtime. As parsers after demuxers and before muxers have been
2089 generally required for a long time now it is hoped that this will
2090 only affect a small number of applications or pipelines.
2092 - The Android opensles audio source and sink used to have hard-coded
2093 buffer-/latency-time values of 20ms. This is no longer needed with
2094 newer Android versions and has now been removed. This means a higher
2095 or lower value might now be negotiated by default, which can affect
2096 pipeline performance and latency.
2100 - None in particular
2104 Aaron Boxer, Adam Duskett, Adam x Nilsson, Adrian Negreanu, Akinobu
2105 Mita, Alban Browaeys, Alcaro, Alexander Lapajne, Alexandru Băluț, Alex
2106 Ashley, Alex Hoenig, Alicia Boya García, Alistair Buxton, Ali Yousuf,
2107 Ambareesh “Amby” Balaji, Amr Mahdi, Andoni Morales Alastruey, Andreas
2108 Frisch, Andre Guedes, Andrew Branson, Andrey Sazonov, Antonio Ospite,
2109 aogun, Arun Raghavan, Askar Safin, AsociTon, A. Wilcox, Axel Mårtensson,
2110 Ayush Mittal, Bastian Bouchardon, Benjamin Otte, Bilal Elmoussaoui,
2111 Brady J. Garvin, Branko Subasic, Camilo Celis Guzman, Carlos Rafael
2112 Giani, Charlie Turner, Cheng-Chang Wu, Chris Ayoup, Chris Lord,
2113 Christoph Reiter, cketti, Damian Hobson-Garcia, Daniel Klamt, Daniel
2114 Molkentin, Danny Smith, David Bender, David Gunzinger, David Ing, David
2115 Svensson Fors, David Trussel, Debarshi Ray, Derek Lesho, Devarsh
2116 Thakkar, dhilshad, Dimitrios Katsaros, Dmitriy Purgin, Dmitry Shusharin,
2117 Dominique Leuenberger, Dong Il Park, Doug Nazar, dudengke, Dylan McCall,
2118 Dylan Yip, Ederson de Souza, Edward Hervey, Eero Nurkkala, Eike Hein,
2119 ekwange, Eric Marks, Fabian Greffrath, Fabian Orccon, Fabio D’Urso,
2120 Fabrice Bellet, Fabrice Fontaine, Fanchao L, Felix Yan, Fernando
2121 Herrrera, Francisco Javier Velázquez-García, Freyr, Fuwei Tang, Gaurav
2122 Kalra, George Kiagiadakis, Georgii Staroselskii, Georg Lippitsch, Georg
2123 Ottinger, gla, Göran Jönsson, Gordon Hart, Gregor Boirie, Guillaume
2124 Desmottes, Guillermo Rodríguez, Haakon Sporsheim, Haihao Xiang, Haihua
2125 Hu, Havard Graff, Håvard Graff, Heinrich Kruger, He Junyan, Henry
2126 Wilkes, Hosang Lee, Hou Qi, Hu Qian, Hyunjun Ko, ibauer, Ignacio Casal
2127 Quinteiro, Ilya Smelykh, Jake Barnes, Jakub Adam, James Cowgill, James
2128 Westman, Jan Alexander Steffens, Jan Schmidt, Jan Tojnar, Javier Celaya,
2129 Jeffy Chen, Jennifer Berringer, Jens Göpfert, Jérôme Laheurte, Jim
2130 Mason, Jimmy Ohn, J. Kim, Joakim Johansson, Jochen Henneberg, Johan
2131 Bjäreholt, Johan Sternerup, John Bassett, Jonas Holmberg, Jonas Larsson,
2132 Jonathan Matthew, Jordan Petridis, Jose Antonio Santos Cadenas, Josep
2133 Torra, Jose Quaresma, Josh Matthews, Joshua M. Doe, Juan Navarro,
2134 Juergen Werner, Julian Bouzas, Julien Isorce, Jun-ichi OKADA, Justin
2135 Chadwell, Justin Kim, Keri Henare, Kevin JOLY, Kevin King, Kevin Song,
2136 Knut Andre Tidemann, Kristofer Björkström, krivoguzovVlad, Kyrylo
2137 Polezhaiev, Lenny Jorissen, Linus Svensson, Loïc Le Page, Loïc Minier,
2138 Lucas Stach, Ludvig Rappe, Luka Blaskovic, luke.lin, Luke Yelavich,
2139 Marcin Kolny, Marc Leeman, Marco Felsch, Marcos Kintschner, Marek
2140 Olejnik, Mark Nauwelaerts, Markus Ebner, Martin Liska, Martin Theriault,
2141 Mart Raudsepp, Matej Knopp, Mathieu Duponchelle, Mats Lindestam, Matthew
2142 Read, Matthew Waters, Matus Gajdos, Maxim Paymushkin, Maxim P.
2143 Dementiev, Michael Bunk, Michael Gruner, Michael Olbrich, Miguel París
2144 Díaz, Mikhail Fludkov, Milian Wolff, Millan Castro, Muhammet Ilendemli,
2145 Nacho García, Nayana Topolsky, Nian Yan, Nicola Murino, Nicolas
2146 Dufresne, Nicolas Pernas Maradei, Niels De Graef, Nikita Bobkov, Niklas
2147 Hambüchen, Nirbheek Chauhan, Ognyan Tonchev, okuoku, Oleksandr
2148 Kvl,Olivier Crête, Ondřej Hruška, Pablo Marcos Oltra, Patricia Muscalu,
2149 Peter Seiderer, Peter Workman, Philippe Normand, Philippe Renon, Philipp
2150 Zabel, Pieter Willem Jordaan, Piotr Drąg, Ralf Sippl, Randy Li, Rasmus
2151 Thomsen, Ratchanan Srirattanamet, Raul Tambre, Ray Tiley, Richard
2152 Kreckel, Rico Tzschichholz, R Kh, Robert Rosengren, Robert Tiemann,
2153 Roman Shpuntov, Roman Sivriver, Ruben Gonzalez, Rubén Gonzalez,
2154 rubenrua, Ryan Huang, Sam Gigliotti, Santiago Carot-Nemesio, Saunier
2155 Thibault, Scott Kanowitz, Sebastian Dröge, Sebastiano Barrera, Seppo
2156 Yli-Olli, Sergey Nazaryev, Seungha Yang, Shinya Saito, Silvio
2157 Lazzeretti, Simon Arnling Bååth, Siwon Kang, sohwan.park, Song Bing,
2158 Soohyun Lee, Srimanta Panda, Stefano Buora, Stefan Sauer, Stéphane
2159 Cerveau, Stian Selnes, Sumaid Syed, Swayamjeet, Thiago Santos, Thibault
2160 Saunier, Thomas Bluemel, Thomas Coldrick, Thor Andreassen, Tim-Philipp
2161 Müller, Ting-Wei Lan, Tobias Ronge, trilene, Tulio Beloqui, U. Artie
2162 Eoff, VaL Doroshchuk, Varunkumar Allagadapa, Vedang Patel, Veerabadhran
2163 G, Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Wangfei, Wang
2164 Zhanjun, Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier
2165 Claessens, Xidorn Quan, Xu Guangxin, Yan Wang, Yatin Maan, Yeongjin
2166 Jeong, yychao, Zebediah Figura, Zeeshan Ali, Zeid Bekli, Zhiyuan Sraf,
2169 … and many others who have contributed bug reports, translations, sent
2170 suggestions or helped testing.
2174 After the 1.18.0 release there will be several 1.18.x bug-fix releases
2175 which will contain bug fixes which have been deemed suitable for a
2176 stable branch, but no new features or intrusive changes will be added to
2177 a bug-fix release usually. The 1.18.x bug-fix releases will be made from
2178 the git 1.18 branch, which will be a stable branch.
2182 1.18.0 was released on 7 September 2020.
2186 Our next major feature release will be 1.20, and 1.19 will be the
2187 unstable development version leading up to the stable 1.20 release. The
2188 development of 1.19/1.20 will happen in the git master branch.
2190 The plan for the 1.20 development cycle is yet to be confirmed, but it
2191 is now expected that feature freeze will take place some time in January
2192 2021, with the first 1.20 stable release around February/March 2021.
2194 1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
2195 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
2197 ------------------------------------------------------------------------
2199 These release notes have been prepared by Tim-Philipp Müller with
2200 contributions from Mathieu Duponchelle, Matthew Waters, Nirbheek
2201 Chauhan, Sebastian Dröge, Thibault Saunier, and Víctor Manuel Jáquez
2204 License: CC BY-SA 4.0