{"id":13906240,"url":"https://github.com/go-gst/go-gst","last_synced_at":"2026-01-21T19:10:17.292Z","repository":{"id":187654501,"uuid":"677309136","full_name":"go-gst/go-gst","owner":"go-gst","description":"Gstreamer bindings and utilities for golang","archived":false,"fork":false,"pushed_at":"2025-12-04T15:51:27.000Z","size":11345,"stargazers_count":234,"open_issues_count":51,"forks_count":78,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-12-07T23:53:08.429Z","etag":null,"topics":["bindings","cgo","golang-package","gst","gstreamer"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"tinyzimmer/go-gst","license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-gst.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-11T08:48:27.000Z","updated_at":"2025-12-03T17:47:33.000Z","dependencies_parsed_at":"2023-09-26T19:34:10.845Z","dependency_job_id":"4bf845b4-7d19-4fb0-9dd8-2b97815d1804","html_url":"https://github.com/go-gst/go-gst","commit_stats":null,"previous_names":["go-gst/go-gst"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/go-gst/go-gst","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-gst%2Fgo-gst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-gst%2Fgo-gst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-gst%2Fgo-gst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-gst%2Fgo-gst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-gst","download_url":"https://codeload.github.com/go-gst/go-gst/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-gst%2Fgo-gst/sbom","scorecard":{"id":431935,"data":{"date":"2025-08-11","repo":{"name":"github.com/go-gst/go-gst","commit":"3a1d70d48c6f54b5e0f1be947b71b7ac2726c969"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Code-Review","score":5,"reason":"Found 3/6 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":5,"reason":"1 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/go-gst/go-gst/tests.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v2.1: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T03:34:43.846Z","repository_id":187654501,"created_at":"2025-08-19T03:34:43.846Z","updated_at":"2025-08-19T03:34:43.846Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28640457,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T18:04:35.752Z","status":"ssl_error","status_checked_at":"2026-01-21T18:03:55.054Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bindings","cgo","golang-package","gst","gstreamer"],"created_at":"2024-08-06T23:01:31.848Z","updated_at":"2026-01-21T19:10:17.274Z","avatar_url":"https://github.com/go-gst.png","language":"Go","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"![banner](./img/go-gst-banner.png)\n\n# go-gst: Go bindings for the GStreamer C libraries\n\n[![godoc reference](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/go-gst/go-gst)\n[![GoReportCard](https://goreportcard.com/badge/github.com/go-gst/go-gst)](https://goreportcard.com/report/github.com/go-gst/go-gst)\n\u003c!-- ![](https://github.com/go-gst/go-gst/workflows/Tests/badge.svg) --\u003e\n\nSee [pkg.go.dev](https://pkg.go.dev/github.com/go-gst/go-gst) references for documentation and examples.\n\nPlease make sure that you have followed the [official gstreamer installation instructions](https://gstreamer.freedesktop.org/documentation/installing/index.html?gi-language=c) before attempting to use the bindings or file an issue.\n\nThe bindings are not structured in a way to make version matching with GStreamer easy. We use github actions to verify against the latest supported GStreamer version that is supported by the action https://github.com/blinemedical/setup-gstreamer. Newer GStreamer versions will also work. Always try to use the [latest version of GStreamer](https://gstreamer.freedesktop.org/releases/).\n\n## Requirements\n\nFor building applications with this library you need the following:\n\n - `cgo`: You must set `CGO_ENABLED=1` in your environment when building.\n - `gcc` and `pkg-config`\n - GStreamer development files (the method for obtaining these will [differ depending on your OS](https://gstreamer.freedesktop.org/documentation/installing/index.html?gi-language=c))\n   - The core `gst` package utilizes GStreamer core\n   - Subpackages (e.g. `app`, `video`) will require development files from their corresponding GStreamer packages\n     - Look at `pkg_config.go` in the imported package to see which C libraries are needed.\n\n### Windows\n\nCompiling on Windows may require some more dancing around than on macOS or Linux.\nFirst, make sure you have [mingw](https://chocolatey.org/packages/mingw) and [pkgconfig](https://chocolatey.org/packages/pkgconfiglite) installed (links are for the Chocolatey packages).\nNext, go to the [GStreamer downloads](https://gstreamer.freedesktop.org/download/) page and download the latest \"development installer\" for your MinGW architecture. \nWhen running your applications on another Windows system, they will need to have the \"runtime\" installed as well.\n\nFinally, to compile the application you'll have to manually set your `PKG_CONFIG_PATH` to where you installed the GStreamer development files.\nFor example, if you installed GStreamer to `C:\\gstreamer`:\n\n```ps\nPS\u003e $env:PKG_CONFIG_PATH='C:\\gstreamer\\1.0\\mingw_x86_64\\lib\\pkgconfig'\nPS\u003e go build .\n```\n\n## Quickstart\n\nFor more examples see the `examples` folder [here](examples/).\n\n```go\n// This is the same as the `launch` example. See the godoc and other examples for more \n// in-depth usage of the bindings.\npackage main\n\nimport (\n    \"fmt\"\n    \"os\"\n    \"strings\"\n\n    \"github.com/go-gst/go-glib/glib\"\n    \"github.com/go-gst/go-gst/gst\"\n)\n\nfunc main() {\n    // This example expects a simple `gst-launch-1.0` string as arguments\n    if len(os.Args) == 1 {\n        fmt.Println(\"Pipeline string cannot be empty\")\n        os.Exit(1)\n    }\n\n    // Initialize GStreamer with the arguments passed to the program. Gstreamer\n    // and the bindings will automatically pop off any handled arguments leaving\n    // nothing but a pipeline string (unless other invalid args are present).\n    gst.Init(\u0026os.Args)\n\n    // Create a main loop. This is only required when utilizing signals via the bindings.\n    // In this example, the AddWatch on the pipeline bus requires iterating on the main loop.\n    mainLoop := glib.NewMainLoop(glib.MainContextDefault(), false)\n\n    // Build a pipeline string from the cli arguments\n    pipelineString := strings.Join(os.Args[1:], \" \")\n\n    /// Let GStreamer create a pipeline from the parsed launch syntax on the cli.\n    pipeline, err := gst.NewPipelineFromString(pipelineString)\n    if err != nil {\n        fmt.Println(err)\n        os.Exit(2)\n    }\n\n    // Add a message handler to the pipeline bus, printing interesting information to the console.\n    pipeline.GetPipelineBus().AddWatch(func(msg *gst.Message) bool {\n        switch msg.Type() {\n        case gst.MessageEOS: // When end-of-stream is received flush the pipeling and stop the main loop\n            pipeline.BlockSetState(gst.StateNull)\n            mainLoop.Quit()\n        case gst.MessageError: // Error messages are always fatal\n            err := msg.ParseError()\n            fmt.Println(\"ERROR:\", err.Error())\n            if debug := err.DebugString(); debug != \"\" {\n                fmt.Println(\"DEBUG:\", debug)\n            }\n            mainLoop.Quit()\n        default:\n            // All messages implement a Stringer. However, this is\n            // typically an expensive thing to do and should be avoided.\n            fmt.Println(msg)\n        }\n        return true\n    })\n\n    // Start the pipeline\n    pipeline.SetState(gst.StatePlaying)\n\n    // Block and iterate on the main loop\n    mainLoop.Run()\n}\n```\n\n## Contributing\n\nIf you find any issues with the bindings or spot areas where things can be improved, feel free to open a PR or start an Issue. A few things to note:\n\n - Compilation times are insanely slow when working within the bindings.\n - There are a lot of quirks that make generators difficult to deal with for these bindings, so currently everything is hand written. If you have a need for a new binding, feel free to open an issue or create a PR. Writing CGo bindings is not as hard as it seems. (Take a look at https://github.com/go-gst/go-gst/pull/53 for inspiration)\n - More examples would be nice.\n - Support for writing GStreamer plugins and custom elements via the bindings is there, but not well documented.\n - go-gst follows semantic versioning, so it should always be forward compatible for minor versions. If we find an issue in a function and the only way to fix it is to change the function signature, we will break it in a minor version. That way you \"get forced\" to use the fixed version.\n\nPlease make sure that you use the latest version of GStreamer before submitting an issue. If you are using an older version of GStreamer, please try to reproduce the issue with the [latest version](https://gstreamer.freedesktop.org/releases/) before submitting an issue.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-gst%2Fgo-gst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-gst%2Fgo-gst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-gst%2Fgo-gst/lists"}