{"id":17694335,"url":"https://github.com/sdroege/gst-plugin-rs","last_synced_at":"2025-04-13T05:06:01.040Z","repository":{"id":46757803,"uuid":"58745098","full_name":"sdroege/gst-plugin-rs","owner":"sdroege","description":"Rust crate for writing GStreamer plugins and various plugins - This repository moved to https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs","archived":false,"fork":false,"pushed_at":"2025-04-11T17:33:01.000Z","size":18487,"stargazers_count":132,"open_issues_count":6,"forks_count":39,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-13T05:05:29.912Z","etag":null,"topics":["codecs","demuxers","gstreamer","multimedia","parsers","plugins","rust"],"latest_commit_sha":null,"homepage":"https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdroege.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-05-13T14:00:18.000Z","updated_at":"2025-04-11T17:33:05.000Z","dependencies_parsed_at":"2023-10-11T21:20:56.814Z","dependency_job_id":"a0d4cff2-2b97-4c08-93ea-12488652931d","html_url":"https://github.com/sdroege/gst-plugin-rs","commit_stats":{"total_commits":3555,"total_committers":149,"mean_commits":"23.859060402684563","dds":"0.48804500703234877","last_synced_commit":"e7813ca3fcbf2fe53565dd56db37e257c5153948"},"previous_names":[],"tags_count":109,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdroege%2Fgst-plugin-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdroege%2Fgst-plugin-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdroege%2Fgst-plugin-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdroege%2Fgst-plugin-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdroege","download_url":"https://codeload.github.com/sdroege/gst-plugin-rs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665749,"owners_count":21142123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codecs","demuxers","gstreamer","multimedia","parsers","plugins","rust"],"created_at":"2024-10-24T13:48:28.474Z","updated_at":"2025-04-13T05:06:01.011Z","avatar_url":"https://github.com/sdroege.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gst-plugins-rs [![crates.io](https://img.shields.io/crates/v/gst-plugin.svg)](https://crates.io/crates/gst-plugin) [![pipeline status](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/badges/main/pipeline.svg)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/commits/main)\n\nRepository containing various [GStreamer](https://gstreamer.freedesktop.org/)\nplugins and elements written in the [Rust programming\nlanguage](https://www.rust-lang.org/).\n\nThe plugins build upon the [GStreamer Rust bindings](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs).\nCheck the README.md of that repository also for details about how to set-up\nyour development environment.\n\n## Plugins\n\nYou will find the following plugins in this repository:\n\n  * `generic`\n    - `file`: A Rust implementation of the standard `filesrc` and `filesink` elements\n\n    - `sodium`: Elements to perform encryption and decryption using [libsodium](https://libsodium.org).\n\n    - `threadshare`: Some popular threaded elements reimplemented using common thread-sharing infrastructure.\n\n  * `net`\n\n    - `aws`: Various elements for Amazon AWS services using the [AWS SDK](https://awslabs.github.io/aws-sdk-rust/) library\n      - `s3src`/`s3sink`: A source and sink element to talk to the Amazon S3 object storage system.\n      - `s3putobjectsink`: A sink element to talk to Amazon S3. Uses `PutObject` instead of multi-part upload like `s3sink`.\n      - `s3hlssink`: A sink element to store HLS streams on Amazon S3.\n      - `awstranscriber`: an element wrapping the AWS Transcriber service.\n      - `awstranscribeparse`: an element parsing the packets of the AWS Transcriber service.\n\n    - `hlssink3`: An element for generating MPEG-TS HLS streams.\n\n    - `ndi`: An [NDI](https://www.newtek.com/ndi/) plugin containing a source, sink and device provider.\n\n    - `onvif`: Various elements for parsing, RTP (de)payloading, overlaying of ONVIF timed metadata.\n\n    - `quinn`: Transfer data over the network using QUIC\n      - `quinnquicsink`/`quinnquicsrc`: Send and receive data using QUIC\n      - `quinnquicmux`/`quinnquicdemux`: Multiplex and de-multiplex streams and datagram using QUIC\n      - `quinnroqmux`/`quinnroqdemux`: Multiplex and de-multiplex RTP streams over QUIC\n\n    - `raptorq`: Encoder/decoder element for RaptorQ RTP FEC mechanism.\n\n    - `reqwest`: An HTTP source element based on the [reqwest](https://github.com/seanmonstar/reqwest) library.\n\n    - `rtp`:\n      - `rtpav1pay` / `rtpav1depay`: RTP (de)payloader for the AV1 video codec.\n\n      - `rtpgccbwe`: RTP bandwidth estimator based on the Google Congestion Control algorithm.\n\n    - `webrtc`: WebRTC elements, with batteries included Sink elements for specific signalling protocols.\n\n    - `webrtchttp`: Simple WebRTC HTTP elements (WHIP/WHEP).\n\n  * `audio`\n    - `audiofx`: Elements to apply audio effects to a stream\n      - `rsaudioecho`: a simple echo/reverb filter.\n      - `audioloudnorm`: [audio normalization](http://k.ylo.ph/2016/04/04/loudnorm.html) filter.\n      - `audiornnoise`: Filter for [removing noise](https://jmvalin.ca/demo/rnnoise/).\n      - `ebur128level`: Filter for measuring audio loudness according to EBU R-128.\n      - `hrtfrender`: Filter for rendering audio according to a [head-related transfer\n        function](https://en.wikipedia.org/wiki/Head-related_transfer_function).\n\n    - `claxon`: A FLAC decoder based on the [Claxon](https://github.com/ruuda/claxon) library.\n\n    - `csound`: A plugin to implement audio effects using the [Csound](https://csound.com/) library.\n\n    - `lewton`: A Vorbis decoder based on the [lewton](https://github.com/RustAudio/lewton) library.\n\n    - `spotify`: A plugin to access content from [Spotify](https://www.spotify.com/) based on the [librespot](https://github.com/librespot-org/) library.\n\n  * `video`\n    - `cdg`: A parser and renderer for [CD+G karaoke data](https://docs.rs/cdg/0.1.0/cdg/).\n\n    - `closedcaption`: Plugin to deal with closed caption streams\n      - `ccdetect`: Detects if a stream contains active Closed Captions.\n      - `cea608overlay`: Overlay CEA-608 / EIA-608 closed captions over a\n        video stream.\n      - `cea608tojson`: Convert CEA-608 / EIA-608 closed captions to a JSON\n        stream.\n      - `cea608tott`: Convert CEA-608 / EIA-608 closed captions to timed text.\n      - `jsontovtt`: Convert JSON to timed text.\n      - `mccenc`: Convert CEA-608 / EIA-608 and CEA-708 / EIA-708 closed captions to the MCC format.\n      - `mccparse`: Parse CEA-608 / EIA-608 and CEA-708 / EIA-708 closed captions from the MCC format.\n      - `sccenc`: Convert CEA-608 / EIA-608 closed captions to the MCC format.\n      - `sccparse`: Parse CEA-608 / EIA-608 closed captions from the MCC format.\n      - `transcriberbin`: Convenience bin around transcriber elements like `aws_transcriber`.\n      - `tttocea608`: Convert timed text to CEA-608 / EIA-608 closed captions.\n      - `tttojson`: Convert timed text to JSON.\n\n    - `dav1d`: AV1 decoder based on the [dav1d](https://code.videolan.org/videolan/dav1d) library.\n\n    - `ffv1`: FFV1 decoder based on the [ffv1](https://github.com/rust-av/ffv1) library.\n\n    - `gif`: A GIF encoder based on the [gif](https://github.com/image-rs/image-gif) library.\n\n    - `gtk4`: A [GTK4](https://www.gtk.org) video sink that provides a `GdkPaintable` for UI integration.\n\n    - `hsv`: Plugin with various elements to work with video data in hue, saturation, value format\n       - `hsvdetector`: Mark pixels that are close to a configured color in HSV format.\n       - `hsvfilter`: Apply various transformations in the HSV colorspace.\n\n    - `png`: PNG encoder based on the [png](https://github.com/image-rs/image-png) library.\n\n    - `rav1e`: AV1 encoder based on the [rav1e](https://github.com/xiph/rav1e) library.\n\n    - `videofx`: Plugin with various video filters.\n      - `roundedcorners`: Element to make the corners of a video rounded via the alpha channel.\n      - `colordetect`: A pass-through filter able to detect the dominant color(s) on incoming frames, using [color-thief](https://github.com/RazrFalcon/color-thief-rs).\n      - `videocompare`: Compare similarity of video frames. The element can use different hashing algorithms like [Blockhash](https://github.com/commonsmachinery/blockhash-rfc), [DSSIM](https://kornel.ski/dssim), and others.\n\n    - `webp`: WebP decoder based on the [libwebp-sys-2](https://github.com/qnighy/libwebp-sys2-rs) library.\n\n  * `mux`\n    - `flavors`: FLV demuxer based on the [flavors](https://github.com/rust-av/flavors) library.\n\n    - `fmp4`: A fragmented MP4/ISOBMFF/CMAF muxer for generating e.g. DASH/HLS media fragments.\n\n    - `mp4`: A non-fragmented MP4 muxer for generating MP4 files.\n\n  * `text`\n    - `ahead`: A plugin to display upcoming text buffers ahead.\n\n    - `json`: A plugin to convert a stream of JSON objects to a higher level wrapped NDJSON output.\n\n    - `regex`: A regular expression text filter plugin.\n\n    - `wrap`: A plugin to perform text wrapping with hyphenation.\n\n  * `utils`\n    - `fallbackswitch`:\n      - `fallbackswitch`: An element that allows falling back to different\n        sink pads after a timeout based on the sink pads' priorities.\n      - `fallbacksrc`: Element similar to `urisourcebin` that allows\n        configuring a fallback audio/video if there are problems with the main\n        source.\n\n    - `livesync`: Element to maintain a continuous live stream from a\n      potentially unstable source.\n\n    - `togglerecord`: Element to enable starting and stopping multiple streams together.\n\n    - `tracers`: Plugin with multiple tracers:\n      - `buffer-lateness`: Records lateness of buffers and the reported\n        latency for each pad in a CSV file. Contains a script for\n        visualization.\n      - `pipeline-snapshot`: Creates a .dot file of all pipelines in the\n        application whenever requested.\n      - `queue-levels`: Records queue levels for each queue in a CSV file.\n        Contains a script for visualization.\n\n    - `uriplaylistbin`: Helper bin to gaplessly play a list of URIs.\n\n## Building\n\ngst-plugins-rs relies on [cargo-c](https://github.com/lu-zero/cargo-c/) to\ngenerate shared and static C libraries. It can be installed using:\n\n```\n$ cargo install cargo-c\n```\n\nThen you can easily build and test a specific plugin:\n\n```\n$ cargo cbuild -p gst-plugin-cdg\n$ GST_PLUGIN_PATH=\"target/x86_64-unknown-linux-gnu/debug:$GST_PLUGIN_PATH\" gst-inspect-1.0 cdgdec\n```\n\nReplace `x86_64-unknown-linux-gnu` with your system's Rust target triple (`rustc -vV`).\n\nThe plugin can also be installed system-wide:\n\n```\n$ cargo cbuild -p gst-plugin-cdg --prefix=/usr\n$ cargo cinstall -p gst-plugin-cdg --prefix=/usr\n```\n\nThis will install the plugin to `/usr/lib/gstreamer-1.0`.\nYou can use `--libdir` to pass a custom `lib` directory\nsuch as `/usr/lib/x86_64-linux-gnu` for example.\n\nNote that you can also just use `cargo` directly to build Rust static libraries\nand shared C libraries. `cargo-c` is mostly useful to build static C libraries\nand generate `pkg-config` files.\n\nIn case cargo complains about dependency versions after a `git pull`, `cargo update` may\nbe able to resolve those.\n\n## LICENSE\n\ngst-plugins-rs and all crates contained in here are licensed under one of the\nfollowing licenses\n\n * Mozilla Public License Version 2.0 ([LICENSE-MPL-2.0](LICENSE-MPL-2.0) or http://opensource.org/licenses/MPL-2.0)\n * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n * Lesser General Public License ([LICENSE-LGPLv2](LICENSE-LGPLv2)) version 2.1 or (at your option) any later version\n\nGStreamer itself is licensed under the Lesser General Public License version\n2.1 or (at your option) any later version: https://www.gnu.org/licenses/lgpl-2.1.html\n\n## Contribution\n\nAny kinds of contributions are welcome as a merge request.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in gst-plugins-rs by you shall be licensed under the license of\nthe plugin it is added to.\n\nFor new plugins the MPL-2 license is preferred.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdroege%2Fgst-plugin-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdroege%2Fgst-plugin-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdroege%2Fgst-plugin-rs/lists"}