* Try sending small key frames to clear decoded buffer Problem: -------- With transceiver re-use, client disables/enables tracks. With video, this retains the last picture and when a new track starts, there is a brief moment when the old stream is displayed till there is data from new stream to decode and display. Fix: --- Send small key frames before closing DownTrack to try and clear the decoder display buffer. Testing: -------- Tried with Chrome/Safari/Firefox and they worked. But, very rarely, the last frames do not seem to show up. In fact, 6 frames are sent and webrtc internals (in Firefox) reports anywhere from 1 - 6 frames at the small resolution. Unclear as to why it does not get all the frames or why it reports less than 6. A not so small percentage of times (maybe 1 in 15 - 20), have seen no small frame reported at all. TODO: ---- - Have to support more video codecs - Would this be an issue for audio also? Should we send something to handle that? Probably not necessary as video is more jarring. * Make VP8 Key Frame a const * Need a packet factory buffer for simple tracks too as we are using the VP8 munger for simple tracks too because of the need to send blank frames at the end. Also, making the writeBlankFrameRTP a private function. And adding a check to not send blank frames if nothing has been sent on that DownTrack.
LiveKit - Open source, distributed video/audio rooms over 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 capabilities in your applications.
Features
- Horizontally scalable WebRTC Selective Forwarding Unit (SFU)
- Modern, full-featured client SDKs for JS, iOS, Android, and Flutter
- Built for production - JWT authentication and server APIs
- Robust networking & connectivity, over UDP & TCP
- Easy to deploy - pure Go & single binary
- Advanced features - speaker detection, simulcast, selective subscription, moderation APIs, and webhooks.
Documentation & Guides
Docs & Guides at: https://docs.livekit.io
Try it live
Head to our playground and give it a spin. Build a Zoom-like conferencing app in under 100 lines of code!
SDKs & Tools
Client SDKs:
Server SDKs:
- Javascript (docs)
- Go (docs)
Tools:
Installing
From source
Pre-requisites:
- Go 1.15+ is installed
- GOPATH/bin is in your PATH
Then run
git clone https://github.com/livekit/livekit-server
cd livekit-server
./bootstrap.sh
mage
Docker
LiveKit is published to Docker Hub under livekit/livekit-server
Running
Creating API keys
LiveKit utilizes JWT based access tokens for authentication to all of its APIs. Because of this, the server needs a list of valid API keys and secrets to validate the provided tokens. For more, see Access Tokens guide.
Generate API key/secret pairs with:
./bin/livekit-server generate-keys
or
docker run --rm livekit/livekit-server generate-keys
Store the generate keys in a YAML file like:
APIwLeah7g4fuLYDYAJeaKsSE: 8nTlwISkb-63DPP7OH4e.nw.J44JjicvZDiz8J59EoQ+
Starting the server
In development mode, LiveKit has no external dependencies. You can start LiveKit by passing it the keys it should use in LIVEKIT_KEYS.
LiveKit could also use a config file or config environment variable LIVEKIT_CONFIG
LIVEKIT_KEYS="<key>: <secret>" ./bin/livekit-server --dev
or
docker run --rm \
-p 7880:7880 \
-p 7881:7881 \
-p 7882:7882/udp \
-e LIVEKIT_KEYS="<key>: <secret>" \
livekit/livekit-server \
--dev \
--node-ip=<machine-ip>
When running with docker, --node-ip needs to be set to your machine's local IP address.
The --dev flag turns on log verbosity to make it easier for local debugging/development
Creating a JWT token
To create a join token for clients, livekit-server provides a convenient subcommand to create a development token. This token has an expiration of a month, which is useful for development & testing, but not appropriate for production use.
./bin/livekit-server --key-file <path/to/keyfile> create-join-token --room "myroom" --identity "myidentity"
Sample client
To test your server, you can use our example web client (built with our React component)
Enter generated access token and you are connected to a room!
Deploying for production
LiveKit is deployable to any environment that supports docker, including Kubernetes and Amazon ECS.
See deployment docs at https://docs.livekit.io/guides/deploy
Contributing
We welcome your contributions to make LiveKit better! Please join us on Slack to discuss your ideas and/or submit PRs.
License
LiveKit server is licensed under Apache License v2.0.