{"id":28576877,"url":"https://github.com/pion/interceptor","last_synced_at":"2026-01-12T09:39:26.685Z","repository":{"id":37247382,"uuid":"316276601","full_name":"pion/interceptor","owner":"pion","description":"Pluggable RTP/RTCP processors for building real time communication","archived":false,"fork":false,"pushed_at":"2025-12-20T23:22:15.000Z","size":670,"stargazers_count":139,"open_issues_count":46,"forks_count":85,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-12-22T20:57:52.461Z","etag":null,"topics":["go","golang","pion"],"latest_commit_sha":null,"homepage":"https://pion.ly/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pion.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":"2020-11-26T15:56:02.000Z","updated_at":"2025-12-20T23:20:20.000Z","dependencies_parsed_at":"2023-10-04T04:57:32.512Z","dependency_job_id":"d1fb4789-b85e-42a7-94ca-23437827aecb","html_url":"https://github.com/pion/interceptor","commit_stats":{"total_commits":184,"total_committers":30,"mean_commits":6.133333333333334,"dds":0.7989130434782609,"last_synced_commit":"142f17f90b527434b62ce2fd92676e6e262cd807"},"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/pion/interceptor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pion%2Finterceptor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pion%2Finterceptor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pion%2Finterceptor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pion%2Finterceptor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pion","download_url":"https://codeload.github.com/pion/interceptor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pion%2Finterceptor/sbom","scorecard":{"id":279629,"data":{"date":"2025-08-11","repo":{"name":"github.com/pion/interceptor","commit":"a6f4268f87e2c48268d185562014dcac46e390e9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.2,"checks":[{"name":"Maintained","score":10,"reason":"20 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Code-Review","score":7,"reason":"Found 13/18 approved changesets -- score normalized to 7","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":"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/api.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/api.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/codeql-analysis.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/lint.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/renovate-go-sum-fix.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/renovate-go-sum-fix.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/reuse.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/reuse.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/test.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/test.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/test.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tidy-check.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/pion/interceptor/tidy-check.yaml/master?enable=pin","Info:   0 out of  10 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/api.yaml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yaml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/renovate-go-sum-fix.yaml:1","Warn: no topLevel permission defined: .github/workflows/reuse.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yaml:1","Warn: no topLevel permission defined: .github/workflows/tidy-check.yaml: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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/pion/.github/SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/pion/.github/SECURITY.md:1","Info: Found text in security policy: github.com/pion/.github/SECURITY.md:1"],"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":5,"reason":"SAST tool is not run on all commits -- score normalized to 5","details":["Warn: 16 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"}}]},"last_synced_at":"2025-08-17T15:25:01.680Z","repository_id":37247382,"created_at":"2025-08-17T15:25:01.680Z","updated_at":"2025-08-17T15:25:01.680Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["go","golang","pion"],"created_at":"2025-06-11T00:07:42.926Z","updated_at":"2026-01-12T09:39:26.666Z","avatar_url":"https://github.com/pion.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  Pion Interceptor\n  \u003cbr\u003e\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eRTP and RTCP processors for building real time communications\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pion.ly\"\u003e\u003cimg src=\"https://img.shields.io/badge/pion-interceptor-gray.svg?longCache=true\u0026colorB=brightgreen\" alt=\"Pion Interceptor\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/PngbdqpFbt\"\u003e\u003cimg src=\"https://img.shields.io/badge/join-us%20on%20discord-gray.svg?longCache=true\u0026logo=discord\u0026colorB=brightblue\" alt=\"join us on Discord\"\u003e\u003c/a\u003e \u003ca href=\"https://bsky.app/profile/pion.ly\"\u003e\u003cimg src=\"https://img.shields.io/badge/follow-us%20on%20bluesky-gray.svg?longCache=true\u0026logo=bluesky\u0026colorB=brightblue\" alt=\"Follow us on Bluesky\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/pion/interceptor/test.yaml\"\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/pion/interceptor\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/github.com/pion/interceptor.svg\" alt=\"Go Reference\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/pion/interceptor\"\u003e\u003cimg src=\"https://codecov.io/gh/pion/interceptor/branch/master/graph/badge.svg\" alt=\"Coverage Status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/pion/interceptor\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/pion/interceptor\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\nInterceptor is a framework for building RTP/RTCP communication software. This framework defines\na interface that each interceptor must satisfy. These interceptors are then run sequentially. We\nalso then provide common interceptors that will be useful for building RTC software.\n\nThis package was built for [pion/webrtc](https://github.com/pion/webrtc), but we designed it to be consumable\nby anyone. With the following tenets in mind.\n\n* Useful defaults. Each interceptor will be configured to give you a good default experience.\n* Unblock unique use cases. New use cases are what is driving WebRTC, we want to empower them.\n* Encourage modification. Add your own interceptors without forking. Mixing with the ones we provide.\n* Empower learning. This code base should be useful to read and learn even if you aren't using Pion.\n\n### Current Interceptors\n* [NACK Generator/Responder](https://github.com/pion/interceptor/tree/master/pkg/nack)\n* [Sender and Receiver Reports](https://github.com/pion/interceptor/tree/master/pkg/report)\n* [Transport Wide Congestion Control Feedback](https://github.com/pion/interceptor/tree/master/pkg/twcc)\n* [Packet Dump](https://github.com/pion/interceptor/tree/master/pkg/packetdump)\n* [Google Congestion Control](https://github.com/pion/interceptor/tree/master/pkg/gcc)\n* [Stats](https://github.com/pion/interceptor/tree/master/pkg/stats) A [webrtc-stats](https://www.w3.org/TR/webrtc-stats/) compliant statistics generation\n* [Interval PLI](https://github.com/pion/interceptor/tree/master/pkg/intervalpli) Generate PLI on a interval. Useful when no decoder is available.\n* [FlexFec](https://github.com/pion/interceptor/tree/master/pkg/flexfec) – [FlexFEC-03](https://datatracker.ietf.org/doc/html/draft-ietf-payload-flexible-fec-scheme-03) encoder implementation\n\n### Planned Interceptors\n* Bandwidth Estimation\n  - [NADA](https://tools.ietf.org/html/rfc8698)\n* JitterBuffer, re-order packets and wait for arrival\n* [RTCP Feedback for Congestion Control](https://datatracker.ietf.org/doc/html/rfc8888) the standardized alternative to TWCC.\n\n### Interceptor Public API\nThe public interface is defined in [interceptor.go](https://github.com/pion/interceptor/blob/master/interceptor.go).\nThe methods you need to satisy are broken up into 4 groups.\n\n* `BindRTCPWriter` and `BindRTCPReader` allow you to inspect/modify RTCP traffic.\n* `BindLocalStream` and `BindRemoteStream` notify you of a new SSRC stream and allow you to inspect/modify.\n* `UnbindLocalStream` and `UnbindRemoteStream` notify you when a SSRC stream has been removed\n* `Close` called when the interceptor is closed.\n\nInterceptors also pass Attributes between each other. These are a collection of key/value pairs and are useful for storing metadata\nor caching.\n\n[noop.go](https://github.com/pion/interceptor/blob/master/noop.go) is an interceptor that satisfies this interface, but does nothing.\nYou can embed this interceptor as a starting point so you only need to define exactly what you need.\n\n[chain.go]( https://github.com/pion/interceptor/blob/master/chain.go) is used to combine multiple interceptors into one. They are called\nsequentially as the packet moves through them.\n\n### Examples\nThe [examples](https://github.com/pion/interceptor/blob/master/examples) directory provides some basic examples. If you need more please file an issue!\nYou should also look in [pion/webrtc](https://github.com/pion/webrtc) for real world examples.\n\n### Roadmap\nThe library is used as a part of our WebRTC implementation. Please refer to that [roadmap](https://github.com/pion/webrtc/issues/9) to track our major milestones.\n\n### Community\nPion has an active community on the [Discord](https://discord.gg/PngbdqpFbt).\n\nFollow the [Pion Bluesky](https://bsky.app/profile/pion.ly) or [Pion Twitter](https://twitter.com/_pion) for project updates and important WebRTC news.\n\nWe are always looking to support **your projects**. Please reach out if you have something to build!\nIf you need commercial support or don't want to use public methods you can contact us at [team@pion.ly](mailto:team@pion.ly)\n\n### Contributing\nCheck out the [contributing wiki](https://github.com/pion/webrtc/wiki/Contributing) to join the group of amazing people making this project possible\n\n### License\nMIT License - see [LICENSE](LICENSE) for full text\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpion%2Finterceptor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpion%2Finterceptor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpion%2Finterceptor/lists"}