{"id":13615328,"url":"https://github.com/ionorg/ion-sfu","last_synced_at":"2025-05-16T04:03:41.128Z","repository":{"id":38197260,"uuid":"274944199","full_name":"ionorg/ion-sfu","owner":"ionorg","description":"Pure Go WebRTC SFU","archived":false,"fork":false,"pushed_at":"2023-07-21T08:27:20.000Z","size":4804,"stargazers_count":936,"open_issues_count":51,"forks_count":232,"subscribers_count":39,"default_branch":"master","last_synced_at":"2024-04-17T22:02:03.501Z","etag":null,"topics":["golang","grpc","json-rpc","sfu","webrtc"],"latest_commit_sha":null,"homepage":"","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/ionorg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"open_collective":"pion-ion"}},"created_at":"2020-06-25T14:57:06.000Z","updated_at":"2024-04-11T10:22:24.000Z","dependencies_parsed_at":"2023-07-27T22:45:59.085Z","dependency_job_id":null,"html_url":"https://github.com/ionorg/ion-sfu","commit_stats":{"total_commits":1030,"total_committers":68,"mean_commits":"15.147058823529411","dds":0.8145631067961165,"last_synced_commit":"daf197ada794c66ab01b7fe4e32718cbc4dba005"},"previous_names":["pion/ion-sfu"],"tags_count":127,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionorg%2Fion-sfu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionorg%2Fion-sfu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionorg%2Fion-sfu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionorg%2Fion-sfu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ionorg","download_url":"https://codeload.github.com/ionorg/ion-sfu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464891,"owners_count":22075570,"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":["golang","grpc","json-rpc","sfu","webrtc"],"created_at":"2024-08-01T20:01:11.980Z","updated_at":"2025-05-16T04:03:41.108Z","avatar_url":"https://github.com/ionorg.png","language":"Go","funding_links":["https://opencollective.com/pion-ion"],"categories":["Go","Deployments"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  Ion SFU\n  \u003cbr\u003e\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eGo implementation of a WebRTC Selective Forwarding Unit\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pion.ly/slack\"\u003e\u003cimg src=\"https://img.shields.io/badge/join-us%20on%20slack-gray.svg?longCache=true\u0026logo=slack\u0026colorB=brightgreen\" alt=\"Slack Widget\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/pion/ion-sfu\"\u003e\u003cimg src=\"https://godoc.org/github.com/pion/ion-sfu?status.svg\" alt=\"GoDoc\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/pion/ion-sfu\"\u003e\u003cimg src=\"https://codecov.io/gh/pion/ion-sfu/branch/master/graph/badge.svg\" alt=\"Coverage Status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/pion/ion-sfu\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/pion/ion-sfu\" 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\nA [selective forwarding unit](https://webrtcglossary.com/sfu/) is a video routing service which allows webrtc sessions to scale more efficiently. This package provides a simple, flexible, high performance Go implementation of a WebRTC SFU. It can be called directly or through a [gRPC](cmd/signal/grpc) or [json-rpc](cmd/signal/json-rpc) interface.\n\n## Features\n\n* Audio/Video/Datachannel forwarding\n* Congestion Control (TWCC, REMB, RR/SR)\n* Unified plan semantics\n* Pub/Sub Peer Connection (`O(n)` port usage)\n* Audio level indication (RFC6464). \"X is speaking\"\n\n## End to end solutions\n\nion-sfu is the engine behind several projects. It's designed to be focused, with minimal signaling or external dependencies. It's simple to embed ion-sfu within your service: we include a few examples inside `cmd/signal`.\n\nFor \"batteries-included\", end-to-end solutions that are easier to deploy, check out:\n\n* [LiveKit](https://github.com/livekit/livekit-server): Open source platform for real-time communication (SDKs for all major platforms)\n* [Ion](https://github.com/pion/ion): Real-Distributed RTC System by pure Go and Flutter\n\n## Quickstart\n\nRun the Echo Test example\n\n```\ndocker-compose -f examples/echotest-jsonrpc/docker-compose.yaml up\n```\n\nOpen the client\n```\nhttp://localhost:8000/\n```\n\n### SFU with json-rpc signaling\n\nThe json-rpc signaling service can be used to easily get up and running with the sfu. It can be used with the [corresponding javascript signaling module](https://github.com/pion/ion-sdk-js/blob/master/src/signal/json-rpc-impl.ts).\n\n##### Using golang environment\n\n```\ngo build ./cmd/signal/json-rpc/main.go \u0026\u0026 ./main -c config.toml\n```\n\n##### Using docker\n\n```\ndocker run -p 7000:7000 -p 5000-5200:5000-5200/udp pionwebrtc/ion-sfu:latest-jsonrpc\n```\n\n### SFU with gRPC signaling\n\nFor service-to-service communication, you can use the grpc interface. A common pattern is to call the grpc endpoints from a custom signaling service.\n\n##### Using golang environment\n\n```\ngo build ./cmd/signal/grpc/main.go \u0026\u0026 ./main -c config.toml\n```\n\n##### Using docker\n\n```\ndocker run -p 50051:50051 -p 5000-5200:5000-5200/udp pionwebrtc/ion-sfu:latest-grpc\n```\n\n## Documentation\n\nAnswers to some [Frequenty Asked Questions](FAQ.md).\n\n## Examples\n\nTo see some other ways of interacting with the ion-sfu instance, check out our [examples](examples).\n\n## Media Processing\n\n`ion-sfu` supports real-time processing on media streamed through the sfu using [`ion-avp`](https://github.com/pion/ion-avp).\n\nFor an example of recording a MediaStream to webm, checkout the [save-to-webm](https://github.com/pion/ion-avp/tree/master/examples/save-to-webm) example.\n\n### License\n\nMIT License - see [LICENSE](LICENSE) for full text\n\n## Development\n\nGenerate the protocol buffers and grpc code:\n\n 1. Best choice (uses docker): `make protos`.\n 2. Manually:\n     - Install protocol buffers and the protcol buffers compiler. On Fedora `dnf install protobuf protobuf-compiler`.\n     - `go get google.golang.org/grpc/cmd/protoc-gen-go-grpc`\n     - `go get google.golang.org/protobuf/cmd/protoc-gen-go`\n     - `protoc --go_out=. --go-grpc_out=. --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative cmd/signal/grpc/proto/sfu.proto`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fionorg%2Fion-sfu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fionorg%2Fion-sfu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fionorg%2Fion-sfu/lists"}