Unlock enhanced video quality and performance with Daily Adaptive Bitrate, combining ultra-reliable calls and the best visual experience your network can offer—automatically adjusting in real-time to suit fluctuating network conditions.
Since its launch, Daily has been at the forefront of providing the most advanced simulcast APIs of any WebRTC provider. Developers who choose Daily benefit from complete flexibility and control, enabling them to optimize the performance of their video applications across various devices and network conditions. This level of customization allows developers to fine-tune the user experience to match their specific goals.
Simulcast is an invaluable feature for video applications, enabling developers to balance between quality and reliability. It can, however, be challenging to implement when seeking the perfect middle ground for all connected peers in real-world, changing network conditions. Adjusting simulcast settings in real-time to maintain performance requires on-going peer network monitoring, client-side logic, and can be tricky to debug.
Imagine a scenario where developers no longer need to worry about optimizing for quality, and can instead have full confidence that video will automatically look its best within the available bandwidth. This would greatly simplify development, allowing engineers to focus on other aspects of their application.
Daily Adaptive Bitrate (ABR)
Daily Adaptive Bitrate is an industry-first innovation that automatically adjusts the quality of video to ensure maximum performance without compromising reliability.
When network is constrained, the bitrate and resolution will be dropped to ensure that the call remains connected (ensuring enough throughput for audio.) When there’s bandwidth headroom, the bitrate and resolution will be increased to deliver higher quality video.
It doesn’t require any pre-configured video settings, or client side network monitoring and adjustment.
- In 1:1 calls, only a single dynamic layer of video is sent, saving bandwidth and allowing for higher overall video quality.
- In multi-party calls, the top layer is always adaptive based on network conditions and lower layers are used for smaller UI elements (such as sidebars or large grids) or as a fallback for poor network conditions.
Let’s take a look at an example...
Here are some typical simulcast settings that are somewhat conservative to optimize for reliability:
- High layer:
{ maxBitrate: 700 kbps, targetResolution: 640x360, maxFramerate: 30 fps }
- Medium layer:
{ maxBitrate: 200 kbps, targetResolution: 427x240, maxFramerate: 15 fps }
- Low layer:
{ maxBitrate: 100 kbps, targetResolution: 320x180, maxFramerate: 15 fps }
A user joins a 1:1 call from a WiFi network with speeds of 5 Mbps down, 1 Mbps up. Upon joining the call, due to the network’s slow upload speed, the user is unable to send all three layers. The available options are to either: a) drop the framerate, or b) drop the highest layer.
As a result, this user will:
- ⬇️ Send - 360p video @ 15 fps, or 240p video @ 15 fps
- ⬆️ Receive - 360p video @ 30 fps
With Daily Adaptive Bitrate enabled, Daily will automatically optimize the experience based on available bandwidth. Given the 5 Mbps down / 1 Mbps up network, the user will:
- ⬇️ Send - 540p video @ 30 fps (around 800 kbps)
- ⬆️ Receive - 720p video @ 30 fps (around 2 Mbps)
Compared to a hardcoded simulcast configuration, this is a dramatic increase in call quality for the user that doesn't sacrifice call reliability.
Getting started
Daily Adaptive Bitrate has been rigorously tested at scale for some time now. It is enabled by default for all 1:1 calls, or can be manually configured by following these steps:
- Set the
enable_adaptive_simulcast
property totrue
for either your domain (e.g. all calls) or room (e.g. specific calls). - If you’re a Prebuilt user, no additional configuration is needed.
- If you’ve built a custom app with daily-js, please update to version
0.60.0
or0.61.0
for daily-react-native. - The only code change required is to set the
allowAdaptiveLayers
within thesendSettings
property totrue
at join time:
const call = Daily.createCallObject();
call.join({
sendSettings: {
video: {
allowAdaptiveLayers: true
}
}
});
Please note that Daily Adaptive Bitrate currently works best on Chrome and Safari (both desktop and mobile). Firefox support will ship mid-year, although users on Firefox can still join the call unimpeded sending video using 3-layer simulcast.
Multi-party (>2 participants) are currently in beta – please contact us if you'd like to take part in testing.
For more information regarding Daily Adaptive Bitrate, please refer to our documentation here. We’re excited to see how this feature improves both the developer and end-user experience on the Daily platform. As always, for any questions or feedback, feel free to reach out.