3 GSTREAMER 1.14 RELEASE NOTES
6 GStreamer 1.14.0 has not been released yet. It is scheduled for release
9 There are unstable pre-releases available for testing and development
10 purposes. The latest pre-release is version 1.13.91 (rc2) and was
11 released on 12 March 2018.
13 See https://gstreamer.freedesktop.org/releases/1.14/ for the latest
14 version of this document.
16 _Last updated: Monday 12 March 2018, 18:00 UTC (log)_
21 The GStreamer team is proud to announce a new major feature release in
22 the stable 1.x API series of your favourite cross-platform multimedia
25 As always, this release is again packed with new features, bug fixes and
31 - WebRTC support: real-time audio/video streaming to and from web
34 - Experimental support for the next-gen royalty-free AV1 video codec
36 - Video4Linux: encoding support, stable element names and faster
39 - Support for the Secure Reliable Transport (SRT) video streaming
42 - RTP Forward Error Correction (FEC) support (ULPFEC)
44 - RTSP 2.0 support in rtspsrc and gst-rtsp-server
46 - ONVIF audio backchannel support in gst-rtsp-server and rtspsrc
48 - playbin3 gapless playback and pre-buffering support
50 - tee, our stream splitter/duplication element, now does allocation
51 query aggregation which is important for efficient data handling and
54 - QuickTime muxer has a new prefill recording mode that allows file
55 import in Adobe Premiere and FinalCut Pro while the file is still
58 - rtpjitterbuffer fast-start mode and timestamp offset adjustment
61 - souphttpsrc connection sharing, which allows for connection reuse,
64 - nvdec: new plugin for hardware-accelerated video decoding using the
67 - Adaptive DASH trick play support
69 - ipcpipeline: new plugin that allows splitting a pipeline across
72 - Major gobject-introspection annotation improvements for large parts
76 Major new features and changes
80 There is now basic support for WebRTC in GStreamer in form of a new
81 webrtcbin element and a webrtc support library. This allows you to build
82 applications that set up connections with and stream to and from other
83 WebRTC peers, whilst leveraging all of the usual GStreamer features such
84 as hardware-accelerated encoding and decoding, OpenGL integration,
85 zero-copy and embedded platform support. And it's easy to build and
86 integrate into your application too!
88 WebRTC enables real-time communication of audio, video and data with web
89 browsers and native apps, and it is supported or about to be support by
90 recent versions of all major browsers and operating systems.
92 GStreamer's new WebRTC implementation uses libnice for Interactive
93 Connectivity Establishment (ICE) to figure out the best way to
94 communicate with other peers, punch holes into firewalls, and traverse
97 The implementation is not complete, but all the basics are there, and
98 the code sticks fairly close to the PeerConnection API. Where
99 functionality is missing it should be fairly obvious where it needs to
102 For more details, background and example code, check out Nirbheek's blog
103 post _GStreamer has grown a WebRTC implementation_, as well as Matthew's
104 _GStreamer WebRTC_ talk from last year's GStreamer Conference in Prague.
108 - webrtcbin handles the transport aspects of webrtc connections (see
109 WebRTC section above for more details)
111 - New srtsink and srtsrc elements for the Secure Reliable Transport
112 (SRT) video streaming protocol, which aims to be easy to use whilst
113 striking a new balance between reliability and latency for low
114 latency video streaming use cases. More details about SRT and the
115 implementation in GStreamer in Olivier's blog post _SRT in
118 - av1enc and av1dec elements providing experimental support for the
119 next-generation royalty free video AV1 codec, alongside Matroska
122 - hlssink2 is a rewrite of the existing hlssink element, but unlike
123 its predecessor hlssink2 takes elementary streams as input and
124 handles the muxing to MPEG-TS internally. It also leverages
125 splitmuxsink internally to do the splitting. This allows more
126 control over the chunk splitting and sizing process and relies less
127 on the co-operation of an upstream muxer. Different to the old
128 hlssink it also works with pre-encoded streams and does not require
129 close interaction with an upstream encoder element.
131 - audiolatency is a new element for measuring audio latency end-to-end
132 and is useful to measure roundtrip latency including both the
133 GStreamer-internal latency as well as latency added by external
134 components or circuits.
136 - 'fakevideosink is basically a null sink for video data and very
137 similar to fakesink, only that it will answer allocation queries and
138 will advertise support for various video-specific things such
139 GstVideoMeta, GstVideoCropMeta and GstVideoOverlayCompositionMeta
140 like a normal video sink would. This is useful for throughput
141 testing and testing the zero-copy path when creating a new pipeline.
143 - ipcpipeline: new plugin that allows the splitting of a pipeline into
144 multiple processes. Usually a GStreamer pipeline runs in a single
145 process and parallelism is achieved by distributing workloads using
146 multiple threads. This means that all elements in the pipeline have
147 access to all the other elements' memory space however, including
148 that of any libraries used. For security reasons one might therefore
149 want to put sensitive parts of a pipeline such as DRM and decryption
150 handling into a separate process to isolate it from the rest of the
151 pipeline. This can now be achieved with the new ipcpipeline plugin.
152 Check out George's blog post _ipcpipeline: Splitting a GStreamer
153 pipeline into multiple processes_ or his lightning talk from last
154 year's GStreamer Conference in Prague for all the gory details.
157 - proxysink and proxysrc are new elements to pass data from one
158 pipeline to another within the same process, very similar to the
159 existing inter elements, but not limited to raw audio and video
160 data. These new proxy elements are very special in how they work
161 under the hood, which makes them extremely powerful, but also
162 dangerous if not used with care. The reason for this is that it's
163 not just data that's passed from sink to src, but these elements
164 basically establish a two-way wormhole that passes through queries
165 and events in both directions, which means caps negotiation and
166 allocation query driven zero-copy can work through this wormhole.
167 There are scheduling considerations as well: proxysink forwards
168 everything into the proxysrc pipeline directly from the proxysink
169 streaming thread. There is a queue element inside proxysrc to
170 decouple the source thread from the sink thread, but that queue is
171 not unlimited, so it is entirely possible that the proxysink
172 pipeline thread gets stuck in the proxysrc pipeline, e.g. when that
173 pipeline is paused or stops consuming data for some other reason.
174 This means that one should always shut down down the proxysrc
175 pipeline before shutting down the proxysink pipeline, for example.
176 Or at least take care when shutting down pipelines. Usually this is
177 not a problem though, especially not in live pipelines. For more
178 information see Nirbheek's blog post _Decoupling GStreamer
179 Pipelines_, and also check out out the new ipcpipeline plugin for
180 sending data from one process to another process (see above).
182 - lcms is a new LCMS-based ICC color profile correction element
184 - openmptdec is a new OpenMPT-based decoder for module music formats,
185 such as S3M, MOD, XM, IT. It is built on top of a new
186 GstNonstreamAudioDecoder base class which aims to unify handling of
187 files which do not operate a streaming model. The wildmidi plugin
188 has also been revived and is also implemented on top of this new
191 - The curl plugin has gained a new curlhttpsrc element, which is
192 useful for testing HTTP protocol version 2.0 amongst other things.
196 - GstPromise provides future/promise-like functionality. This is used
197 in the GStreamer WebRTC implementation.
200 - GstReferenceTimestampMeta is a new meta that allows you to attach
201 additional reference timestamps to a buffer. These timestamps don't
202 have to relate to the pipeline clock in any way. Examples of this
203 could be an NTP timestamp when the media was captured, a frame
204 counter on the capture side or the (local) UNIX timestamp when the
205 media was captured. The decklink elements make use of this.
208 - GstVideoRegionOfInterestMeta: it's now possible to attach generic
209 free-form element-specific parameters to a region of interest meta,
210 for example to tell a downstream encoder to use certain codec
211 parameters for a certain region.
214 - gst_bus_get_pollfd can be used to obtain a file descriptor for the
215 bus that can be poll()-ed on for new messages. This is useful for
216 integration with non-GLib event loops.
219 - gst_get_main_executable_path() can be used by wrapper plugins that
220 need to find things in the directory where the application
221 executable is located. In the same vein,
222 GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_RELATIVE_TO_EXE can be used to
223 signal that plugin dependency paths are relative to the main
226 - pad templates can be told about the GType of the pad subclass of the
227 pad via newly-added GstPadTemplate API API or the
228 gst_element_class_add_static_pad_template_with_gtype() convenience
229 function. gst-inspect-1.0 will use this information to print pad
233 - new convenience functions to iterate over element pads without using
234 the GstIterator API: gst_element_foreach_pad(),
235 gst_element_foreach_src_pad(), and gst_element_foreach_sink_pad().
238 - GstBaseSrc and appsrc have gained support for buffer lists:
239 GstBaseSrc subclasses can use gst_base_src_submit_buffer_list(), and
240 applications can use gst_app_src_push_buffer_list() to push a buffer
244 - The GstHarness unit test harness has a couple of new convenience
245 functions to retrieve all pending data in the harness in form of a
246 single chunk of memory.
249 - GstAudioStreamAlign is a new helper object for audio elements that
250 handles discontinuity detection and sample alignment. It will align
251 samples after the previous buffer's samples, but keep track of the
252 divergence between buffer timestamps and sample position (jitter).
253 If it exceeds a configurable threshold the alignment will be reset.
254 This simply factors out code that was duplicated in a number of
255 elements into a common helper API.
258 - The GstVideoEncoder base class implements Quality of Service (QoS)
259 now. This is disabled by default and must be opted in by setting the
260 "qos" property, which will make the base class gather statistics
261 about the real-time performance of the pipeline from downstream
262 elements (usually sinks that sync the pipeline clock). Subclasses
263 can then make use of this by checking whether input frames are late
264 already using gst_video_encoder_get_max_encode_time() If late, they
265 can just drop them and skip encoding in the hope that the pipeline
269 - The GstVideoOverlay interface gained a few helper functions for
270 installing and handling a "render-rectangle" property on elements
271 that implement this interface, so that this functionality can also
272 be used from the command line for testing and debugging purposes.
273 The property wasn't added to the interface itself as that would
274 require all implementors to provide it which would not be
275 backwards-compatible.
278 - A new base class, GstNonstreamAudioDecoder for non-stream audio
279 decoders was added to gst-plugins-bad. This base-class is meant to
280 be used for audio decoders that require the whole stream to be
281 loaded first before decoding can start. Examples of this are module
282 formats (MOD/S3M/XM/IT/etc), C64 SID tunes, video console music
283 files (GYM/VGM/etc), MIDI files and others. The new openmptdec
284 element is based on this.
287 - Full list of API new in 1.14:
288 - GStreamer core API new in 1.14
289 - GStreamer base library API new in 1.14
290 - gst-plugins-base libraries API new in 1.14
291 - gst-plugins-bad: no list, mostly GstWebRTC library and new
292 non-stream audio decoder base class.
294 New RTP features and improvements
296 - rtpulpfecenc and rtpulpfecdec are new elements that implement
297 Generic Forward Error Correction (FEC) using Uneven Level Protection
298 (ULP) as described in RFC 5109. This can be used to protect against
299 certain types of (non-bursty) packet loss, and important packets
300 such as those containing codec configuration data or key frames can
301 be protected with higher redundancy. Equally, packets that are not
302 particularly important can be given low priority or not be protected
303 at all. If packets are lost, the receiver can then hopefully restore
304 the lost packet(s) from the surrounding packets which were received.
305 This is an alternative to, or rather complementary to, dealing with
306 packet loss using _retransmission (rtx)_. GStreamer has had
307 retransmission support for a long time, but Forward Error Correction
308 allows for different trade-offs: The advantage of Forward Error
309 Correction is that it doesn't add latency, whereas retransmission
310 requires at least one more roundtrip to request and hopefully
311 receive lost packets; Forward Error Correction increases the
312 required bandwidth however, even in situations where there is no
313 packet loss at all, so one will typically want to fine-tune the
314 overhead and mechanisms used based on the characteristics of the
317 - New _Redundant Audio Data (RED)_ encoders and decoders for RTP as
318 per RFC 2198 are also provided (rtpredenc and rtpreddec), mostly for
319 chrome webrtc compatibility, as chrome will wrap ULPFEC-protected
320 streams in RED packets, and such streams need to be wrapped and
321 unwrapped in order to use ULPFEC with chrome.
324 - a few new buffer flags for FEC support:
325 GST_BUFFER_FLAG_NON_DROPPABLE can be used to mark important buffers,
326 e.g. to flag RTP packets carrying keyframes or codec setup data for
327 RTP Forward Error Correction purposes, or to prevent still video
328 frames from being dropped by elements due to QoS. There already is a
329 GST_BUFFER_FLAG_DROPPABLE. GST_RTP_BUFFER_FLAG_REDUNDANT is used to
330 signal internally that a packet represents a redundant RTP packet
331 and used in rtpstorage to hold back the packet and use it only for
332 recovery from packet loss. Further work is still needed in
333 payloaders to make use of these.
335 - rtpbin now has an option for increasing timestamp offsets gradually:
336 Instant large changes to the internal ts_offset may cause timestamps
337 to move backwards and also cause visible glitches in media playback.
338 The new "max-ts-offset-adjustment" and "max-ts-offset" properties
339 let the application control the rate to apply changes to ts_offset.
340 There have also been some EOS/BYE handling improvements in rtpbin.
342 - rtpjitterbuffer has a new fast start mode: in many scenarios the
343 jitter buffer will have to wait for the full configured latency
344 before it can start outputting packets. The reason for that is that
345 it often can't know what the sequence number of the first expected
346 RTP packet is, so it can't know whether a packet earlier than the
347 earliest packet received will still arrive in future. This behaviour
348 can now be bypassed by setting the "faststart-min-packets" property
349 to the number of consecutive packets needed to start, and the jitter
350 buffer will start output packets as soon as it has N consecutive
351 packets queued internally. This is particularly useful to get a
352 first video frame decoded and rendered as quickly as possible.
354 - rtpL8pay and rtpL8depay provide RTP payloading and depayloading for
359 - playbin3 has gained support or gapless playback via the
360 "about-to-finish" signal where users can set the uri for the next
361 item to play. For non-live streams this will be emitted as soon as
362 the first uri has finished downloading, so with sufficiently large
363 buffers it is now possible to pre-buffer the next item well ahead of
364 time (unlike playbin where there would not be a lot of time between
365 "about-to-finish" emission and the end of the stream). If the stream
366 format of the next stream is the same as that of the previous
367 stream, the data will be concatenated via the concat element.
368 Whether this will result in true gaplessness depends on the
369 container format and codecs used, there might still be codec-related
370 gaps between streams with some codecs.
372 - tee now does allocation query aggregation, which is important for
373 zero-copy and efficient data handling, especially for video. Those
374 who want to drop allocation queries on purpose can use the identity
375 element's new "drop-allocation" property for that instead.
377 - audioconvert now has a "mix-matrix" property, which obsoletes the
378 audiomixmatrix element. There's also mix matrix support in the audio
379 conversion and channel mixing API.
381 - x264enc: new "insert-vui" property to disable VUI (Video Usability
382 Information) parameter insertion into the stream, which allows
383 creation of streams that are compatible with certain legacy hardware
384 decoders that will refuse to decode in certain combinations of
385 resolution and VUI parameters; the max. allowed number of B-frames
386 was also increased from 4 to 16.
388 - dvdlpcmdec: has gained support for Blu-Ray audio LPCM.
390 - appsrc has gained support for buffer lists (see above) and also seen
391 some other performance improvements.
393 - flvmux has been ported to the GstAggregator base class which means
394 it can work in defined-latency mode with live input sources and
395 continue streaming if one of the inputs stops producing data.
397 - jpegenc has gained a "snapshot" property just like pngenc to make it
398 easier to just output a single encoded frame.
400 - jpegdec will now handle interlaced MJPEG streams properly and also
401 handle frames without an End of Image marker better.
403 - v4l2: There are now video encoders for VP8, VP9, MPEG4, and H263.
404 The v4l2 video decoder handles dynamic resolution changes, and the
405 video4linux device provider now does much faster device probing. The
406 plugin also no longer uses the libv4l2 library by default, as it has
407 prevented a lot of interesting use cases like CREATE_BUFS, DMABuf,
408 usage of TRY_FMT. As the libv4l2 library is totally inactive and not
409 really maintained, we decided to disable it. This might affect a
410 small number of cheap/old webcams with custom vendor formats for
411 which we do not provide conversion in GStreamer. It is possible to
412 re-enable support for libv4l2 at run-time however, by setting the
413 environment variable GST_V4L2_USE_LIBV4L2=1.
415 - rtspsrc now has support for RTSP protocol version 2.0 as well as
416 ONVIF audio backchannels (see below for more details). It also
417 sports a new ["accept-certificate"] signal for "manually" checking a
418 TLS certificate for validity. It now also prints RTSP/SDP messages
419 to the gstreamer debug log instead of stdout.
421 - shout2send now uses non-blocking I/O and has a configurable network
424 - splitmuxsink has gained a "split-now" action signal and new
425 "alignment-threshold" and "use-robust-muxing" properties. If robust
426 muxing is enabled, it will check and set the muxer's reserved space
427 properties if present. This is primarily for use with mp4mux's
430 - qtmux has a new _prefill recording mode_ which sets up a moov header
431 with the correct sample positions beforehand, which then allows
432 software like Adobe Premiere and FinalCut Pro to import the files
433 while they are still being written to. This only works with constant
434 framerate I-frame only streams, and for now only support for ProRes
435 video and raw audio is implemented but adding new codecs is just a
436 matter of defining appropriate maximum frame sizes.
438 - qtmux also supports writing of svmi atoms with stereoscopic video
439 information now. Trak timescales can be configured on a per-stream
440 basis using the "trak-timescale" property on the sink pads. Various
441 new formats can be muxed: MPEG layer 1 and 2, AC3 and Opus, as well
444 - souphttpsrc now does connection sharing by default, shares its
445 SoupSession with other elements in the same pipeline via a
446 GstContext if possible (session-wide settings are all the defaults).
447 This allows for connection reuse, cookie sharing, etc. Applications
448 can also force a context to use. In other news, HTTP headers
449 received from the server are posted as element messages on the bus
450 now for easier diagnostics, and it's also possible now to use other
451 types of proxy servers such as SOCKS4 or SOCKS5 proxies, support for
452 which is implemented directly in gio. Before only HTTP proxies were
455 - qtmux, mp4mux and matroskamux will now refuse caps changes of input
456 streams at runtime. This isn't really supported with these
457 containers (or would have to be implemented differently with a
458 considerable effort) and doesn't produce valid and spec-compliant
459 files that will play everywhere. So if you can't guarantee that the
460 input caps won't change, use a container format that does support on
461 the fly caps changes for a stream such as MPEG-TS or use
462 splitmuxsink which can start a new file when the caps change. What
463 would happen before is that e.g. rtph264depay or rtph265depay would
464 simply send new SPS/PPS inband even for AVC format, which would then
465 get muxed into the container as if nothing changed. Some decoders
466 will handle this just fine, but that's often more luck than by
467 design. In any case, it's not right, so we disallow it now.
469 - matroskamux had Table of Content (TOC) support now (chapters etc.)
470 and matroskademux TOC support has been improved. matroskademux has
471 also seen seeking improvements searching for the right cluster and
474 - videocrop now uses GstVideoCropMeta if downstream supports it, which
475 means cropping can be handled more efficiently without any copying.
477 - compositor now has support for _crossfade blending_, which can be
478 used via the new "crossfade-ratio" property on the sink pads.
480 - The avwait element has a new "end-timecode" property and posts
481 "avwait-status" element messages now whenever avwait starts or stops
482 passing through data (e.g. because target-timecode and end-timecode
483 respectively have been reached).
486 - h265parse and h265parse will try harder to make upstream output the
487 same caps as downstream requires or prefers, thus avoiding
488 unnecessary conversion. The parsers also expose chroma format and
489 bit depth in the caps now.
491 - The dtls elements now longer rely on or require the application to
492 run a GLib main loop that iterates the default main context
493 (GStreamer plugins should never rely on the application running a
496 - openh264enc allows to change the encoding bitrate dynamically at
499 - nvdec is a new plugin for hardware-accelerated video decoding using
500 the NVIDIA NVDEC API (which replaces the old VDPAU API which is no
501 longer supported by NVIDIA)
503 - The NVIDIA NVENC hardware-accelerated video encoders now support
504 dynamic bitrate and preset reconfiguration and support the I420
505 4:2:0 video format. It's also possible to configure the gop size via
506 the new "gop-size" property.
508 - The MPEG-TS muxer and demuxer (tsmux, tsdemux) now have support for
511 - openjpegdec and jpeg2000parse support 2-component images now (gray
512 with alpha), and jpeg2000parse has gained limited support for
513 conversion between JPEG2000 stream-formats. (JP2, J2C, JPC) and also
514 extracts more details such as colorimetry, interlace-mode,
515 field-order, multiview-mode and chroma siting.
517 - The decklink plugin for Blackmagic capture and playback cards have
518 seen numerous improvements:
520 - decklinkaudiosrc and decklinkvideosrc now put hardware reference
521 timestamp on buffers in form of GstReferenceTimestampMetas.
522 This can be useful to know on multi-channel cards which frames from
523 different channels were captured at the same time.
525 - decklinkvideosink has gained support for Decklink hardware keying
526 with two new properties ("keyer-mode" and "keyer-level") to control
527 the built-in hardware keyer of Decklink cards.
529 - decklinkaudiosink has been re-implemented around GstBaseSink instead
530 of the GstAudioBaseSink base class, since the Decklink APIs don't
531 fit very well with the GstAudioBaseSink APIs, which used to cause
532 various problems due to inaccuracies in the clock calculations.
533 Problems were audio drop-outs and A/V sync going wrong after
536 - support for more than 16 devices, without any artificial limit
538 - work continued on the msdk plugin for Intel's Media SDK which
539 enables hardware-accelerated video encoding and decoding on Intel
540 graphics hardware on Windows or Linux. More tuning options were
541 added, and more pixel formats and video codecs are supported now.
542 The encoder now also handles force-key-unit events and can insert
543 frame-packing SEIs for side-by-side and top-bottom stereoscopic 3D
546 - dashdemux can now do adaptive trick play of certain types of DASH
547 streams, meaning it can do fast-forward/fast-rewind of normal (non-I
548 frame only) streams even at high speeds without saturating network
549 bandwidth or exceeding decoder capabilities. It will keep statistics
550 and skip keyframes or fragments as needed. See Sebastian's blog post
551 _DASH trick-mode playback in GStreamer_ for more details. It also
552 supports webvtt subtitle streams now and has seen improvements when
553 seeking in live streams.
556 - kmssink has seen lots of fixes and improvements in this cycle,
559 - Raspberry Pi (vc4) and Xilinx DRM driver support
561 - new "render-rectangle" property that can be used from the command
562 line as well as "display-width" and "display-height", and
563 "can-scale" properties
565 - GstVideoCropMeta support
567 Plugin and library moves
569 MPEG-1 audio (mp1, mp2, mp3) decoders and encoders moved to -good
571 Following the expiration of the last remaining mp3 patents in most
572 jurisdictions, and the termination of the mp3 licensing program, as well
573 as the decision by certain distros to officially start shipping full mp3
574 decoding and encoding support, these plugins should now no longer be
575 problematic for most distributors and have therefore been moved from
576 -ugly and -bad to gst-plugins-good. Distributors can still disable these
579 In particular these are:
581 - mpg123audiodec: an mp1/mp2/mp3 audio decoder using libmpg123
582 - lamemp3enc: an mp3 encoder using LAME
583 - twolamemp2enc: an mp2 encoder using TwoLAME
585 GstAggregator moved from -bad to core
587 GstAggregator has been moved from gst-plugins-bad to the base library in
588 GStreamer and is now stable API.
590 GstAggregator is a new base class for mixers and muxers that have to
591 handle multiple input pads and aggregate streams into one output stream.
592 It improves upon the existing GstCollectPads API in that it is a proper
593 base class which was also designed with live streaming in mind.
594 GstAggregator subclasses will operate in a mode with defined latency if
595 any of the inputs are live streams. This ensures that the pipeline won't
596 stall if any of the inputs stop producing data, and that the configured
597 maximum latency is never exceeded.
599 GstAudioAggregator, audiomixer and audiointerleave moved from -bad to -base
601 GstAudioAggregator is a new base class for raw audio mixers and muxers
602 and is based on GstAggregator (see above). It provides defined-latency
603 mixing of raw audio inputs and ensures that the pipeline won't stall
604 even if one of the input streams stops producing data.
606 As part of the move to stabilise the API there were some last-minute API
607 changes and clean-ups, but those should mostly affect internal elements.
609 It is used by the audiomixer element, which is a replacement for
610 'adder', which did not handle live inputs very well and did not align
611 input streams according to running time. audiomixer should behave much
612 better in that respect and generally behave as one would expected in
615 Similarly, audiointerleave replaces the 'interleave' element which did
616 not handle live inputs or non-aligned inputs very robustly.
618 GstAudioAggregator and its subclases have gained support for input
619 format conversion, which does not include sample rate conversion though
620 as that would add additional latency. Furthermore, GAP events are now
623 We hope to move the video equivalents (GstVideoAggregator and
624 compositor) to -base in the next cycle, i.e. for 1.16.
626 GStreamer OpenGL integration library and plugin moved from -bad to -base
628 The GStreamer OpenGL integration library and opengl plugin have moved
629 from gst-plugins-bad to -base and are now part of the stable API canon.
630 Not all OpenGL elements have been moved; a few had to be left behind in
631 gst-plugins-bad in the new openglmixers plugin, because they depend on
632 the GstVideoAggregator base class which we were not able to move in this
633 cycle. We hope to reunite these elements with the rest of their family
636 This is quite a milestone, thanks to everyone who worked to make this
639 Qt QML and GTK plugins moved from -bad to -good
641 The Qt QML-based qmlgl plugin has moved to -good and provides a
642 qmlglsink video sink element as well as a qmlglsrc element. qmlglsink
643 renders video into a QQuickItem, and qmlglsrc captures a window from a
644 QML view and feeds it as video into a pipeline for further processing.
645 Both elements leverage GStreamer's OpenGL integration. In addition to
646 the move to -good the following features were added:
648 - A proxy object is now used for thread-safe access to the QML widget
649 which prevents crashes in corner case scenarios: QML can destroy the
650 video widget at any time, so without this we might be left with a
653 - EGL is now supported with the X11 backend, which works e.g. on
656 The GTK+ plugin has also moved from -bad to -good. It includes gtksink
657 and gtkglsink which both render video into a GtkWidget. gtksink uses
658 Cairo for rendering the video, which will work everywhere in all
659 scenarios but involves an extra memory copy, whereas gtkglsink fully
660 leverages GStreamer's OpenGL integration, but might not work properly in
661 all scenarios, e.g. where the OpenGL driver does not properly support
662 multiple sharing contexts in different threads; on Linux Nouveau is
663 known to be broken in this respect, whilst NVIDIA's proprietary drivers
664 and most other drivers generally work fine, and the experience with
665 Intel's driver seems to be fixed; some proprietary embedded Linux
666 drivers don't work; macOS works).
668 GstPhysMemoryAllocator interface moved from -bad to -base
670 GstPhysMemoryAllocator is a marker interface for allocators with
671 physical address backed memory.
675 - the sunaudio plugin was removed, since it couldn't ever have been
676 built or used with GStreamer 1.0, but no one even noticed in all
679 - the schroedinger-based Dirac encoder/decoder plugin has been
680 removed, as there is no longer any upstream or anyone else
681 maintaining it. Seeing that it's quite a fringe codec it seemed best
686 - some MPEG video parser API in the API unstable codecutils library in
687 gst-plugins-bad was removed after having been deprecated for 5
691 Miscellaneous changes
693 - The video support library has gained support for a few new pixel
695 - NV16_10LE32: 10-bit variant of NV16, packed into 32bit words (plus 2
697 - NV12_10LE32: 10-bit variant of NV12, packed into 32bit words (plus 2
699 - GRAY10_LE32: 10-bit grayscale, packed in 32bit words (plus 2 bits
702 - decodebin, playbin and GstDiscoverer have seen stability
703 improvements in corner cases such as shutdown while still starting
704 up or shutdown in error cases (hat tip to the oss-fuzz project).
706 - floating reference handling was inconsistent and has been cleaned up
707 across the board, including annotations. This solves various
708 long-standing memory leaks in language bindings, which e.g. often
709 caused elements and pads to be leaked.
711 - major gobject-introspection annotation improvements for large parts
712 of the library API, including nullability of return types and
713 function parameters, correct types (e.g. strings vs. filenames),
714 ownership transfer, array length parameters, etc. This allows to use
715 bigger parts of the GStreamer API to be safely used from dynamic
716 language bindings (e.g. Python, Javascript) and allows static
717 bindings (e.g. C#, Rust, Vala) to autogenerate more API bindings
718 without manual intervention.
722 - The GStreamer OpenGL integration library has moved to
723 gst-plugins-base and is now part of our stable API.
725 - new MESA3D GBM BACKEND. On devices with working libdrm support, it
726 is possible to use Mesa3D's GBM library to set up an EGL context
727 directly on top of KMS. This makes it possible to use the GStreamer
728 OpenGL elements without a windowing system if a libdrm- and
729 Mesa3D-supported GPU is present.
731 - Prefer wayland display over X11: As most Wayland compositors support
732 XWayland, the X11 backend would get selected.
734 - gldownload can export dmabufs now, and glupload will advertise
735 dmabuf as caps feature.
738 Tracing framework and debugging improvements
740 - NEW MEMORY RINGBUFFER BASED DEBUG LOGGER, useful for long-running
741 applications or to retrieve diagnostics when encountering an error.
742 The GStreamer debug logging system provides in-depth debug logging
743 about what is going on inside a pipeline. When enabled, debug logs
744 are usually written into a file, printed to the terminal, or handed
745 off to a log handler installed by the application. However, at
746 higher debug levels the volume of debug output quickly becomes
747 unmanageable, which poses a problem in disk-space or bandwidth
748 restricted environments or with long-running pipelines where a
749 problem might only manifest itself after multiple days. In those
750 situations, developers are usually only interested in the most
751 recent debug log output. The new in-memory ringbuffer logger makes
752 this easy: just installed it with gst_debug_add_ring_buffer_logger()
753 and retrieve logs with gst_debug_ring_buffer_logger_get_logs() when
754 needed. It is possible to limit the memory usage per thread and set
755 a timeout to determine how long messages are kept around. It was
756 always possible to implement this in the application with a custom
757 log handler of course, this just provides this functionality as part
761 - 'fakevideosink is a null sink for video data that advertises
762 video-specific metas ane behaves like a video sink. See above for
765 - gst_util_dump_buffer() prints the content of a buffer to stdout.
767 - gst_pad_link_get_name() and gst_state_change_get_name() print pad
768 link return values and state change transition values as strings.
770 - The LATENCY TRACER has seen a few improvements: trace records now
771 contain timestamps which is useful to plot things over time, and
772 downstream synchronisation time is now excluded from the measured
775 - Miniobject refcount tracing and logging was not entirley
776 thread-safe, there were duplicates or missing entries at times. This
777 has now been made reliable.
779 - The netsim element, which can be used to simulate network jitter,
780 packet reordering and packet loss, received new features and
781 improvements: it can now also simulate network congestion using a
782 token bucket algorithm. This can be enabled via the "max-kbps"
783 property. Packet reordering can be disabled now via the
784 "allow-reordering" property: Reordering of packets is not very
785 common in networks, and the delay functions will always introduce
786 reordering if delay > packet-spacing, so by setting
787 "allow-reordering" to FALSE you guarantee that the packets are in
788 order, while at the same time introducing delay/jitter to them. By
789 using the new "delay-distribution" property the use can control how
790 the delay applied to delayed packets is distributed: This is either
791 the uniform distribution (as before) or the normal distribution; in
792 addition there is also the gamma distribution which simulates the
793 delay on wifi networks better.
798 - gst-inspect-1.0 now prints pad properties for elements that have pad
799 subclasses with special properties, such as compositor or
800 audiomixer. This only works for elements that use the newly-added
801 GstPadTemplate API API or the
802 gst_element_class_add_static_pad_template_with_gtype() convenience
803 function to tell GStreamer about the special pad subclass.
805 - gst-launch-1.0 now generates a gstreamer pipeline diagram (.dot
806 file) whenever SIGHUP is sent to it on Linux/*nix systems.
808 - gst-discoverer-1.0 can now analyse live streams such as rtsp:// URIs
811 GStreamer RTSP server
813 - Initial support for [RTSP protocol version
814 2.0][rtsp2-lightning-talk] was added, which is to the best of our
815 knowledge the first RTSP 2.0 implementation ever!
817 - ONVIF audio backchannel support. This is an extension specified by
818 ONVIF that allows RTSP clients (e.g. a control room operator) to
819 send audio back to the RTSP server (e.g. an IP camera).
820 Theoretically this could have been done also by using the RECORD
821 method of the RTSP protocol, but ONVIF chose not to do that, so the
822 backchannel is set up alongside the other streams. Format
823 negotiation needs to be done out of band, if needed. Use the new
824 ONVIF-specific subclasses GstRTSPOnvifServer and
825 GstRTSPOnvifMediaFactory to enable this functionality.
828 - The internal server streaming pipeline is now dynamically
829 reconfigured on PLAY based on the transports needed. This means that
830 the server no longer adds the pipeline plumbing for all possible
831 transports from the start, but only if needed as needed. This
832 improves performance and memory footprint.
834 - rtspclientsink has gained an "accept-certificate" signal for
835 manually checking a TLS certificate for validity.
837 - Fix keep-alive/timeout issue for certain clients using TCP
838 interleave as transport who don't do keep-alive via some other
839 method such as periodic RTSP OPTION requests. We now put netaddress
840 metas on the packets from the TCP interleaved stream, so can map
841 RTCP packets to the right stream in the server and can handle them
844 - Language bindings improvements: in general there were quite a few
845 improvements in the gobject-introspection annotations, but we also
846 extended the permissions API which was not usable from bindings
849 - Fix corner case issue where the wrong mount point was found when
850 there were multiple mount points with a common prefix.
855 - this section will be filled in shortly {FIXME!}
858 GStreamer Editing Services and NLE
860 - this section will be filled in shortly {FIXME!}
865 - this section will be filled in shortly {FIXME!}
868 GStreamer Python Bindings
870 - this section will be filled in shortly {FIXME!}
873 Build and Dependencies
875 - the new WebRTC support in gst-plugins-bad depends on the GStreamer
876 elements that ship as part of libnice, and libnice version 1.1.14 is
877 required. Also the dtls and srtp plugins.
879 - gst-plugins-bad no longer depends on the libschroedinger Dirac codec
882 - The srtp plugin can now also be built against libsrtp2.
884 - some plugins and libraries have moved between modules, see the
885 _Plugin and_ _library moves_ section above, and their respective
886 dependencies have moved with them of course, e.g. the GStreamer
887 OpenGL integration support library and plugin is now in
888 gst-plugins-base, and mpg123, LAME and twoLAME based audio decoder
889 and encoder plugins are now in gst-plugins-good.
891 - Unify static and dynamic plugin interface and remove plugin specific
892 static build option: Static and dynamic plugins now have the same
893 interface. The standard --enable-static/--enable-shared toggle is
894 sufficient. This allows building static and shared plugins from the
895 same object files, instead of having to build everything twice.
897 - The default plugin entry point has changed. This will only affect
898 plugins that are recompiled against new GStreamer headers. Binary
899 plugins using the old entry point will continue to work. However,
900 plugins that are recompiled must have matching plugin names in
901 GST_PLUGIN_DEFINE and filenames, as the plugin entry point for
902 shared plugins is now deduced from the plugin filename. This means
903 you can no longer have a plugin called foo living in a file called
904 libfoobar.so or such, the plugin filename needs to match. This might
905 cause problems with some external third party plugin modules when
906 they get rebuilt against GStreamer 1.14.
909 Note to packagers and distributors
911 A number of libraries, APIs and plugins moved between modules and/or
912 libraries in different modules between version 1.12.x and 1.14.x, see
913 the _Plugin and_ _library moves_ section above. Some APIs have seen
914 minor ABI changes in the course of moving them into the stable APIs
917 This means that you should try to ensure that all major GStreamer
918 modules are synced to the same major version (1.12 or 1.13/1.14) and can
919 only be upgraded in lockstep, so that your users never end up with a mix
920 of major versions on their system at the same time, as this may cause
923 Also, plugins compiled against >= 1.14 headers will not load with
924 GStreamer <= 1.12 owing to a new plugin entry point (but plugin binaries
925 built against older GStreamer versions will continue to load with newer
926 versions of GStreamer of course).
928 There is also a small structure size related ABI breakage introduced in
929 the gst-plugins-bad codecparsers library between version 1.13.90 and
930 1.13.91. This should "only" affect gstreamer-vaapi, so anyone who ships
931 the release candidates is advised to upgrade those two modules at the
935 Platform-specific improvements
939 - ahcsrc (Android camera source) does autofocus now
943 - this section will be filled in shortly {FIXME!}
947 - The GStreamer wasapi plugin was rewritten and should not only be
948 usable now, but in top shape and suitable for low-latency use cases.
949 The Windows Audio Session API (WASAPI) is Microsoft's most modern
950 method for talking with audio devices, and now that the wasapi
951 plugin is up to scratch it is preferred over the directsound plugin.
952 The ranks of the wasapisink and wasapisrc elements have been updated
953 to reflect this. Further improvements include:
955 - support for more than 2 channels
957 - a new "low-latency" property to enable low-latency operation (which
958 should always be safe to enable)
960 - support for the AudioClient3 API which is only available on Windows
961 10: in wasapisink this will be used automatically if available; in
962 wasapisrc it will have to be enabled explicitly via the
963 "use-audioclient3" property, as capturing audio with low latency and
964 without glitches seems to require setting the realtime priority of
965 the entire pipeline to "critical", which cannot be done from inside
966 the element, but has to be done in the application.
968 - set realtime thread priority to avoid glitches
970 - allow opening devices in exclusive mode, which provides much lower
971 latency compared to shared mode where WASAPI's engine period is
972 10ms. This can be activated via the "exclusive" property.
974 - There are now GstDeviceProvider implementations for the wasapi and
975 directsound plugins, so it's now possible to discover both audio
976 sources and audio sinks on Windows via the GstDeviceMonitor API
978 - debug log timestamps are now higher granularity owing to
979 g_get_monotonic_time() now being used as fallback in
980 gst_utils_get_timestamp(). Before that, there would sometimes be
981 10-20 lines of debug log output sporting the same timestamp.
986 Aaron Boxer, Adrián Pardini, Adrien SCH, Akinobu Mita, Alban Bedel,
987 Alessandro Decina, Alex Ashley, Alicia Boya García, Alistair Buxton,
988 Alvaro Margulis, Anders Jonsson, Andreas Frisch, Andrejs Vasiljevs,
989 Andrew Bott, Antoine Jacoutot, Antonio Ospite, Antoni Silvestre, Anton
990 Obzhirov, Anuj Jaiswal, Arjen Veenhuizen, Arnaud Bonatti, Arun Raghavan,
991 Ashish Kumar, Aurélien Zanelli, Ayaka, Branislav Katreniak, Branko
992 Subasic, Brion Vibber, Carlos Rafael Giani, Cassandra Rommel, Chris
993 Bass, Chris Paulson-Ellis, Christoph Reiter, Claudio Saavedra, Clemens
994 Lang, Cyril Lashkevich, Daniel van Vugt, Dave Craig, Dave Johnstone,
995 David Evans, David Schleef, Deepak Srivastava, Dimitrios Katsaros,
996 Dmitry Zhadinets, Dongil Park, Dustin Spicuzza, Eduard Sinelnikov,
997 Edward Hervey, Enrico Jorns, Eunhae Choi, Ezequiel Garcia, fengalin,
998 Filippo Argiolas, Florent Thiéry, Florian Zwoch, Francisco Velazquez,
999 François Laignel, fvanzile, George Kiagiadakis, Georg Lippitsch, Graham
1000 Leggett, Guillaume Desmottes, Gurkirpal Singh, Gwang Yoon Hwang, Gwenole
1001 Beauchesne, Haakon Sporsheim, Haihua Hu, Håvard Graff, Heekyoung Seo,
1002 Heinrich Fink, Holger Kaelberer, Hoonhee Lee, Hosang Lee, Hyunjun Ko,
1003 Ian Jamison, James Stevenson, Jan Alexander Steffens (heftig), Jan
1004 Schmidt, Jason Lin, Jens Georg, Jeremy Hiatt, Jérôme Laheurte, Jimmy
1005 Ohn, Jochen Henneberg, John Ludwig, John Nikolaides, Jonathan Karlsson,
1006 Josep Torra, Juan Navarro, Juan Pablo Ugarte, Julien Isorce, Jun Xie,
1007 Jussi Kukkonen, Justin Kim, Lasse Laursen, Lubosz Sarnecki, Luc
1008 Deschenaux, Luis de Bethencourt, Marcin Lewandowski, Mario Alfredo
1009 Carrillo Arevalo, Mark Nauwelaerts, Martin Kelly, Matej Knopp, Mathieu
1010 Duponchelle, Matteo Valdina, Matt Fischer, Matthew Waters, Matthieu
1011 Bouron, Matthieu Crapet, Matt Staples, Michael Catanzaro, Michael
1012 Olbrich, Michael Shigorin, Michael Tretter, Michał Dębski, Michał Górny,
1013 Michele Dionisio, Miguel París, Mikhail Fludkov, Munez, Nael Ouedraogo,
1014 Neos3452, Nicholas Panayis, Nick Kallen, Nicola Murino, Nicolas
1015 Dechesne, Nicolas Dufresne, Nirbheek Chauhan, Ognyan Tonchev, Ole André
1016 Vadla Ravnås, Oleksij Rempel, Olivier Crête, Omar Akkila, Orestis
1017 Floros, Patricia Muscalu, Patrick Radizi, Paul Kim, Per-Erik Brodin,
1018 Peter Seiderer, Philip Craig, Philippe Normand, Philippe Renon, Philipp
1019 Zabel, Pierre Pouzol, Piotr Drąg, Ponnam Srinivas, Pratheesh Gangadhar,
1020 Raimo Järvi, Ramprakash Jelari, Ravi Kiran K N, Reynaldo H. Verdejo
1021 Pinochet, Rico Tzschichholz, Robert Rosengren, Roland Peffer, Руслан
1022 Ижбулатов, Sam Hurst, Sam Thursfield, Sangkyu Park, Sanjay NM, Satya
1023 Prakash Gupta, Scott D Phillips, Sean DuBois, Sebastian Cote, Sebastian
1024 Dröge, Sebastian Rasmussen, Sejun Park, Sergey Borovkov, Seungha Yang,
1025 Shakin Chou, Shinya Saito, Simon Himmelbauer, Sky Juan, Song Bing,
1026 Sreerenj Balachandran, Stefan Kost, Stefan Popa, Stefan Sauer, Stian
1027 Selnes, Thiago Santos, Thibault Saunier, Thijs Vermeir, Tim Allen,
1028 Tim-Philipp Müller, Ting-Wei Lan, Tomas Rataj, Tom Bailey, Tonu Jaansoo,
1029 U. Artie Eoff, Umang Jain, Ursula Maplehurst, VaL Doroshchuk, Vasilis
1030 Liaskovitis, Víctor Manuel Jáquez Leal, vijay, Vincent Penquerc'h,
1031 Vineeth T M, Vivia Nikolaidou, Wang Xin-yu (王昕宇), Wei Feng, Wim
1032 Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens,
1033 XuGuangxin, Yasushi SHOJI, Yi A Wang, Youness Alaoui,
1035 ... and many others who have contributed bug reports, translations, sent
1036 suggestions or helped testing.
1041 More than 800 bugs have been fixed during the development of 1.14.
1043 This list does not include issues that have been cherry-picked into the
1044 stable 1.12 branch and fixed there as well, all fixes that ended up in
1045 the 1.12 branch are also included in 1.14.
1047 This list also does not include issues that have been fixed without a
1048 bug report in bugzilla, so the actual number of fixes is much higher.
1053 After the 1.14.0 release there will be several 1.14.x bug-fix releases
1054 which will contain bug fixes which have been deemed suitable for a
1055 stable branch, but no new features or intrusive changes will be added to
1056 a bug-fix release usually. The 1.14.x bug-fix releases will be made from
1057 the git 1.14 branch, which is a stable branch.
1061 1.14.0 is scheduled to be released in early March 2018.
1066 - The webrtcdsp element (which is unrelated to the newly-landed
1067 GStreamer webrtc support) is currently not shipped as part of the
1068 Windows binary packages due to a build system issue.
1073 Our next major feature release will be 1.16, and 1.15 will be the
1074 unstable development version leading up to the stable 1.16 release. The
1075 development of 1.15/1.16 will happen in the git master branch.
1077 The plan for the 1.16 development cycle is yet to be confirmed, but it
1078 is expected that feature freeze will be around August 2017 followed by
1079 several 1.15 pre-releases and the new 1.16 stable release in September.
1081 1.16 will be backwards-compatible to the stable 1.14, 1.12, 1.10, 1.8,
1082 1.6, 1.4, 1.2 and 1.0 release series.
1084 ------------------------------------------------------------------------
1086 _These release notes have been prepared by Tim-Philipp Müller with_
1087 _contributions from Sebastian Dröge._
1089 _License: CC BY-SA 4.0_