mirror of
https://github.com/livekit/livekit.git
synced 2026-03-30 15:35:41 +00:00
Docker-less install process (#828)
* installer * update install script * updated readme * fixed link * Added flutter * address review feedback * update readme with edits * modify slack badge URL in readme Co-authored-by: Russ Dsa <russelldsa@gmail.com>
This commit is contained in:
267
README.md
267
README.md
@@ -1,22 +1,33 @@
|
||||
# LiveKit - Open source, high performance WebRTC infrastructure
|
||||
# LiveKit: High-performance WebRTC
|
||||
|
||||
LiveKit is an open source project that provides scalable, multi-user conferencing over WebRTC. It's designed to give you
|
||||
everything you need to build real time video/audio/data capabilities in your applications.
|
||||
LiveKit is an open source project that provides scalable, multi-user conferencing based on WebRTC. It's designed to provide everything you need to build real-time video/audio/data capabilities in your applications.
|
||||
|
||||
LiveKit is written in Go, using the awesome [Pion WebRTC](https://github.com/pion/webrtc) implementation.
|
||||
LiveKit's server is written in Go, using the awesome [Pion WebRTC](https://github.com/pion/webrtc) implementation.
|
||||
|
||||
[](https://github.com/livekit/livekit/stargazers/)
|
||||
[](https://livekit.io/join-slack)
|
||||
[](https://github.com/livekit/livekit/actions/workflows/buildtest.yaml)
|
||||
[](https://github.com/livekit/livekit/releases/latest)
|
||||
[](https://github.com/livekit/livekit/blob/master/LICENSE)
|
||||
|
||||
## Features
|
||||
|
||||
- Scalable, distributed WebRTC SFU (Selective Forwarding Unit)
|
||||
- Modern, full-featured [client SDKs](https://docs.livekit.io/references/client-sdks/)
|
||||
- Built for production - JWT authentication and [server APIs](https://docs.livekit.io/guides/server-api)
|
||||
- Robust networking & connectivity. UDP/TCP/TURN
|
||||
- Easy to deploy - single binary, docker & kubernetes
|
||||
- Advanced features - speaker detection, simulcast, selective subscription, moderation APIs, and webhooks.
|
||||
- Modern, full-featured client SDKs
|
||||
- Built for production, supports JWT authentication
|
||||
- Robust networking and connectivity, UDP/TCP/TURN
|
||||
- Easy to deploy: single binary, Docker or Kubernetes
|
||||
- Advanced features including:
|
||||
- [speaker detection](https://docs.livekit.io/guides/room/receive/#speaker-detection)
|
||||
- [simulcast](https://docs.livekit.io/guides/room/publish/#video-simulcast)
|
||||
- [end-to-end optimizations](https://blog.livekit.io/livekit-one-dot-zero/)
|
||||
- [selective subscription](https://docs.livekit.io/guides/room/receive/#selective-subscription)
|
||||
- [moderation APIs](https://docs.livekit.io/guides/server-api/)
|
||||
- [webhooks](https://docs.livekit.io/guides/webhooks/)
|
||||
|
||||
## Documentation & Guides
|
||||
|
||||
Docs & Guides at: https://docs.livekit.io
|
||||
https://docs.livekit.io
|
||||
|
||||
## Try it live
|
||||
|
||||
@@ -25,110 +36,199 @@ Head to [our playground](https://livekit.io/playground) and give it a spin. Buil
|
||||
|
||||
## SDKs & Tools
|
||||
|
||||
Client SDKs:
|
||||
### Client SDKs
|
||||
|
||||
- [JavaScript](https://github.com/livekit/client-sdk-js) ([docs](https://docs.livekit.io/client-sdk-js/))
|
||||
- [React](https://github.com/livekit/livekit-react)
|
||||
- [iOS & MacOS - Swift](https://github.com/livekit/client-sdk-swift) ([docs](https://docs.livekit.io/client-sdk-swift/))
|
||||
- [Android - Kotlin](https://github.com/livekit/client-sdk-android) ([docs](https://docs.livekit.io/client-sdk-android/))
|
||||
- [Flutter](https://github.com/livekit/client-sdk-flutter) ([docs](https://docs.livekit.io/client-sdk-flutter/))
|
||||
- [Unity (WebGL)](https://github.com/livekit/client-sdk-unity-web) ([docs](https://livekit.github.io/client-sdk-unity-web/) [demo](https://unity.livekit.io))
|
||||
- [React Native](https://github.com/livekit/client-sdk-react-native)
|
||||
Client SDKs enable your frontend to include interactive, multi-user experiences.
|
||||
|
||||
Server SDKs:
|
||||
<table>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Repo</th>
|
||||
<th>
|
||||
<a href="https://docs.livekit.io/guides/room/events/#declarative-ui" target="_blank" rel="noopener noreferrer">Declarative UI</a>
|
||||
</th>
|
||||
<th>Links</th>
|
||||
</tr>
|
||||
<!-- BEGIN Template
|
||||
<tr>
|
||||
<td>Language</td>
|
||||
<td>
|
||||
<a href="" target="_blank" rel="noopener noreferrer"></a>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
END -->
|
||||
<!-- JavaScript -->
|
||||
<tr>
|
||||
<td>JavaScript (TypeScript)</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-js" target="_blank" rel="noopener noreferrer">client-sdk-js</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/livekit-react" target="_blank" rel="noopener noreferrer">React</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://docs.livekit.io/client-sdk-js/" target="_blank" rel="noopener noreferrer">docs</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-sdk-js/tree/main/example" target="_blank" rel="noopener noreferrer">JS example</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-sdk-js/tree/main/example" target="_blank" rel="noopener noreferrer">React example</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Swift -->
|
||||
<tr>
|
||||
<td>Swift (iOS / MacOS)</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-swift" target="_blank" rel="noopener noreferrer">client-sdk-swift</a>
|
||||
</td>
|
||||
<td>Swift UI</td>
|
||||
<td>
|
||||
<a href="https://docs.livekit.io/client-sdk-swift/" target="_blank" rel="noopener noreferrer">docs</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-example-swift" target="_blank" rel="noopener noreferrer">example</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Kotlin -->
|
||||
<tr>
|
||||
<td>Kotlin (Android)</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-android" target="_blank" rel="noopener noreferrer">client-sdk-android</a>
|
||||
</td>
|
||||
<td>Compose</td>
|
||||
<td>
|
||||
<a href="https://docs.livekit.io/client-sdk-android/index.html" target="_blank" rel="noopener noreferrer">docs</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-sdk-android/tree/main/sample-app/src/main/java/io/livekit/android/sample" target="_blank" rel="noopener noreferrer">example</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-sdk-android/tree/main/sample-app-compose/src/main/java/io/livekit/android/composesample" target="_blank" rel="noopener noreferrer">Compose example</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Flutter</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-flutter" target="_blank" rel="noopener noreferrer">client-sdk-flutter</a>
|
||||
</td>
|
||||
<td>native</td>
|
||||
<td>
|
||||
<a href="https://docs.livekit.io/client-sdk-flutter/" target="_blank" rel="noopener noreferrer">docs</a>
|
||||
|
|
||||
<a href="https://github.com/livekit/client-sdk-flutter/tree/main/example" target="_blank" rel="noopener noreferrer">example</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Unity -->
|
||||
<tr>
|
||||
<td>Unity WebGL</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-unity-web" target="_blank" rel="noopener noreferrer">client-sdk-unity-web</a>
|
||||
</td>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="https://livekit.github.io/client-sdk-unity-web/" target="_blank" rel="noopener noreferrer">docs</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- React Native -->
|
||||
<tr>
|
||||
<td>React Native (beta)</td>
|
||||
<td>
|
||||
<a href="https://github.com/livekit/client-sdk-react-native" target="_blank" rel="noopener noreferrer">client-sdk-react-native</a>
|
||||
</td>
|
||||
<td>native</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
- [JavaScript](https://github.com/livekit/server-sdk-js) ([docs](https://docs.livekit.io/server-sdk-js/))
|
||||
- [Go](https://github.com/livekit/server-sdk-go) ([docs](https://pkg.go.dev/github.com/livekit/server-sdk-go))
|
||||
- [Ruby](https://github.com/livekit/server-sdk-ruby)
|
||||
- [Python (community)](https://github.com/tradablebits/livekit-server-sdk-python)
|
||||
- [PHP (community)](https://github.com/agence104/livekit-server-sdk-php)
|
||||
### Server SDKs
|
||||
|
||||
Tools:
|
||||
Server SDKs enable your backend to generate [access tokens](https://docs.livekit.io/guides/access-tokens/), call [server APIs](https://docs.livekit.io/guides/server-api/), and receive [webhooks](https://docs.livekit.io/guides/webhooks/). In addition, the Go SDK includes client capabilities, enabling you to build automations that behave like end-users.
|
||||
|
||||
- [Egress](https://github.com/livekit/egress): export and record your rooms
|
||||
- [livekit-cli](https://github.com/livekit/livekit-cli): command line admin & tools
|
||||
- [livekit-load-tester](https://github.com/livekit/livekit-cli#livekit-load-tester): load testing
|
||||
| Language | Repo | Docs |
|
||||
| :---------------------- | :-------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |
|
||||
| Go | [server-sdk-go](https://github.com/livekit/server-sdk-go) | [docs](https://pkg.go.dev/github.com/livekit/server-sdk-go) |
|
||||
| JavaScript (TypeScript) | [server-sdk-js](https://github.com/livekit/server-sdk-js) | [docs](https://docs.livekit.io/server-sdk-js/) |
|
||||
| Ruby | [server-sdk-ruby](https://github.com/livekit/server-sdk-ruby) | |
|
||||
| Python (community) | [tradablebits/livekit-server-sdk-python](https://github.com/tradablebits/livekit-server-sdk-python) | |
|
||||
| PHP (community) | [agence104/livekit-server-sdk-php](https://github.com/agence104/livekit-server-sdk-php) | |
|
||||
|
||||
### Ecosystem & Tools
|
||||
|
||||
- [Egress](https://github.com/livekit/egress) - export and record your rooms
|
||||
- [CLI](https://github.com/livekit/livekit-cli) - command line interface & load tester
|
||||
- [Docker image](https://hub.docker.com/r/livekit/livekit-server)
|
||||
- [Helm charts](https://github.com/livekit/livekit-helm)
|
||||
|
||||
## Quickstart
|
||||
## Install
|
||||
|
||||
### Generate config file and keys
|
||||
We recommend installing [livekit-cli](https://github.com/livekit/livekit-cli) along with the server. It lets you access server APIs, create tokens, and generate test traffic.
|
||||
|
||||
### MacOS
|
||||
|
||||
```shell
|
||||
docker run --rm -v$PWD:/output livekit/generate --local
|
||||
brew install livekit
|
||||
```
|
||||
|
||||
The above command generates a `livekit.yaml` you can use to start LiveKit. It'll contain an API key/secret pair you can
|
||||
use with your LiveKit install.
|
||||
|
||||
### Starting with docker
|
||||
### Linux
|
||||
|
||||
```shell
|
||||
docker run --rm -p 7880:7880 \
|
||||
-p 7881:7881 \
|
||||
-p 7882:7882/udp \
|
||||
-v $PWD/livekit.yaml:/livekit.yaml \
|
||||
livekit/livekit-server \
|
||||
--config /livekit.yaml \
|
||||
--node-ip <machine-ip>
|
||||
curl -sSL https://get.livekit.io | bash
|
||||
```
|
||||
|
||||
When running with docker, `--node-ip` needs to be set to your machine's IP address. If the service will be exposed to
|
||||
the public Internet, this should the machine's public IP.
|
||||
### Windows
|
||||
|
||||
Download the [latest release here](https://github.com/livekit/livekit/releases/latest)
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Starting LiveKit
|
||||
|
||||
Start LiveKit by running `livekit-server` with no arguments. It will start in development mode by default with a placeholder API key/secret pair.
|
||||
|
||||
```
|
||||
API Key: devkey
|
||||
API Secret: secret
|
||||
```
|
||||
|
||||
To customize your setup for production, refer to our [deployment docs](https://docs.livekit.io/deploy/)
|
||||
|
||||
### Creating an access token
|
||||
|
||||
A user connecting to a LiveKit room requires an [access token](https://docs.livekit.io/guides/access-tokens/). Access tokens (JWT) encode the user's identity and the room permissions they've been granted. You can generate a token with our CLI:
|
||||
|
||||
```shell
|
||||
livekit-cli create-token \
|
||||
--api-key devkey --api-secret secret \
|
||||
--join --room my-first-room --identity user1 \
|
||||
--valid-for 24h
|
||||
```
|
||||
|
||||
### Test with example app
|
||||
|
||||
Head over to the [example app](https://example.livekit.io) and enter the generated token to connect to your LiveKit
|
||||
server. This app is built with our [React SDK](https://github.com/livekit/livekit-react).
|
||||
Head over to our [example app](https://example.livekit.io) and enter a generated token to connect to your LiveKit server. This app is built with our [React SDK](https://github.com/livekit/livekit-react).
|
||||
|
||||
Once connected, your video and audio are now published to your new LiveKit instance!
|
||||
Once connected, your video and audio are now being published to your new LiveKit instance!
|
||||
|
||||
### Generating access tokens (JWT)
|
||||
|
||||
To add more users to a room, you'll have to create a token for each
|
||||
participant. [Learn more about access tokens](https://docs.livekit.io/guides/access-tokens/).
|
||||
|
||||
`livekit-server` provides a convenient sub-command to create a development token. This token has an expiration of a
|
||||
month, which is useful for development and testing, but not appropriate for production use.
|
||||
### Simulating a test publisher
|
||||
|
||||
```shell
|
||||
docker run --rm -e LIVEKIT_KEYS="<api-key>: <api-secret>" \
|
||||
livekit/livekit-server create-join-token \
|
||||
--room "<room-name>" \
|
||||
--identity "<participant-identity>"
|
||||
livekit-cli join-room \
|
||||
--url ws://localhost:7880 \
|
||||
--api-key devkey --api-secret secret \
|
||||
--room my-first-room --identity bot-user1 \
|
||||
--publish-demo
|
||||
```
|
||||
|
||||
## Deploying to server
|
||||
This command publishes a looped demo video to a room. Due to how the video clip was encoded (keyframes every 3s), there's a slight delay before the browser has sufficient data to begin rendering frames. This is an artifact of the simulation.
|
||||
|
||||
Deployment Docs: https://docs.livekit.io/deploy/
|
||||
## Deploying to a server
|
||||
|
||||
### Single node server
|
||||
|
||||
Use our deploy config generator to set up a single node deployment with automatic TLS termination and built-in TURN.
|
||||
|
||||
It includes a cloud-init/setup script that's supported by most cloud environments.
|
||||
|
||||
```shell
|
||||
docker run --rm -it -v$PWD:/output livekit/generate
|
||||
```
|
||||
|
||||
### Kubernetes
|
||||
|
||||
We publish a [helm chart](https://github.com/livekit/livekit-helm) that helps you to set up a cluster with high
|
||||
availability. For detailed instructions, see [Kubernetes guide](https://docs.livekit.io/deploy/kubernetes)
|
||||
|
||||
### Testing your deployment
|
||||
|
||||
Use the [connection tester](https://livekit.io/connection-test) to ensure your installation is set up properly for user
|
||||
traffic.
|
||||
Read our [deployment docs](https://docs.livekit.io/deploy/) for more information.
|
||||
|
||||
## Building from source
|
||||
|
||||
Pre-requisites:
|
||||
|
||||
* Go 1.15+ is installed
|
||||
* GOPATH/bin is in your PATH
|
||||
- Go 1.15+ is installed
|
||||
- GOPATH/bin is in your PATH
|
||||
|
||||
Then run
|
||||
|
||||
@@ -141,9 +241,8 @@ mage
|
||||
|
||||
## Contributing
|
||||
|
||||
We welcome your contributions to make LiveKit better! Please join us
|
||||
[on Slack](http://livekit.io/join-slack) to discuss your ideas and/or
|
||||
submit PRs.
|
||||
We welcome your contributions toward improving LiveKit! Please join us
|
||||
[on Slack](http://livekit.io/join-slack) to discuss your ideas and/or PRs.
|
||||
|
||||
## License
|
||||
|
||||
|
||||
73
install-livekit.sh
Executable file
73
install-livekit.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
# LiveKit install script for Linux
|
||||
|
||||
set -u
|
||||
set -o errtrace
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
REPO="livekit"
|
||||
INSTALL_PATH="/usr/local/bin"
|
||||
|
||||
log() { printf "%b\n" "$*"; }
|
||||
abort() {
|
||||
printf "%s\n" "$@" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# returns the latest version according to GH
|
||||
# i.e. 1.0.0
|
||||
get_latest_version()
|
||||
{
|
||||
latest_version=$(curl -s https://api.github.com/repos/livekit/$REPO/releases/latest | grep -oP '"tarball_url": ".*/tarball/v\K([^/]*)(?=")')
|
||||
printf "%s" "$latest_version"
|
||||
}
|
||||
|
||||
# Ensure bash is used
|
||||
if [ -z "${BASH_VERSION:-}" ]
|
||||
then
|
||||
abort "This script requires bash"
|
||||
fi
|
||||
|
||||
# Check cURL is installed
|
||||
if ! command -v curl >/dev/null
|
||||
then
|
||||
abort "cURL is required and is not found"
|
||||
fi
|
||||
|
||||
# OS check
|
||||
OS="$(uname)"
|
||||
if [[ "${OS}" == "Darwin" ]]
|
||||
then
|
||||
abort "Installer not supported on MacOS, please install using Homebrew."
|
||||
elif [[ "${OS}" != "Linux" ]]
|
||||
then
|
||||
abort "Installer is only supported on Linux."
|
||||
fi
|
||||
|
||||
ARCH="$(/usr/bin/uname -m)"
|
||||
|
||||
# fix arch on linux
|
||||
if [[ "${ARCH}" == "aarch64" ]]
|
||||
then
|
||||
ARCH="arm64"
|
||||
elif [[ "${ARCH}" == "x86_64" ]]
|
||||
then
|
||||
ARCH="amd64"
|
||||
fi
|
||||
|
||||
VERSION=$(get_latest_version)
|
||||
ARCHIVE_URL="https://github.com/livekit/$REPO/releases/download/v${VERSION}/${REPO}_${VERSION}_linux_${ARCH}.tar.gz"
|
||||
|
||||
# Ensure version follows SemVer
|
||||
if ! [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
|
||||
then
|
||||
abort "Invalid version: ${VERSION}"
|
||||
fi
|
||||
|
||||
log "Installing ${REPO} ${VERSION}"
|
||||
log "Downloading from ${ARCHIVE_URL}..."
|
||||
|
||||
curl -s -L "${ARCHIVE_URL}" | tar xzf - -C "${INSTALL_PATH}" --wildcards --no-anchored "$REPO*"
|
||||
|
||||
log "\nlivekit-server is installed to $INSTALL_PATH\n"
|
||||
Reference in New Issue
Block a user