NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3782 most downloaded on crates.io
Rust bindings for GStreamer Video library
Last release 16 days ago
21 Sep 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
77 releases · first in 2017
Buffer::unset_flags() for unsetting specific buffer flags
Buffer::unset_flags() for unsetting specific buffer flagsVideoBufferFlags flags type and VideoBufferExt::set_video_flags(),
unset_video_flags() and get_video_flags() for working with video buffer
flags from safe code.gst_video::VideoBufferFlags.Support for ReferenceTimestampMeta
ReferenceTimestampMetaOne column per quarter.
Various new WebRTC enum types from 1.14.1/1.16.0
VideoInfo by using
gst_video_info_set_interlaced_format() instead of the generic function.gst::format succeed again now.Debug impls for VideoFormatInfo and AudioFormatInfo now print all the
details of the format instead of only the name, and the Debug impls for
VideoInfo and AudioInfo also print the format now.Bindings for setting/getting TagScope on a TagList
GLSyncMeta.TagScope on a TagListGLDisplayWayland and GLDisplayX11 in addition to the
already existing GLDisplayEGLBus::pop_filtered() and related functionsObject, Element, Bin, Pipeline and
Plugin flagsVideoCaptionMetaDebug impl of Buffer now also shows the metas of the buffersPadProbeInfo for overriding the return valueVideoDecoder and VideoEncoder, including subclassing
supportMemory, Allocator and VideoBufferPoolVideoFormatInfo::pack and ::unpack for format conversionBaseParse, including subclassing supportClockTimeVideoInfo::align()SDPMessage and SDPMedia bindings were completely rewritten as they
were broken before and caused crashes in various usages. As part of this
there's also some more convenience API available on these types, like
iterators for example, and API to modify the SDPMedia contained in a
SDPMessage.std::futureProxyPad default functions moved to an extension trait instead of plain
functions on ProxyPad, making them more in sync with the default Pad
functionsClockTime do overflow checks
now and replace the result with the NONE value on overflowTryFrom/TryInto traits are used in various places now instead of the
previous ad-hoc implementations of them.gst::Rank now instead of an arbitrary u32DeviceAdded/DeviceRemoved message getters are transfer full so we don't
need to take an additional reference that would be leaked.AppSink callbacks are correctly marked as Send instead of Send+Sync,
allowing a wider range of closures to be used for them.PadProbeReturn::Handled return values from pad probes more
correctly.ToOwned::to_owned() on miniobjects has to create copies instead of
only increasing the reference count. Otherwise it was possible to create
multiple mutable and immutable references to the same object at the same
time.URIHandler::set_uri does not accept None anymore as this is not allowed
by the C function.TypeFindProbability and Rank work correctly nowDisplay implementations were fixed to not cause a stack overflow
due to infinite recursion anymore::to_string() functions don't take ownership of C strings anymore
that they do not own, which caused double frees beforeSubclassing infrastructure was moved directly into the bindings, making the gst-plugin crate deprecated. This involves many API changes but generally…
gst-plugin crate deprecated. This involves many API
changes but generally cleans up code and makes it more flexible.
Take a look at the gst-plugins-rs crate for various examples.CapsFeatures and MetaParentBufferMeta, VideoMetaandVideoOverlayCompositionMeta`VideoOverlayComposition and VideoOverlayRectangleVideoTimeCodeNetAddressMetaUniqueFlowCombiner and UniqueAdapter wrappers that make use of
the Rust compile-time mutability checks and expose more API in a safe
way, and as a side-effect implement Sync and Send nowBus::add_watch_local() and gst_video::convert_frame_async_local() that
allows to use a closure that does not implement Send but can only be
called from the thread owning the main context.Allocation Querypbutils functions for codec descriptionsTagList::iter() for iterating over all tags while getting a single
value per tag. The old ::iter_tag_list() function was renamed to
::iter_generic() and still provides access to each value for a tagBus::iter() and Bus::iter_timed() iterators around the
corresponding ::pop*() functionsVideoColorimetry to access its fieldsDebug impls for various missing types.Value can also handle Buffer nowtypefind, multiqueue and
dynamic padsgst::FlowReturn or other "combined" enums
were changed to return split enums like Result<gst::FlowSuccess, gst::FlowError> to allow usage of the standard Rust error handling.bool or Option<_> were
changed to return a Result<_, glib::BoolError> or
Result<_, gst::LoggableError> or Result<_, gst::ErrorMessage> for
better integration with Rust's error handling infrastructure.bool were changed to return ().MiniObject subclasses are now newtype wrappers around the
underlying GstRc<FooRef> wrapper. This does not change the
API in any breaking way for the current usages, but allows
MiniObjects to also be implemented in other crates and
makes sure rustdoc places the documentation in the right places.BinExt extension trait was renamed to GstBinExt to prevent
conflicts with gtk::Bin if both are importedBuffer::from_slice() can't possible return Nonegst::tag::Album is the album tag now instead of artist sortname0 for the channel mask corresponding to negative
AudioChannelPositions.PartialOrd and related traits are implemented via pointer equality on
ClockId instead of using the compare function. Two clock ids with the same
timestamp are not necessarily the same.Option<_>.clippy warningsPTP clock constructor actually creates a PTP instead of NTP clock
More complete bindings for the gst_video::VideoOverlay interface, especially gst_video::is_video_overlay_prepare_window_handle_message()
Bindings for the GStreamer SDP and WebRTC libraries
gst::Bus::remove_watch() is now available to remove a bus watch again
gst::Bus::remove_watch() is now available to remove a bus watch againfmt::Debug impls for AudioInfo and VideoInfo were addedfmt::Debug impls for mini objects also print the pointer value now to make
it easier to track them in debug logsPlayerVisualization has accessors for the name and description fields now,
without which there is no sensible way to use them or to set a player
visualizationUpdated everything to GStreamer 1.14.0
Fix building of messages with custom fields for types that don't have a GstStructure
Deprecated Sample::get_info() in favour of ::get_structure()
Memory leak of the tag list in Toc::merge_tags()
Bindings for (outputting to) the GStreamer logging system
Pad functions to override pad behaviour, and pad task
functionsStaticCaps and StaticPadTemplatedeep-notify signal on ObjectError/Warning/Info Messages and posting them
from an element with context information (file, line, module, etc.) similar
to the C GST_ELEMENT_ERROR macroMessages/Events during constructionAsRef<[u8]> or
AsMut<[u8]>Read trait on AdapterElement, and all children
of a BinCaps and Structures in addition to the existing functionsAppSrc/AppSink implement BaseSrc/BaseSink and URIHandlerStackTraceFlags are only available since 1.12NSRunLoop running on the main thread in all
examples and tutorials, to be able to show a window or anything elseClockTime is now a wrapper around Option<u64> to handle the
CLOCK_TIME_NONE case better. This wrapper implements all the arithmetic
and other traits as needed and ensures that no accidental calculations with
CLOCK_TIME_NONE can happenDuration/Position/Convert queries or
Seek events now return a FormatValue type. This contains the actual
Format together with the value and does any required conversions. This
also makes it harder to accidentally mix e.g. values in bytes and timePadProbeId does not implement Clone/Copy anymoreError/Warning/Info Messages can only be created with specific kinds of
glib::Error now. Using arbitrary ones does not workIterator bindings were completely rewritten and provide the item type as a
generic type parameter now, greatly simplifying its usageglib::Values are now glib::SendValue instead, e.g. in Caps and
Structures, as their content must be possible to send to different threads
safelyMessage::get_src() can return NoneNone as Caps in AppSrc/AppSinkInto<Option<&str>> to be used as a pad namecopy() from GstRc directly to MiniObjectFlowReturn, PadLinkReturn, StateChangeReturn) now
implement an into_result() function that splits them into a Result with
the good and bad cases. Also mark them as #[must_use] to make it harder to
accidentally ignore errors.Error traitfailure crate for error handling now, cleaning up the
error handling code quite a bitImplement StaticType of BufferRef instead of Buffer. Buffer aka GstRc already implements StaticType if BufferRef does, and without this it was not pos
Implement Send+Sync for Query, Message and Event, and their corresponding Ref types.
Initial release of the autogenerated GStreamer bindings. Older versions (< 0.8.0) of the bindings can be found here. The API of the two is incompatibl
Your coding agent can read these notes before it upgrades. Set up the MCP server →