• Stars
    star
    957
  • Rank 47,767 (Top 1.0 %)
  • Language
    Go
  • License
    MIT License
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Pure Go WebRTC SFU


Ion SFU

Go implementation of a WebRTC Selective Forwarding Unit

Slack Widget GoDoc Coverage Status Go Report Card License: MIT


A selective forwarding unit 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 or json-rpc interface.

Features

  • Audio/Video/Datachannel forwarding
  • Congestion Control (TWCC, REMB, RR/SR)
  • Unified plan semantics
  • Pub/Sub Peer Connection (O(n) port usage)
  • Audio level indication (RFC6464). "X is speaking"

End to end solutions

ion-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.

For "batteries-included", end-to-end solutions that are easier to deploy, check out:

  • LiveKit: Open source platform for real-time communication (SDKs for all major platforms)
  • Ion: Real-Distributed RTC System by pure Go and Flutter

Quickstart

Run the Echo Test example

docker-compose -f examples/echotest-jsonrpc/docker-compose.yaml up

Open the client

http://localhost:8000/

SFU with json-rpc signaling

The 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.

Using golang environment
go build ./cmd/signal/json-rpc/main.go && ./main -c config.toml
Using docker
docker run -p 7000:7000 -p 5000-5200:5000-5200/udp pionwebrtc/ion-sfu:latest-jsonrpc

SFU with gRPC signaling

For service-to-service communication, you can use the grpc interface. A common pattern is to call the grpc endpoints from a custom signaling service.

Using golang environment
go build ./cmd/signal/grpc/main.go && ./main -c config.toml
Using docker
docker run -p 50051:50051 -p 5000-5200:5000-5200/udp pionwebrtc/ion-sfu:latest-grpc

Documentation

Answers to some Frequenty Asked Questions.

Examples

To see some other ways of interacting with the ion-sfu instance, check out our examples.

Media Processing

ion-sfu supports real-time processing on media streamed through the sfu using ion-avp.

For an example of recording a MediaStream to webm, checkout the save-to-webm example.

License

MIT License - see LICENSE for full text

Development

Generate the protocol buffers and grpc code:

  1. Best choice (uses docker): make protos.
  2. Manually:
    • Install protocol buffers and the protcol buffers compiler. On Fedora dnf install protobuf protobuf-compiler.
    • go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
    • go get google.golang.org/protobuf/cmd/protoc-gen-go
    • protoc --go_out=. --go-grpc_out=. --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative cmd/signal/grpc/proto/sfu.proto