-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
76 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
<!--BEGIN_BANNER_IMAGE--> | ||
<picture> | ||
<source media="(prefers-color-scheme: dark)" srcset="/.github/banner_dark.png"> | ||
<source media="(prefers-color-scheme: light)" srcset="/.github/banner_light.png"> | ||
<img style="width:100%;" alt="The LiveKit icon, the name of the repository and some sample code in the background." src="/.github/banner_light.png"> | ||
</picture> | ||
<!--END_BANNER_IMAGE--> | ||
|
||
# LiveKit SIP | ||
|
||
<!--BEGIN_DESCRIPTION--> | ||
WebRTC is proving to be a versatile and scalable transport protocol both for media ingestion and delivery. However, not all devices support WebRTC. SIP provides a way to bring SIP traffic into a LiveKit room. | ||
<!--END_DESCRIPTION--> | ||
|
||
## Capabilities | ||
|
||
SIP is meant to be a full featured SIP bridge, not all features are implemented yet. Currently, the following features are supported: | ||
- Dialing Out (Sending INVITEs) | ||
- Dialing In (Accepting INVITEs) | ||
- Digest Authentication | ||
- Touch Tone (Sending and Reading DTMF) | ||
|
||
If you need something added, we would love to hear from you! | ||
|
||
## Documentation | ||
|
||
### Workflow | ||
|
||
To accept SIP traffic into your running SIP service, the workflow goes like this: | ||
|
||
* create an SIP Trunk with `CreateSIPTrunk` API (to livekit-server) | ||
* create an SIP Dispatch Rule with `CreateSIPDispatchRule` API (to livekit-server) | ||
* SIP service receives a call | ||
* SIP service connects to the LiveKit room and SIP caller is a participant | ||
|
||
### Service Architecture | ||
|
||
The SIP service and the LiveKit server communicate over Redis. Redis is also used as storage for the SIP session state. The SIP service must also expose a public IP address for remote SIP peers to connect to. | ||
|
||
### Config | ||
|
||
The SIP service takes a YAML config file: | ||
|
||
```yaml | ||
# required fields | ||
api_key: livekit server api key. LIVEKIT_API_KEY env can be used instead | ||
api_secret: livekit server api secret. LIVEKIT_API_SECRET env can be used instead | ||
ws_url: livekit server websocket url. LIVEKIT_WS_URL env can be used instead | ||
redis: | ||
address: must be the same redis address used by your livekit server | ||
username: redis username | ||
password: redis password | ||
db: redis db | ||
|
||
# optional fields | ||
health_port: if used, will open an http port for health checks | ||
prometheus_port: port used to collect prometheus metrics. Used for autoscaling | ||
log_level: debug, info, warn, or error (default info) | ||
sip_port: port to listen and send SIP traffic (default 5060) | ||
rtp_port: port to listen and send RTP traffic (default 10000-20000) | ||
``` | ||
The config file can be added to a mounted volume with its location passed in the SIP_CONFIG_FILE env var, or its body can be passed in the SIP_CONFIG_BODY env var. | ||
<!--BEGIN_REPO_NAV--> | ||
<br/><table> | ||
<thead><tr><th colspan="2">LiveKit Ecosystem</th></tr></thead> | ||
<tbody> | ||
<tr><td>Client SDKs</td><td><a href="https://github.com/livekit/components-js">Components</a> · <a href="https://github.com/livekit/client-sdk-js">JavaScript</a> · <a href="https://github.com/livekit/client-sdk-swift">iOS/macOS</a> · <a href="https://github.com/livekit/client-sdk-android">Android</a> · <a href="https://github.com/livekit/client-sdk-flutter">Flutter</a> · <a href="https://github.com/livekit/client-sdk-react-native">React Native</a> · <a href="https://github.com/livekit/client-sdk-rust">Rust</a> · <a href="https://github.com/livekit/client-sdk-python">Python</a> · <a href="https://github.com/livekit/client-sdk-unity-web">Unity (web)</a> · <a href="https://github.com/livekit/client-sdk-unity">Unity (beta)</a></td></tr><tr></tr> | ||
<tr><td>Server SDKs</td><td><a href="https://github.com/livekit/server-sdk-js">Node.js</a> · <a href="https://github.com/livekit/server-sdk-go">Golang</a> · <a href="https://github.com/livekit/server-sdk-ruby">Ruby</a> · <a href="https://github.com/livekit/server-sdk-kotlin">Java/Kotlin</a> · <a href="https://github.com/agence104/livekit-server-sdk-php">PHP (community)</a> · <a href="https://github.com/tradablebits/livekit-server-sdk-python">Python (community)</a></td></tr><tr></tr> | ||
<tr><td>Services</td><td><a href="https://github.com/livekit/livekit">Livekit server</a> · <a href="https://github.com/livekit/egress">Egress</a> · <b>Ingress</b></td></tr><tr></tr> | ||
<tr><td>Resources</td><td><a href="https://docs.livekit.io">Docs</a> · <a href="https://github.com/livekit-examples">Example apps</a> · <a href="https://livekit.io/cloud">Cloud</a> · <a href="https://docs.livekit.io/oss/deployment">Self-hosting</a> · <a href="https://github.com/livekit/livekit-cli">CLI</a></td></tr> | ||
</tbody> | ||
</table> | ||
<!--END_REPO_NAV--> |