Release 1.13.91
[platform/upstream/gstreamer.git] / NEWS
1
2
3 GSTREAMER 1.14 RELEASE NOTES
4
5
6 GStreamer 1.14.0 has not been released yet. It is scheduled for release
7 in early March 2018.
8
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.
12
13 See https://gstreamer.freedesktop.org/releases/1.14/ for the latest
14 version of this document.
15
16 _Last updated: Monday 12 March 2018, 18:00 UTC (log)_
17
18
19 Introduction
20
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
23 framework!
24
25 As always, this release is again packed with new features, bug fixes and
26 other improvements.
27
28
29 Highlights
30
31 -   WebRTC support: real-time audio/video streaming to and from web
32     browsers
33
34 -   Experimental support for the next-gen royalty-free AV1 video codec
35
36 -   Video4Linux: encoding support, stable element names and faster
37     device probing
38
39 -   Support for the Secure Reliable Transport (SRT) video streaming
40     protocol
41
42 -   RTP Forward Error Correction (FEC) support (ULPFEC)
43
44 -   RTSP 2.0 support in rtspsrc and gst-rtsp-server
45
46 -   ONVIF audio backchannel support in gst-rtsp-server and rtspsrc
47
48 -   playbin3 gapless playback and pre-buffering support
49
50 -   tee, our stream splitter/duplication element, now does allocation
51     query aggregation which is important for efficient data handling and
52     zero-copy
53
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
56     being written.
57
58 -   rtpjitterbuffer fast-start mode and timestamp offset adjustment
59     smoothing
60
61 -   souphttpsrc connection sharing, which allows for connection reuse,
62     cookie sharing, etc.
63
64 -   nvdec: new plugin for hardware-accelerated video decoding using the
65     NVIDIA NVDEC API
66
67 -   Adaptive DASH trick play support
68
69 -   ipcpipeline: new plugin that allows splitting a pipeline across
70     multiple processes
71
72 -   Major gobject-introspection annotation improvements for large parts
73     of the library API
74
75
76 Major new features and changes
77
78 WebRTC support
79
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!
87
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.
91
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
95 NATs.
96
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
100 go.
101
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.
105
106 New Elements
107
108 -   webrtcbin handles the transport aspects of webrtc connections (see
109     WebRTC section above for more details)
110
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
116     GStreamer_.
117
118 -   av1enc and av1dec elements providing experimental support for the
119     next-generation royalty free video AV1 codec, alongside Matroska
120     support for it.
121
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.
130
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.
135
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.
142
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.
155
156  
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).
181
182 -   lcms is a new LCMS-based ICC color profile correction element
183
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
189     base class.
190
191 -   The curl plugin has gained a new curlhttpsrc element, which is
192     useful for testing HTTP protocol version 2.0 amongst other things.
193
194 Noteworthy new API
195
196 -   GstPromise provides future/promise-like functionality. This is used
197     in the GStreamer WebRTC implementation.
198
199  
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.
206
207  
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.
212
213  
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.
217
218  
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
224     executable.
225
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
230     properties.
231
232  
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().
236
237  
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
241     list into appsrc.
242
243  
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.
247
248  
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.
256
257  
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
266     will catch up.
267
268  
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.
276
277  
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.
285
286  
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.
293
294 New RTP features and improvements
295
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
315     link at the time.
316
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.
322
323  
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.
334
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.
341
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.
353
354 -   rtpL8pay and rtpL8depay provide RTP payloading and depayloading for
355     8-bit raw audio
356
357 New element features
358
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.
371
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.
376
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.
380
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.
387
388 -   dvdlpcmdec: has gained support for Blu-Ray audio LPCM.
389
390 -   appsrc has gained support for buffer lists (see above) and also seen
391     some other performance improvements.
392
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.
396
397 -   jpegenc has gained a "snapshot" property just like pngenc to make it
398     easier to just output a single encoded frame.
399
400 -   jpegdec will now handle interlaced MJPEG streams properly and also
401     handle frames without an End of Image marker better.
402
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.
414
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.
420
421 -   shout2send now uses non-blocking I/O and has a configurable network
422     operations timeout.
423
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
428     robust muxing mode.
429
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.
437
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
442     as PNG and VP9.
443
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
453     allowed.
454
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.
468
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
472     position.
473
474 -   videocrop now uses GstVideoCropMeta if downstream supports it, which
475     means cropping can be handled more efficiently without any copying.
476
477 -   compositor now has support for _crossfade blending_, which can be
478     used via the new "crossfade-ratio" property on the sink pads.
479
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).
484
485  
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.
490
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
494     GLib main loop).
495
496 -   openh264enc allows to change the encoding bitrate dynamically at
497     runtime now
498
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)
502
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.
507
508 -   The MPEG-TS muxer and demuxer (tsmux, tsdemux) now have support for
509     JPEG2000
510
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.
516
517 -   The decklink plugin for Blackmagic capture and playback cards have
518     seen numerous improvements:
519
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.
524
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.
528
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
534     pausing/seeking.
535
536 -   support for more than 16 devices, without any artificial limit
537
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
544     video.
545
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.
554
555  
556 -   kmssink has seen lots of fixes and improvements in this cycle,
557     including:
558
559 -   Raspberry Pi (vc4) and Xilinx DRM driver support
560
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
564
565 -   GstVideoCropMeta support
566
567 Plugin and library moves
568
569 MPEG-1 audio (mp1, mp2, mp3) decoders and encoders moved to -good
570
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
577 plugins if desired.
578
579 In particular these are:
580
581 -   mpg123audiodec: an mp1/mp2/mp3 audio decoder using libmpg123
582 -   lamemp3enc: an mp3 encoder using LAME
583 -   twolamemp2enc: an mp2 encoder using TwoLAME
584
585 GstAggregator moved from -bad to core
586
587 GstAggregator has been moved from gst-plugins-bad to the base library in
588 GStreamer and is now stable API.
589
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.
598
599 GstAudioAggregator, audiomixer and audiointerleave moved from -bad to -base
600
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.
605
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.
608
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
613 most scenarios.
614
615 Similarly, audiointerleave replaces the 'interleave' element which did
616 not handle live inputs or non-aligned inputs very robustly.
617
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
621 handled correctly.
622
623 We hope to move the video equivalents (GstVideoAggregator and
624 compositor) to -base in the next cycle, i.e. for 1.16.
625
626 GStreamer OpenGL integration library and plugin moved from -bad to -base
627
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
634 for 1.16 though.
635
636 This is quite a milestone, thanks to everyone who worked to make this
637 happen!
638
639 Qt QML and GTK plugins moved from -bad to -good
640
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:
647
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
651     dangling pointer.
652
653 -   EGL is now supported with the X11 backend, which works e.g. on
654     Freescale imx6
655
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).
667
668 GstPhysMemoryAllocator interface moved from -bad to -base
669
670 GstPhysMemoryAllocator is a marker interface for allocators with
671 physical address backed memory.
672
673 Plugin removals
674
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
677     these years.
678
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
682     to simply remove it.
683
684 API removals
685
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
688     years.
689
690
691 Miscellaneous changes
692
693 -   The video support library has gained support for a few new pixel
694     formats:
695 -   NV16_10LE32: 10-bit variant of NV16, packed into 32bit words (plus 2
696     bits padding)
697 -   NV12_10LE32: 10-bit variant of NV12, packed into 32bit words (plus 2
698     bits padding)
699 -   GRAY10_LE32: 10-bit grayscale, packed in 32bit words (plus 2 bits
700     padding)
701
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).
705
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.
710
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.
719
720 OpenGL integration
721
722 -   The GStreamer OpenGL integration library has moved to
723     gst-plugins-base and is now part of our stable API.
724
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.
730
731 -   Prefer wayland display over X11: As most Wayland compositors support
732     XWayland, the X11 backend would get selected.
733
734 -   gldownload can export dmabufs now, and glupload will advertise
735     dmabuf as caps feature.
736
737
738 Tracing framework and debugging improvements
739
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
758     of GStreamer.
759
760  
761 -   'fakevideosink is a null sink for video data that advertises
762     video-specific metas ane behaves like a video sink. See above for
763     more details.
764
765 -   gst_util_dump_buffer() prints the content of a buffer to stdout.
766
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.
769
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
773     values.
774
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.
778
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.
794
795
796 Tools
797
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.
804
805 -   gst-launch-1.0 now generates a gstreamer pipeline diagram (.dot
806     file) whenever SIGHUP is sent to it on Linux/*nix systems.
807
808 -   gst-discoverer-1.0 can now analyse live streams such as rtsp:// URIs
809
810
811 GStreamer RTSP server
812
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!
816
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.
826
827  
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.
833
834 -   rtspclientsink has gained an "accept-certificate" signal for
835     manually checking a TLS certificate for validity.
836
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
842     properly.
843
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
847     before.
848
849 -   Fix corner case issue where the wrong mount point was found when
850     there were multiple mount points with a common prefix.
851
852
853 GStreamer VAAPI
854
855 -   this section will be filled in shortly {FIXME!}
856
857
858 GStreamer Editing Services and NLE
859
860 -   this section will be filled in shortly {FIXME!}
861
862
863 GStreamer validate
864
865 -   this section will be filled in shortly {FIXME!}
866
867
868 GStreamer Python Bindings
869
870 -   this section will be filled in shortly {FIXME!}
871
872
873 Build and Dependencies
874
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.
878
879 -   gst-plugins-bad no longer depends on the libschroedinger Dirac codec
880     library.
881
882 -   The srtp plugin can now also be built against libsrtp2.
883
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.
890
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.
896
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.
907
908
909 Note to packagers and distributors
910
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
915 section.
916
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
921 breakages.
922
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).
927
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
932 same time.
933
934
935 Platform-specific improvements
936
937 Android
938
939 -   ahcsrc (Android camera source) does autofocus now
940
941 macOS and iOS
942
943 -   this section will be filled in shortly {FIXME!}
944
945 Windows
946
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:
954
955 -   support for more than 2 channels
956
957 -   a new "low-latency" property to enable low-latency operation (which
958     should always be safe to enable)
959
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.
967
968 -   set realtime thread priority to avoid glitches
969
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.
973
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
977
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.
982
983
984 Contributors
985
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,
1034
1035 ... and many others who have contributed bug reports, translations, sent
1036 suggestions or helped testing.
1037
1038
1039 Bugs fixed in 1.14
1040
1041 More than 800 bugs have been fixed during the development of 1.14.
1042
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.
1046
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.
1049
1050
1051 Stable 1.14 branch
1052
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.
1058
1059 1.14.0
1060
1061 1.14.0 is scheduled to be released in early March 2018.
1062
1063
1064 Known Issues
1065
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.
1069
1070
1071 Schedule for 1.16
1072
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.
1076
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.
1080
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.
1083
1084 ------------------------------------------------------------------------
1085
1086 _These release notes have been prepared by Tim-Philipp Müller with_
1087 _contributions from Sebastian Dröge._
1088
1089 _License: CC BY-SA 4.0_