1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096
|
GStreamer 1.28 Release Notes
GStreamer 1.28.0 was originally released on 27 January 2026.
See https://gstreamer.freedesktop.org/releases/1.28/ for the latest version of this document.
Last updated: Tuesday 27 January 2026, 17:00 UTC (log)
## Introduction
The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite
cross-platform multimedia framework!
As always, this release is again packed with many new features, bug fixes, and other improvements.
## Highlights
- AMD HIP plugin and integration helper library
- Vulkan Video AV1 and VP9 decoding, H.264 encoding, and 10-bit support for H.265 decoder
- waylandsink: Parse and set the HDR10 metadata and other color management improvements
- Audio source separation element based on demucs in Rust
- Analytics combiner and splitter elements plus batch meta to batch buffers from one or more streams
- LiteRT inference element; move modelinfo to analytics lib; add script to help with modelinfo generation and upgrade
- Add general classifier tensor-decoder, facedetector, and more analytics convenience API
- New tensordecodebin element to auto-plug compatible tensor decoders based on their caps and many other additions and
improvements
- Add a burn-based YOLOX inference element and a YOLOX tensor decoder in Rust
- applemedia: VideoToolbox VP9 and AV1 hardware-accelerated decoding support, and 10-bit HEVC encoding
- Add new GIF decoder element in Rust with looping support
- input-selector: implements a two-phase sinkpad switch now to avoid races when switching input pads
- The inter wormhole sink and source elements gained a way to forward upstream events to the producer as well as new
fine-tuning properties
- webrtcsink: add renegotiation support and support for va hardware encoders
- webrtc WHEP client and server signaller
- New ST-2038 ancillary data combiner and extractor elements
- fallbacksrc gained support for encoded streams
- flv: enhanced rtmp H.265 video support, and support for multitrack audio
- glupload: Implement udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland),
and other dma devices
- video: Add crop, scale, rotate, flip, shear and more GstMeta transformation
- New task pool GstContext to share a thread pool amongst elements for better resource management and performance, especially
for video conversion and compositing
- New Deepgram speech-to-text transcription plugin and many other translation and transcription improvements
- Speech synthesizers: expose new “compress” overflow mode that can speed up audio while preserving pitch
- ElevenLabs voice cloning element and support for Speechmatics speaker identification API
- textaccumulate: new element for speech synthesis or translation preprocessing
- New vmaf element to calculate perceptual video quality assessment scores using Netflix’s VMAF framework
- decodebin3: expose KLV, ID3 PES and ST-2038 ancillary data streams with new metadata GstStream type
- New MPEG-H audio decoding plugin plus MP4 demuxing support
- LCEVC: Add autoplugging decoding support for LCEVC H265 and H266 video streams and LCEVC H.265 and H.266 encoders
- RTP “robust MPEG audio”, raw audio (L8, L16, L24), and SMPTE ST291 ancillary metadata payloaders/depayloaders in Rust
- Add a Rust-based icecastsink element with AAC support
- The Windows IPC plugin gained support for passing generic data in addition to raw audio/video, and various properties
- New D3D12 interlace and overlay compositor elements, plus many other D3D12 improvements
- Blackmagic Decklink elements gained support for capturing and outputting all types of VANC via GstAncillaryMeta
- GstLogContext API to reduce log spam in several components and GST_DEBUG_ONCE (etc) convenience macros to log things only
once
- hlssink3, hlscmafsink: Support the use of a single media file, plus I-frame only playlist support
- Webkit: New wpe2 plugin making use of the “WPE Platform API”
- MPEG-TS demuxer can now disable skew corrections
- New Qt6 QML render source element
- qml6gloverlay: support directly passing a QQuickItem for QML the render tree
- unifxfdsink: Add a property to allow copying to make sink usable with more upstream elements
- dots-viewer: Improve dot file generation and interactivity
- Python bindings: more syntactic sugar, analytics API improvements and type annotations
- cerbero: add support for Python wheel packaging, Windows ARM64, new iOS xcframework, Gtk4 on macOS and Windows, and more
plugins
- Smaller binary sizes of Rust plugins in Windows and Android binary packages
- Peel: New C++ bindings for GStreamer
- Lots of new plugins, features, performance improvements and bug fixes
- Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements
## Major new features and changes
### AMD HIP plugin and integration library
- HIP (formerly known as Heterogeneous-computing Interface for Portability) is AMD’s GPU programming API that enables
portable, CUDA-like development across both AMD and NVIDIA platforms:
- On AMD GPUs, HIP runs natively via the ROCm stack.
- On NVIDIA GPUs, HIP operates as a thin translation layer over the CUDA runtime and driver APIs.
This allows developers to maintain a single codebase that can target multiple GPU vendors with minimal effort.
- The new HIP plugin provides the following elements:
- hipcompositor: a HIP-based video mixer/compositor
- hipconvert: Converts video from one colorspace to another using HIP
- hipconvertscale: Resizes video and allow color conversion using HIP
- hipscale: Resize video using HIP
- hipdownload: Downloads HIP device memory into system memory
- hipupload: Uploads system memory into HIP device memory
- The GStreamer HIP integration helper library provides HIP integration functionality to applications and other HIP users.
- Watch the Bringing AMD HIP into GStreamer talk from last year’s GStreamer Conference for more details or read Seungha’s
devlog post on the subject.
### Low Complexity Enhancement Video Coding (LCEVC) support for H.265 and H.266
- LCEVC is a codec that provides an enhancement layer on top of another codec such as H.264 for example. It is standardised as
MPEG-5 Part 2.
- LCEVC H.265 and H.266 encoder and decoder elements based on V-Nova’s SDK libraries were added in this cycle
- Autoplugging support for LCEVC H265 and H266 video streams, so these can be decoded automatically in a decodebin3 or
playbin3 scenario.
### Closed captions and text handling improvements
- cea708overlay: suport non-relative positioning for streams with CCs that do not have relative positions. Instead of
displaying them at the top, they are positioned relatively.
- cea708mux: expose “discarded-services” property on sink pads. This can be useful when muxing in an original caption stream
with a newly-created one (e.g. transcription / translation), in which case one might wish to discard select services from
the original stream in order to avoid garbled captions.
- sccparse: Better handling of streams with more byte tuples in the SCC field.
- tttocea608: expose “speaker-prefix” property
- Miscellaneous improvements and spec compliance fixes
- Also see SMPTE ST-2038 metadata section below.
### Speech to Text, Translation and Speech Synthesis
- New audio source separation element based on demucs in Rust. This is useful to separate speech from background audio before
running speech to text transcription, but could also be used to separate vocals from music for karaoke.
- New Deepgram speech-to-text transcription plugin in Rust.
- The Speechmatics transcriber has seen a major refactoring for better timings, gap and discontinuity handling and has gained
support for the new Speechmatics speaker identification API as well as a new property to mask profanities.
- New ElevenLabs voice cloning element. The new element can operate in two modes:
- In single speaker mode, the element will directly clone a single voice from its input, without storing any samples.
- Otherwise, the element will store a backlog of samples, and wait to receive certain events from a transcriber on its
source pad before draining them to create potentially multiple voices.
- New “compress” overflow mode for speech synthesizers that can speed up the audio while preserving pitch. This may be needed
to keep or regain audio/video synchronisation if translated speech output has been consistently longer in duration than the
original and there hasn’t been a sufficient amount of silence that could be filled in to make up the difference.
- awstranslate: new “brevity-on” property for turning brevity on.
- The awstranscriber2 has been refactored to match the speechmatics transcriber design and gained a “show-speaker-label”
property that defines whether to partition speakers in the transcription output.
- New textaccumulate element for speech synthesis or translation preprocessing that can be used to accumulate words and
punctuation into complete sentences (or sentence fragments) for synthesis and / or translation by further elements
downstream.
### HLS DASH adaptive streaming improvements
- Reverse playback, seeking and stream selection fixes in the HLS/DASH clients.
- hlscmafsink can generate I-frame only playlists now
- Both hlssink3 and hlscmafsink gained support for use of a single media file, in which case the media playlist will use byte
range tags for each chunk whilst always referencing the same single media file. This can be useful for VOD use cases.
### decodebin3 and playbin3 improvements
- decodebin3 now has a separate pad template for metadata streams and considers KLV, ID3 PES streams and ST-2038 ancillary
streams as raw formats for meta streams. This comes also with a new dedicated GST_STREAM_TYPE_METADATA stream type in the
stream collection.
### Enhanced RTMP and multitrack audio/video support in FLV
- The FLV container used for RTMP streaming is fairly old and limited in terms of features: It only supports one audio and one
video track, and also only a very limited number of audio and video codecs, most of which are by now quite long in the
tooth.
- The Enhanced RTMP (V2) specification seeks to remedy this and adds support for modern video codecs such H.265 and AV1 as
well as support for more than one audio and video track inside the container.
- Both H.265 video and multiple audio/video tracks are now supported for FLV in GStreamer.
- Support for this comes in form of a new eflvmux muxer element, which is needed to accommodate both the need of backwards
compatibility in the existing FLV muxer and the requirements of the new format. See Tarun’s blog post for more details.
### MPEG-TS container format improvements
- The MPEG-TS demuxer gained a “skew-corrections” property that allows disabling of skew corrections, which are done by
default for live inputs to make sure downstream consumes data at the same rate as it comes in if the local clock and the
sender clock drift apart (as they usually do). Disabling skew corrections is useful if the input stream has already been
clock-corrected (for example with mpegtslivesrc) or where the output doesn’t require synchronisation against a clock,
e.g. when it’s re-encoded and/or remuxed and written to file (incl. HLS/DASH output) where it’s desirable to maintain the
original timestamps and frame spacings.
It is also useful for cases where we want to refer to the PCR stream to figure out global positioning, gap detection and
wrapover correction.
- tsdemux now also supports demuxing of ID3 tags in MPEG-TS as specified in the Apple Timed Metadata for HTTP Live Streaming
specification. These timed ID3 tags have a media type of meta/x-id3 which is different from the one used to tag audio files,
and an id3metaparse element is needed to properly frame the PES data coming out of the demuxer.
- The MPEG-TS muxer now also reads prog-map[PMT_ORDER_<PID>] for PMT order key in addition to prog-map[PMT_%d], which fixes a
wart in the API and provides an unambiguous way to specify ordering keys.
### Matroska container format improvements
- matroskademux now supports relative position cues in the seek table and also had its maximum block size restrictions updated
so that it can support uncompressed video frames also in 4k UHD resolution and higher bit depths.
### ISO MP4 container format improvements
- mp4mux now supports E-AC3 muxing
- qtdemux, the MP4 demuxer, has seen countless fixes for various advanced use cases (with lots more in the pipeline for
1.28.1).
- The isomp4mux from the Rust plugins set now support caps changes and has also gained support for raw audio as per ISO/IEC
23003-5. Plus improved brand selection.
- The isomp4mux, isofmp4mux and related elements were merged into a single isobmff plugin, which allows sharing more code. As
part of this, codec support was consolidated between the two.
### MXF container format improvements
- The MXF muxer and demuxer gained support for non-closed-caption VANC ancillary metdata:
- Extends mxfdemux with support for outputting VANC (ST436M) essence tracks as ST2038 streams instead of extracting closed
captions internally.
- Extends mxfmux with support for consuming ST2038 streams for outputting VANC (ST436M) essence tracks instead of only
supporting closed captions.
To support ST2038 instead of the earlier closed captions, we introduce a breaking change to the caps handling on the pad. This
was deemed the cleanest way and should hopefully not cause too much breakage in the real world, as it is likely not something
that was used much in practice in this form. The st2038anctocc element can be used to convert a ST2038 stream to plain closed
captions.
We also now support both 8 and 10-bit VANC data when reading from MXF.
### MPEG-H audio support
- New MPEG-H audio decoding plugin based on the Fraunhofer MPEG-H decoder implementation plus MP4 demuxing support
SMPTE 2038 ancillary data stream handling improvements
- New ST-2038 ancillary data combiner and extractor elements in the rsclosedcaption Rust plugin that extract ST-3028 metadata
streams from GstAncillaryMetas on video frames or converts ST-2038 metadata streams to GstAncillaryMeta and combines it with
a given video stream.
- The MXF demuxer and muxer gained support for muxing and demuxing generic ancillary metadata in ST-2038 format (see below).
- decodebin3 now treats ST-2038 metadata streams as a “raw metadata format” and exposes those streams as
GST_STREAM_TYPE_METADATA.
### Analytics
This release introduces a major improvement in how analytics pipelines are built, moving away from manual configuration toward a
fully negotiated analytics pipeline.
- Robust Tensor Negotiation & Smart Selection: All inference and tensor decoder elements adopt the tensor capability
negotiation mechanism. This provides informative error handling by validating the pipeline during the setup phase and
providing descriptive error messages for configuration mismatches before processing begins. Complementing this, the new
tensordecodebin acts as an intelligent proxy that abstracts decoder selection by auto-plugging the correct tensor decoder.
This simplifies the use of existing tensor decoders and allows new tensor decoders to be utilized instantly without
requiring changes to pipeline definitions.
- Simplified Model Integration with modelinfo: The modelinfo library, configuration files, and the modelinfo-generator.py
script work together to make using any ML model inside a GStreamer pipeline very simple. The new utility script helps you
quickly generate or upgrade metadata files for existing models. Combined with tensor negotiation and tensordecodebin, these
tools facilitate the seamless utilization of new models within the analytics chain.
- analyticsoverlay: New “expire-overlay” property added to objectdetectionoverlay and can also show tracking-id; New
‘segmentationoverlay’ to visualize segmented regions.
- Add LiteRT inference element
- Analytics: add general classifier tensor-decoder, facedetector, YOLOv8 (detection), YOLOv8segmentation tensor decoders and
more convenience API.
- onnx: Add Verisilicon provider support
- New IoU based tracker
- Add GstAnalyticsBatchMeta representing a batch of buffers from one or more streams together with the relevant events to be
able to interpret the buffers and to be able to reconstruct the original streams.
- New analyticscombiner and analyticssplitter elements in the Rust plugin set which batch buffers from one or more streams
into a single stream via the new GstAnalyticsBatchMeta and allow splitting that single stream into the individual ones again
later.
- Add a burn-based YOLOX inference element and a YOLOX tensor decoder in Rust.
### Vulkan integration enhancements
- The Vulkan Video encoders and decoders now dynamically generate their pad template caps at runtime instead of hardcoding
them, so they more accurately reflect the actual capabilities of the hardware and drivers.
- New Vulkan AV1 and VP9 video decoding support
- New Vulkan H.264 encoding support
- The Vulkan H.265 decoder now also supports 10-bit depth
### OpenGL integration enhancements
- Implement keyboard, mouse, and scroll wheel navigation event handling for the OpenGL Cocoa backend.
- Added support for the NV24 and Y444_12 pixel formats. The latter is used by certain HEVC decoders for 12-bit non-subsampled
profiles.
### udmabuf allocator with glupload support
- Implement a udmabuf-based memory allocator for user-space mappable dmabufs.
- glupload: add udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland), and
other dma devices. This can help reduce memory copies and can massively improve performance in video players like Showtime
or Totem for software-decoded video such as AV1 with dav1ddec.
- gtk4paintablesink: Similar to glupload, this now proposes the udmabuf memory allocator to upstream which can reduce memory
copies and improve performance with certain software decoders.
### Wayland integration
- Added basic colorimetry support
- waylandsink:
- Parse and set the HDR10 metadata and other color management improvements
- udmabuf support (see above)
- video crop meta support
- New “fullscreen-output” and “force-aspect-ratio” properties
### Qt5 + Qt6 QML integration improvements
- New Qt6 QML qml6 render source element
- qml6gloverlay: support directly passing a QQuickItem for QML the render tree
### GTK4 integration improvements
- gtk4paintablesink: Added YCbCr memory texture formats and improve color-state fallbacks. The sink will also propose a
udmabuf buffer pool and allocator now if upstream asks for sysmem, which would allow direct imports of the memory by
GL/Vulkan or the compositor. Plus many other improvements which have also been backported into the 0.14 branch.
### CUDA / NVCODEC integration and feature additions
- cudacompositor, cudaconvert and its variants gained crop meta support
- nvencoder: interlaced video handling improvements and “emit-frame-stats” property which if enabled makes the encoder emit
the “frame-stats” signal for each encoded frame, allowing applications to monitor things like the average QP per frame.
- nvjpegenc: Add an autogpu mode element (nvautogpunvenc) similar to nvautogpu{h264,h265,av1}enc.
- nvh264enc, nvh265enc gained a new “num-slices” property which is conditionally available based on device support for dynamic
slice mode
- nvdsdewarp: performance improvements and support for output resizing support, along with a new “add-borders” property.
### Capture and playout cards support
- Blackmagic Decklink elements gained support for capturing and outputting all types of VANC via GstAncillaryMeta
### RTP and RTSP stack improvements
- rtspsrc now sends RTSP keepalives also in TCP/interleaved modes. This fixes problems with some cameras that don’t see the
RTCP traffic as sufficient proof of liveness, when using TCP/HTTP tunnelled modes.
- New Rust RTP mparobust depayloader for “robust mp3” audio**, a more loss-tolerant RTP payload format for MP3 audio (RFC
5219)
- New Rust RTP L8/L16/L24 raw audio payloader and depayloader, which offer more correct timestamp handling compared to the old
payloader and depayloader and more correctly implements multichannel support.
- New Rust RTP SMTPE ST291 ancillary data payloader and depayloader for sending or receiving ancillary data over RTP. This is
also the payload format used by ST2110-40.
- Various performance improvements and fixes for rtprecv / rtpsend (“rtpbin2”).
- Support for “multi-time aggregation packets” (MTAP) in the H264 RTP depayloader rtph264depay.
### WebRTC improvements
- webrtcbin and GstWebRTC library improvements:
- Add support for getting the selected ICE candidate pairs
- Improve spec compliance for ICE candidate stats by filling the foundation, related-address, related-port,
username-fragment and tcp-type fields of stats.
- improve compatibility with LiveKit
- webrtcsink and webrtcsrc enhancements:
- webrtcsink gained renegotiation support, and support for va hardware encoders
- Added a WHEP client signaller and server signaller to the Rust webrtc plugin, including support for server side offers for
the WHEP client.
- webrtc-api: Set default bundle policy to max-bundle.
- The dtls plugin now uses a ECDSA private key for the default certificate. ECDSA is widely used in browsers and SFUs, and
some servers such as the ones using BouncyCastle only accept certificates signed with ECDSA.
### New GStreamer C++ bindings
The old GStreamer C++ bindings (gstreamermm and qt-gstreamer) have been unmaintained for a long time, leaving C++ developers
only with the option to use the GStreamer C API.
In recent years, a new approach for C++ bindings was developed by the GNOME community: peel. While initially developed for GTK,
with various GObject Introspection and API fixes included in GStreamer 1.28, this is now also usable for GStreamer.
Compared to gstreamermm this offers a much lower overhead, headers-only C++ binding that just depends on the C libraries and not
even the C++ STL, and provides a modern C++ API top of the GStreamer C API. Compared to qt-gstreamer there is no dependency on
Qt.
It’s still in active development and various MRs for improving the GStreamer development experience are not merged yet, but it’s
already usable and a great improvement over using the plain C API from C++.
Various GStreamer examples can be found in Sebastian’s GStreamer peel examples repository.
## New elements and plugins
- Many exciting new Rust elements, see Rust section below.
- New D3D12 interlace, overlay compositor, fish eye dewarp and uv coordinate remapping elements
- VMAF: New element to calculate perceptual video quality assessment scores using Netflix’s VMAF framework
- Webkit: New wpe2 plugin that makes use of the “WPE Platform API” with support for rendering into GL and SHM buffers and
navigation events (but not audio yet).
- Many other new elements mentioned in other sections (e.g. CUDA, NVCODEC, D3D12, Speech, AMD HIP, Rust etc.)
## New element features and additions
- The AWS S3 sink and source elements now support S3 compatible URI schemes.
- clocksync: new “rate” property and “resync” action signal so that clocksync can synchronise buffer running time against the
pipeline clock with a specified rate factor. This can be useful if one wants to throttle pipeline throughput such as e.g. in
a non-realtime transcoding pipeline where the pipeline’s CPU and/or hardware resource consumption needs to be limited.
- fallbacksrc is able to support encoded outputs now, not just uncompressed audio/video. As part of this it supports stream
selection via the GstStream API now.
- h265parse now automatically inserts AUDs where needed if it outputs byte-stream format, which helps fix decoding artefacts
for multi-slice HEVC streams with some hardware decoders.
- input-selector now implements a two-phase sinkpad switch to avoid races when switching input pads. Extensive tests have been
added to avoid regressions.
- The inter plugin wormhole sink and source elements for sending data between pipelines within the same application process
gained new properties to fine tune the inner elements. intersrc can now also be configured to forward upstream events to the
producer pipeline via the new “event-types” property.
- The quinn plugin supports sharing of the QUIC/WebTransport connection/session with an element upstream or downstream. This
is required for supporting Media over QUIC (MoQ) later, for which an MR is already pending.
- replaygain will use EBU-R128 gain tags now if available.
- threadshare: many improvements to the various threadshare elements, plus examples and a new benchmark program. The plugin
was also relicensed to MPL-2.0.
- The unixfdsink element for zero-copy 1:N IPC on Linux can now also copy the input data if needed, which makes it usable with
more upstream elements. Before it would only work with elements that made use of the special memory allocator it advertised.
This (copy if needed) is enabled by default, but can be disabled by setting the new “min-memory-size” property to -1.
There’s also a new “num-clients” property that gets notified when the number of clients (unixfdsrc elements tapping the same
unixfdsink) changes.
- videorate and imagefreeze now also support JPEG XS.
- videorate’s formerly defunct “new-pref” property was revived for better control which frame to prefer for output in case of
caps changes.
## Plugin and library moves and renames
- The y4mdec plugin moved from gst-plugins-bad into gst-plugins-good and was merged with the existing y4menc there into a
single y4m plugin containing both a YUV4MPEG encoder and decoder.
- The fmp4 and mp4 plugins in the Rust plugins set were merged into a single isobmff plugin.
## Plugin and element deprecations
- The old librtmp-based rtmpsrc and rtmpsink elements are deprecated are scheduled for removal in the next release cycle. Use
the rtmp2src and rtmp2sink elements instead (which will likely also be registered under the old names after removal of the
old rtmp plugin).
- Deprecate the webrtchttp plugin in the Rust plugins set along with its whipsink and whepsrc elements, in favour of the
whipclientsink and whepclientsrc elements from the webrtc plugin in the Rust plugins set.
- The libmpeg2-based mpeg2dec element is deprecated and scheduled for removal in the next release cycle, as libmpeg2 has been
unmaintained for a very long time. The libavcodec-based decoder has had a higher rank for many years already and is also
more performant. We would recommend that distros that also ship the FFmpeg-based decoder out of the box stop shipping the
mpeg2dec plugin now or reduce its rank to GST_RANK_NONE.
## Plugin and element removals
- The cc708overlay element has been removed. It is replaced by the cea708overlay element from the rsclosedcaption plugin in
the Rust plugins module.
- Drop registration of rusotos3src and rusotos3sink in the AWS plugin in the Rust plugins set. These were legacy names that
were renamed to awss3src and awss3sink in 2022, but had been kept around for a while so applications had time to move to the
new name space.
## Miscellaneous API additions
### GStreamer Core
- gst_call_async() and gst_object_call_async() are more generic and convenient replacements for gst_element_call_async()
- gst_check_version() is a new convenience function to check for a minimum GStreamer core version at runtime.
- GstClock: Add gst_clock_is_system_monotonic() utility function
- GstController: gst_timed_value_control_source_list_control_points() is a thread-safe method to retrieve the list of control
points, replacing gst_timed_value_control_source_get_all().
- GstCpuId: gst_cpuid_supports_x86_avx() and friends can be used to check which SIMD instruction sets are supported on the
current machine’s CPU without relying on liborc for that. This is useful for plugins that rely on an external library that
wants to be told which SIMD code paths to use.
- gst_object_get_toplevel() can be used to get the toplevel parent of an object, e.g. the pipeline an element is in.
- New API for tensor caps descriptions:
- GstUniqueList is a new unordered, unique container value type for GValues similar to GstValueList but guaranteed to have
unique values. Can only be queried and manipulated via the gst_value_* API same as GstValueList and GstValueArray.
- gst_structure_get_caps() gets a GstCaps from a structure
- More accessor functions for GstPadProbeInfo fields and the GstMapInfo data field, as well as a generic gst_map_info_clear()
which is useful for language bindings.
- New EBU-R128 variants of the replay gain tags: GST_TAG_TRACK_GAIN_R128 and GST_TAG_ALBUM_GAIN_R128
- GstReferenceTimestampMeta: additional information about the timestamp can be provided via the new optional info
GstStructure. This should only be used for information about the timestamp and not for information about the clock source.
This is used in an implementation of the TAI timestamp functionality described in ISO/IEC 23001-17 Amendment 1 in the Rust
MP4 muxer.
- GstValue: add gst_value_hash() and support 0b / 0B prefix for bitmasks when deserialising.
- Add missing _take() and _steal() functions for some mini objects:
- gst_buffer_take(), gst_buffer_steal()
- gst_buffer_list_steal()
- gst_caps_steal()
- gst_memory_take(), gst_memory_replace(), gst_memory_steal()
- gst_message_steal()
- gst_query_steal()
- GstElement: Deprecate gst_element_state_*() API and provide gst_state_*() replacements with the right namespace
#### GstMetaFactory to dynamically register metas
- gst_meta_factory_register() allows to dynamically register metas and store them in the registry by name. This is useful in
combination with the GstMeta serialisation and deserialisation functionality introduced in GStreamer 1.24, for metas that
are not provided by GStreamer core. If an element comes across a meta name that is not registered yet with GStreamer, it can
check the registry and load the right plugin which will in turn register the meta with GStreamer. This is similar to how
flag and enum types can be stored in the registry so that if during caps deserialisation an unknown enum or flag type is
encountered, it can be loaded dynamically and registered with the type system before deserialisation continues.
The pbtypes plugin in gst-plugins-base registers GstAudioMeta and GstVideoMeta in the registry so that e.g. unixfdsrc and
other elements can make sure they get pulled in and registered with GStreamer before deserialising them.
### App Sink and Source Library
- appsrc and appsink gained support for a more bindings-friendly “simple callbacks” API that can be used instead of GObject
signals (which have considerable overhead) or the normal callbacks API (which couldn’t be used from most bindings).
### Audio Library
- added support for 20-bit PCM audio stored in 32-bit containers, both signed (S20_32) and unsigned (U20_32), each in
little-endian and big-endian variants.
### Plugins Base Utils Library
- Many minor improvements.
### Tag Library
- Vorbis comments: parse EBU R128 tags
### Video Library and OpenGL Library
- Add DRM equivalents for various 10/12/16 bit SW-decoders formats
- New GstVideoMetaTransformMatrix that adds crop, scale, rotate, flip, shear and more meta transformations. The current
“scaling” transformation doesn’t work if either the input buffer is cropped or if any kinds of borders are added. And it
completely falls down with more complex transformations like compositor.
- GstVideoOverlayCompositionMeta: handling of multiple video overlay composition metas on a single buffer has been fixed in
lots of places (overlays and sinks). Many elements assumed there would only ever be a single overlay composition meta per
buffer. For that reason gst_buffer_get_video_overlay_composition_meta() has been deprecated, so that elements have to
iterate over the metas and handle multiple occurences of it.
New Raw Video Formats
- Add more 10bit RGB formats commonly used on ARM SoCs in GStreamer Video, OpenGL and Wayland, as well as in deinterlace and
gdkpixbufoverlay:
- BGR10x2_LE: packed 4:4:4 RGB (B-G-R-x), 10 bits for R/G/B channel and MSB 2 bits for padding
- RGB10x2_LE: packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding
- Add 10-bit 4:2:2 NV16_10LE40 format, which is a fully-packed variant of NV16_10LE32 and also known as NV20 and is produced
by Rockchip rkvdec decoders.
### GstPlay Library
- GstPlay: Add support for gapless looping
## Miscellaneous performance, latency and memory optimisations
- New task pool GstContext to share a thread pool amongst elements in a pipeline for better resource management and
performance, especially for video conversion and compositing. This is currently only made use of automatically in the
GStreamer Editing Services library.
- glupload: Implement udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland),
and other dma devices (see above).
- GstDeviceMonitor now starts device providers in a separate thread. This avoids blocking the application when
gst_device_monitor_start() is called, which avoids each app having to spawn a separate thread just to start device
monitoring. This is especially important on Windows, where device probing can take several seconds or on macOS where device
access can block on user input. A new GST_MESSAGE_DEVICE_MONITOR_STARTED is posted on the bus to signal to the application
that the device monitor has completed its async startup.
- On Windows audioresample now has SIMD optimisations enabled also for the MSVC build.
- audiomixmatrix / audioconvert: sparse matrix LUT optimisation which uses precomputed LUTs for non-zero coefficients instead
of blindly traversing all input/output channel combinations.
- As always there have been plenty of performance, latency and memory optimisations all over the place.
## Miscellaneous other changes and enhancements
- The ALSA device provider now supports enumerating virtual PCM sinks
- The ASIO device monitor can now detect dynamically added and removed devices by monitoring USB events.
## Tracing framework and debugging improvements
- There are new hooks to track when buffers are queued or dequeued from buffer pools in the tracing system.
- The pad-push-timings tracer gained a new “write-log” action signal
Dot tracer/viewer
- Enhanced dots-viewer: Major refactoring with modular JavaScript architecture, bundled dependencies (no more CDN), clickable
pipeline references for navigation between related dot files, download SVG button, and improved UI/UX with better text
handling and zoom fixes.
Dot file pipeline graphs
- Dot file dumps of pipeline graphs now show the list of active tracers at the bottom along with the tracer configuration.
Debug logging system improvements
GstLogContext to fine-tune logging output and reduce log message spam
- GstLogContext is a new API to control logging behavior, particularly for implementing “log once” functionality and periodic
logging. This helps avoid spamming logs with repetitive messages. This comes with a whole suite of new GST_CTX_* debug log
macros that take a context argument in addition to the usual arguments.
- A number of GST_{MEMDUMP,TRACE,LOG,DEBUG,INFO,WARNING,ERROR}_ONCE convenience macros for logging something only once.
- The source code of elements and plugins has to be updated to make use of this new feature, so if there are any particular
log messages in certain elements that you feel are particularly spammy, please feel free to file an issue in GitLab so we
can see if it would make sense to use the new API there.
## Tools
- gst-inspect-1.0 now shows the type of each field when it prints caps and also pretty-prints tensor caps.
## GStreamer FFmpeg wrapper
- The avdec video decoders have seen many improvements and fixes for their buffer pool and allocation query handling.
## GStreamer RTSP server
- rtsp-client: Add a “pre-closed” signal which provides a way for an application to be notified when a connection is closed,
before the client’s sessions are cleaned up. This is useful when a client terminates its session improperly, for example, by
sending a TCP RST.
- rtsp-stream-transport: expose new “timed-out” property. Upon RTCP timeout, rtpsession emits a signal that we can catch and
then also expose the timed out state a property of the transport in order for users (such as rtspclientsink) to get notified
about it.
- rtspclientsink now errors out on timeout.
## VA-API integration
VA plugin for Hardware-Accelerated Video Encoding and Decoding on Intel/AMD
- vaav1enc: Enable intrablock copy and palette mode.
- Lots of other improvements and bug fixes.
GStreamer-VAAPI has been removed in favour of the va plugin
- gstreamer-vaapi has been removed and is no longer updated going forward Users who relied on gstreamer-vaapi are encouraged
to migrate to the va plugin’s elements at the earliest opportunity. It should still be possible to build old versions of
gstreamer-vaapi against newer versions of GStreamer.
## GStreamer Editing Services and NLE
- Task Pool Context Support: GESPipeline now supports task pool context handling for better resource management. It
automatically creates and manages a GstSharedTaskPool with threads set to the number of processors, also allowing
applications to provide their own shared task pool via context negotiation.
- MT-Safe Controller API: New gst_timed_value_control_source_list_control_points() function provides thread-safe access to
control points, addressing use-after-free bugs in the previous API which returned references to internal structures.
- OTIO Formatter Migration: The OpenTimelineIO formatter has been moved from embedded GLib resources to a standalone Python
plugin located in gst-python, simplifying the implementation and avoiding duplicated code.
- Framepositioner Z-order Enhancements: The z-order property is now controllable and exposed for manipulation, enabling
dynamic adjustment of layer stacking order during timeline editing.
- Clip Layer Movement Detection: New ges_clip_is_moving_between_layers() API distinguishes actual layer moves from other
operations like split/ungroup, with separate flags for track element freezing and layer movement.
- GES Error Domain: Added ges_error_quark() function for proper GError domain support, enabling automatic ErrorDomain
implementation generation in language bindings.
- Timeline Error Reporting: Added GError parameter to ges_base_bin_set_timeline() for proper error reporting when timeline
setup fails.
- Various bug fixes for memory leaks, frame position calculations with non-square pixel aspect ratios, and control binding
handling.
GStreamer validate
- New check-last-frame-qrcode action type: New action type (from the Rust validate plugin) to validate QR code content in
video frames. Supports exact string matching for single or multiple QR codes, and JSON field validation.
- Override Severity Levels: New overrides parameter in the meta action type allows changing issue severity levels during test
execution. Tests can now pass when encountering known issues by downgrading severity from critical to warning/issue/ignore.
- Enhanced dots-viewer (see dots-viewer section above)
- SSIM Validation Improvements: Changed validation to check all images before reporting errors instead of stopping at the
first error.
- Reverse Playback Validation: Changed segment.time mismatch from critical to warning for reverse playback scenarios,
acknowledging the additional complexity demuxers face during reverse playback.
- Launcher Improvements: Log files for passing tests are now removed by default to reduce storage usage (with option to keep
them), and debug log colors are now supported when redirected to files.
- Python 3.14 Compatibility: Fixed file:/// URI generation for Python 3.14 with proper RFC 8089 compliance.
- Various bug fixes for scenario handling, memory leaks, and improved backward compatibility with GLib 2.64.
## GStreamer Python Bindings
gst-python is an extension of the regular GStreamer Python bindings based on gobject-introspection information and PyGObject,
and provides “syntactic sugar” in form of overrides for various GStreamer APIs that makes them easier to use in Python and more
pythonic; as well as support for APIs that aren’t available through the regular gobject-introspection based bindings, such as
e.g. GStreamer’s fundamental GLib types such as Gst.Fraction, Gst.IntRange etc.
- More pythonic API for analytics
- Type annotations have been updated in PyGObject-stubs.
- Writability of Gst.Structure, Gst.Caps and other objects has been improved.
- caps.writable_structure() now returns a ContextManager inside of which the returned Gst.Structure can be modified.
- obj.make_writable() makes any MiniObject writable.
- Pad probe callbacks now has info.writable_object() and info.set_object() to modify objects inside the callback.
## GStreamer C# Bindings
- The C# bindings have been updated for the latest GStreamer 1.28 APIs.
## GStreamer Rust Bindings and Rust Plugins
The GStreamer Rust bindings and plugins are released separately with a different release cadence that’s tied to the gtk-rs
release cycle.
The latest release of the bindings (0.24) has already been updated for the new GStreamer 1.28 APIs, and works with any GStreamer
version starting from 1.14.
gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements
and plugins.
The GStreamer 1.28 binaries will be tracking the main branch of gst-plugins-rs for starters and then track the 0.15 branch once
that has been released (around the end of February 2026). After that, fixes from newer versions will be backported as needed
into the new 0.15 branch for future 1.28.x bugfix releases.
Rust plugins can be used from any programming language. To applications, they look just like a plugin written in C or C++.
### New Rust elements
- New icecastsink element with AAC support that is similar in functionality to the existing shout2send element but also
supports AAC, which upstream libshout is not planning to support.
- New audio source separation element based on demucs (see above).
- New Deepgram speech-to-text transcription plugin, ElevenLabs voice cloning element and textaccumulate element. See Speech to
Text, Translation and Speech Synthesis section above.
- New analytics combiner and splitter elements for batch metas (see above).
- New mpa robust RTP depayloader, L8/L16/L24 raw audio payloaders and depayloaders and SMPTE ST291 ancillary data payloader
and depayloader.
- New GIF decoder element that supports looping.
- New ST-2038 ancillary data combiner and extractor elements (see above)
- Added a burn-based YOLOX inference element and a YOLOX tensor decoder
- s302mparse: Add new S302M audio parser
- New Rust validate plugin with a check-last-frame-qrcode action.
For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.14 (shipped with GStreamer
1.26) and current main (soon 0.15) branch (shipped with GStreamer 1.28).
Note that at the time of GStreamer 1.28.0 gst-plugins-rs 0.15 was not released yet and the git main branch was included instead
(see above).
## Build and Dependencies
- Meson >= 1.4 is now required for all modules
- liborc >= 0.4.42 is strongly recommended
- libnice >= 0.1.23 is now required for the WebRTC library.
- The closedcaption plugin in gst-plugins-bad no longer depends on pangocairo after removal of the cc708overlay element (see
above).
- Please also note plugin removals and deprecations.
Monorepo build
- Updated wraps, incl. glib: cairo, directxmath, expat, fdk-aac, ffmpeg, flac, freetype2, gdk-pixbuf, gtest, harfbuzz,
json-glib, lame, libjpeg-turbo, libnice, libopenjp2, libpng, libsrtp2, libxml2, nghttp2, ogg, pango, pcre2, pygobject,
soundtoch, sqlite3, wayland-protocols, zlib.
- Added wraps: librsvg, svtjpegxs
Development environment
- Local pre-commit checks via git hooks have been moved over to pre-commit, including the code indentation check.
- Code indentation checking no longer relies on a locally installed copy of GNU indent (which had different outcomes depending
on the exact version installed). Instead, pre-commit will automatically install the gst-indent-1.0 indentation tool through
pip, which also works on Windows and macOS.
- A pre-commit hook has been added to check documentation cache updates and since tags.
- Many meson wrap updates, including to FFmpeg 7.1 (FFmpeg 8.0 is pending)
- The uninstalled development environment should work better on macOS now, also in combination with homebrew (e.g. when
libsoup comes from homebrew).
- New python-exe Meson build option to override the target Python installation to use. This will be picked up by the
gst-python and gst-editing-sevices subprojects.
## Platform-specific changes and improvements
### Android
- Overhaul hw-accelerated video codecs detection:
- Android 10 (API 29) added support for isHardwareAccelerated() to MediaCodecInfo to detect whether a particular
MediaCodec is backed by hardware or not. We can now use that to ensure that the video hw-codec is rank PRIMARY+1 on
Android, since using a software codec for video is simply not feasible most of the time.
- If we’re not able to detect isHardwareAccelerated(), perhaps because the Android API version is too old, we try to use
the codec name as a fallback and also rank as PRIMARY+1 the c2.android, c2.exynos and c2.amlogic audio codecs alongside
OMX.google, because they are known-good.
### Apple macOS and iOS
- VP9 and AV1 hardware-accelerated video decoding support
- Support for 10-bit HEVC encoding
- Implement keyboard, mouse, and scroll wheel navigation event handling for the OpenGL Cocoa backend.
### Windows
#### GStreamer Direct3D12 integration
- New elements:
- d3d12interlace: A Direct3D12 based interlacing element
- d3d12overlaycompositor: A Direct3D12-based overlay composing element
- d3d12fisheyedewarp: A Direct3D12-based fisheye dewarping element
- d3d12remap: A Direct3D12-based UV coordinate remapping element
- Upload/download optimisations via a staging memory implementation
- d3d12swapchainsink improvements:
- added a “last-rendered-sample” action signal to retrieve the last rendered frame
- added “uv-remap” and “redraw” action signals
#### Windows inter process communication
- The Windows IPC plugin gained support for passing generic data in addition to raw audio/video, and various new properties.
It also serialises metas now where that is supported.
#### Windows audio
- wasapi2: add support for dynamic audio device switching, exclusive mode and format negotiation, in addition to device
provider improvements and latency enhancements.
- Disable all audio device providers except wasapi2 by default (by setting the others’ rank to NONE). We had too many device
providers outputting duplicate device entries, and it wasn’t clear to people what they should be using. After the recent
device switching work done on WASAPI2, there is no reason to use directsound anymore.
### Cerbero
Cerbero is a meta build system used to build GStreamer plus dependencies on platforms where dependencies are not readily
available, such as Windows, Android, iOS, and macOS. It is also used to create the GStreamer Python Wheels.
General improvements
- New features:
- Support for generating Python wheels for macOS and Windows
- These will be uploaded to PyPI, currently blocked on PyPI
- Support for iPhone Simulator on ARM64 macOS, via the new iOS xcframework
- Inno Setup is now used for Windows installers, which also bundle the MSVC runtime
- An installer is now shipped for Windows ARM64, built using MSVC
- GTK4 is now shipped on macOS and Windows (MSVC and MinGW)
- Smaller binary sizes of Rust plugins on all platforms except macOS and iOS
- Linux builds now integrate better with system dependencies
- Debuginfo is now correctly shipped on Windows and macOS
- API/ABI changes:
- Android NDK r25 is now used, targeting API level 24 (Android 7.0)
- Merge modules are no longer shipped for Windows
- Windows installers are no longer MSIs
- The legacy iOS framework with iPhone ARM64 and iPhoneSimulator x86_64 binaries is now deprecated. It will be removed in
the next release. Please use the new iOS xcframework which supports iPhone ARM64 and iPhoneSimulator ARM64+x86_64.
- Plugins added:
- pbtypes is now shipped on all platforms
- curl is now shipped on all platforms except iOS and Android
- lcevcdec is now shipped on all platforms except Windows ARM64 and Windows 32-bit x86
- svtjpegxs is now shipped on Linux and Windows, only on 64-bit
- unixfd is now shipped on all platforms except Windows
- mediafoundation is now shipped additionally on MinGW
- wasapi2 is now shipped additionally on MinGW
- New Rust plugins on all platforms except Windows ARM64:
- analytics
- audioparsers
- burn
- demucs
- elevenlabs
- gopbuffer
- hlsmultivariantsink
- icecastsink
- mpegtslive
- raptorq
- speechmatics
- streamgrouper
- vvdec
- Plugins changed:
- mp4 and fmp4 plugins have been merged into isobmff
- Development improvements:
- Debuginfo is now correctly shipped on Windows and macOS
- Support for iPhone Simulator on ARM64 macOS, via the new iOS xcframework
- Known issues:
- cerbero: Rust plugins fail to link with Xcode 26 on macOS
- cerbero: Rust plugins are not shipped in the Windows ARM64 installer
- cerbero: Android devices with API level >= 30 cannot play tutorials 4 or 5 – Fix aimed for 1.28.1
- cerbero: Missing pkg-config for macOS in the Android release
## Documentation improvements
- Added a Windows section to “building from source” page
- New Python tutorials for dynamic pipelines and time handling
- The Android tutorials were updated: provided projects were updated to Gradle 8.11 and API level 24
- Updates of the Machine Learning and Analytics design documentation and the GstMeta design docs
## Possibly Breaking Changes
- The MXF muxer and demuxer used to have direct support for standalone closed caption streams (closedcaption/x-cea-708) as
ancillary data, but that was removed in favour of more generic ST 2038 ancillary metadata which is a better fit for how the
data is stored internally and also supports generic ancillary metadata. Closed captions can still be stored or extracted by
using the ST 2038 elements from the Rust plugins module. Also see the MXF section above.
- Analytics: Previously it was guaranteed that there is only ever up to one GstTensorMeta per buffer. This is no longer true
and code working with GstTensorMeta must be able to handle multiple GstTensorMeta now (after this Merge Request, which was
apparently backported into 1.26 as well).
- The thread ID reported in debug logs is no longer prefixed with a 0x on Windows, Linux and FreeBSD platforms. This change
can potentially break log parsers. GstDebugViewer was adapted accordingly.
## Known Issues
- There are some open issues with the Apple hardware-accelerated AV1 decoding, which we hope will be fixed in due course.
Please let us know if you run into them and can test patches.
- Autoplugging LCEVC H.264/H.265/H.266 streams is currently disabled until an issue with decodebin3 and non-LCEVC streams has
been resolved. It is still possible to re-enable this locally by overriding the rank of lcevch26*decodebin using the
GST_PLUGIN_FEATURE_RANK environment variable.
## Statistics
- 3548 commits
- 1765 Merge requests merged
- 476 Issues closed
- 190+ Contributors
- more than 35% of all commits and Merge Requests were in Rust modules/code
- 5430 files changed
- 395856 lines added
- 249844 lines deleted
- 146012 lines added (net)
Contributors
Aaron Boxer, Abd Razak, Adrian Perez de Castro, Adrien Plazas, Albert Sjolund, Aleix Pol, Alexander Slobodeniuk, Alicia Boya
García, Alyssa Ross, Amotz Terem, Amy Ko, Andoni Morales Alastruey, Andrew Yooeun Chun, Andrey Khamukhin, anonymix007, Arnout
Engelen, Artem Martus, Arun Raghavan, Ben Butterworth, Biswapriyo Nath, Brad Hards, Brad Reitmeyer, Branko Subasic, Camilo Celis
Guzman, Carlos Bentzen, Carlos Falgueras García, Carlos Rafael Giani, César Alejandro Torrealba Vázquez, Changyong Ahn, Chengfa
Wang, Christian Gräfe, Christo Joseph, Christopher Degawa, Christoph Reiter, Daniel Almeida, Daniel Morin, David Maseda Neira,
David Monge, David Smitmanis, Denis Shimizu, Derek Foreman, Detlev Casanova, Devon Sookhoo, Diego Nieto, Dominique Leroux,
DongJoo Kim, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, eipachte, Eli Mallon, Elliot Chen, Enock Gomes Neto, Enrique
Ocaña González, Eric, Eva Pace, F. Duncanh, François Laignel, Gang Zhao, Glyn Davies, Guillaume Desmottes, Gustav Fahlen,
Haejung Hwang, Haihua Hu, Havard Graff, Hanna Weiß, He Junyan, Hou Qi, Hyunjun Ko, Ian Napier, Inbok Kim, Jaehoon Lee, Jakub
Adam, James Cowgill, Jan Alexander Steffens (heftig), Jan Schmidt, Jan Tojnar, Jan Vermaete, Jaslo Ziska, Jeehyun Lee, Jeffery
Wilson, jeongmin kwak, Jeongmin Kwak, Jerome Colle, Jiayin Zhang, Jihoon Lee, Jochen Henneberg, Johan Sternerup, Jonathan Lui,
Jordan Petridis, Jordan Yelloz, Jorge Zapata, Julian Bouzas, Kevin Scott, Kevin Wolf, L. E. Segovia, Linus Svensson, Loïc Le
Page, Manuel Torres, Marc-André Lureau, Marc Leeman, Marek Olejnik, Mark Nauwelaerts, Marko Kohtala, Markus Hofstaetter, Mathieu
Duponchelle, Matteo Bruni, Matthew Semeniuk, Matthew Waters, Max Goltzsche, Mazdak Farzone, Michael Grzeschik, Michael Olbrich,
Michiel Westerbeek, Monty C, Muhammad Azizul Hazim, Nicholas Jin, Nicolas Dufresne, Nirbheek Chauhan, Norbert Hańderek, Ognyan
Tonchev, Ola Fornander, Olivier Blin, Olivier Crête, Oz Donner, Pablo García, Patricia Muscalu, Patrick Fischer, Paul Fee, Paweł
Kotiuk, Paxton Hare, Peter Stensson, pfee, Philippe Normand, Piotr Brzeziński, Piotr Brzeziński, Pratik Pachange, Qian Hu
(胡骞), r4v3n6101Rafael Caricio, Raghavendra Rao, Rares Branici, Ratchanan Srirattanamet, Razvan Grigore, Rick Ye, Rinat Zeh,
Robert Ayrapetyan, Robert Mader, Ross Burton, Ruben Gonzalez, Ruben Sanchez, Samuel Thibault, Sanchayan Maity, Santiago
Carot-Nemesio, Santosh Mahto, Sebastian Dröge, Seungha Yang, Shengqi Yu (喻盛琪), Sjoerd Simons, Slava Sokolovsky, Stefan
Andersson, Stefan Dangl, Stéphane Cerveau, stevn, Sven Püschel, Sylvain Garrigues, Taruntej Kanakamalla, Teus Groenewoud, Théo
Maillart, Thibault Saunier, Tim-Philipp Müller, Tjitte de Wert, Tobias Schlager, Tobias Koenig, Tomasz Mikolajczyk, Tulio
Beloqui, Val Packett, Vasiliy Doylov, Víctor Manuel Jáquez Leal, Vincent Beng Keat Cheah, Vineet Suryan, Vivia Nikolaidou,
Vivian Lee, Vivienne Watermeier, Wilhelm Bartel, William Wedler, Wim Taymans, Xavier Claessens, Yun Liu,
… and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
Stable 1.28 branch
After the 1.28.0 release there will be several 1.28.x bug-fix releases which will contain bug fixes which have been deemed
suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.28.x
bug-fix releases will be made from the git 1.28 branch, which is a stable release series branch.
1.28.1
The first 1.28 bug-fix release (1.28.1) is expected to be released in February 2026.
Schedule for 1.30
Our next major feature release will be 1.30, and 1.29 will be the unstable development version leading up to the stable 1.30
release. The development of 1.29/1.30 will happen in the git main branch of the GStreamer mono repository.
The schedule for 1.30 is still to be determined, but it will likely be in Q4/2026.
1.30 will be backwards-compatible to the stable 1.28, 1.26, 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2
and 1.0 release series.
## 1.27 pre-releases (superseded by 1.28)
- 1.27.1 development snapshot release notes
- 1.27.2 development snapshot release notes
- 1.27.50 development snapshot release notes
- 1.27.90 pre-release release notes
--------------------------------------------------------------------------------------------------------------------------------
These release notes have been prepared by Tim-Philipp Müller with contributions from Daniel Morin, Nirbheek Chauhan, Philippe
Normand, Sebastian Dröge, Thibault Saunier, Víctor Manuel Jáquez Leal, and Xavier Claessens
License: CC BY-SA 4.0
|