You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

github.com/kyd-w/ion-sfu

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/kyd-w/ion-sfu

v1.0.2
Source
Go
Version published
Created
Source


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:

  • Best choice (uses docker): make protos.
  • 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

FAQs

Package last updated on 23 Apr 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts