OpenVidu v3
June, 2024
We are excited to introduce OpenVidu v3. This is a major milestone for the project and represents many months of hard work by the entire OpenVidu team. It involves a complete overhaul of OpenVidu's internal technologies, architecture and deployment. All in order to offer the best real-time media solution out there. Let's take a quick look at everything you need to know about OpenVidu v3.
- What are the reasons for this major release?
- What has changed?
- Updating from OpenVidu v2 to OpenVidu v3
- Breaking changes
- Roadmap for the future
What are the reasons for this major release? 🔗
At OpenVidu we are always striving to offer the latest technology available to deliver the best results in your real-time applications. We developed Kurento more than a decade ago as a powerful SFU, and built OpenVidu on top of it to provide an easy-to-use framework to develop videoconferencing applications. As Kurento grew older and some limitations became apparent (mainly related to performance), we decided to evolve OpenVidu to support mediasoup instead of Kurento as its internal media server.
And now it is time to take the next big step: we are now integrating LiveKit into our stack. LiveKit is a cutting-edge WebRTC stack that is open source and certainly the most popular choice in the community in recent times.
What has changed? 🔗
Being now based on LiveKit's fantastic stack, OpenVidu v3 incorporates the latest innovations and optimizations in real-time media. There are so many new features and improvements that we have to summarize them in different categories:
Media optmizations 🔗
These low-level features will take your application perfomance to the next level:
- Simulcast for VP8 and H264 video codecs.
- Scalable Video Coding (SVC) for VP9 and AV1 video codecs.
- Dynamic Broadcasting (Dynacast) for minimizing bandwidth consumption. It pauses the publication of any video layer that is not being consumed by any subscriber.
- Adaptive Stream for UI-based video quality optimization. It sends to each user the minimum bits needed to display high-quality rendering based on the size of the video player. If a video player is hidden, the video stream is paused. This allows you to scale your application to large video rooms with thousands of users.
- Audio RED (REDundant Encoding) and Hi-fi audio for crisp, clear, high-quality audio streams.
- Audio DTX (Discontinuous Transmission) for detecting silence in audio tracks and reducing their bandwidth.
- WHIP for low-latency media ingestion.
New features 🔗
- End-To-End Encryption (E2EE) for the ultimate secure communication.
- Fine-tuned roles for participants.
- More SDKs for your application client: Android, iOS, Flutter, Unity, React Components.
- Improved server-side media filters architecture: it is now decoupled, making it easier to develop custom filters and to scale them.
Deployment 🔗
- Improved High Availability deployments: now all required services are included. External services are not needed anymore.
- Improved architecture, making Master Nodes much more scalable. Now one Master Node can handle many more participants.
- Lighter observability stack. We have migrated from Elastic to Prometheus.
- Better connectivity for participants behind firewalls, thanks to TURN over TLS being available by default.
Better deal for your money 🔗
- All ENTERPRISE features will be available in the PRO tier:
- mediasoup support (experimental)
- High Availability deployments
- Most PRO features will be available in the COMMUNITY tier:
- S3 recordings
- Broadcasting
- Network quality
- Virtual background
- Phone call integration
- A real administration dashboard is now available in COMMUNITY edition
- iOS and React Native support are now included in COMMUNITY edition
Better developer experience 🔗
- OpenVidu PRO evaluation mode: OpenVidu PRO now includes a special execution mode that can run without a license (limiting the duration of sessions and number of participants). It is the perfect way to develop and test your OpenVidu PRO application for free.
- OpenVidu v3 offers a local deployment with an easy way to test mobile devices inside your network. You can forget about these instructions: now there is no need to install SSL certificates or configure proxies to locally develop your app.
These and many other features will make your real-time application more efficient, performant, reliable, secure and future-proof. You can read more about what OpenVidu v3 has to offer in our new site.
Updating from OpenVidu v2 to OpenVidu v3 🔗
Although this is a major release that involves a complete overhaul of OpenVidu's internal technologies, all OpenVidu v2 Pro/Enterprise users will have available a compatibility module that hopefully will make the transition as seamless as possible, minimizing code changes.
First of all, carefully review the list of breaking changes to make sure there is nothing important that may prevent you from upgrading.
Then, follow these steps to migrate an application from OpenVidu v2 to OpenVidu v3:
- Deploy OpenVidu v3.
- Update your application.
- Point your server application to your new OpenVidu v3 deployment.
See below every step in detail.
1. Deploy OpenVidu v3 🔗
An OpenVidu v2 deployment is NOT directly upgradable to an OpenVidu v3 deployment. You will have to deploy OpenVidu v3 completely from scratch. Just follow the official instructions, making sure to enable compatibility with OpenVidu v2. You do this by enabling v2compatibility
module while installing OpenVidu v3.
2. Update your application 🔗
For applications using openvidu-browser.js library 🔗
This includes any client application built with web technologies (JavaScript, Angular, Vue, React, Ionic and Electron):
If your application has a package.json:
- Replace your
openvidu-browser:2.X.X
dependency withopenvidu-browser-v2compatibility:3.X.X
in your package.json. You can find the latest version in the releases table below.
If your application imports the openvidu-browser.js bundle library directly:
- Replace file
openvidu-browser-2.X.X.js
withopenvidu-browser-v2compatibility-3.X.X.js
. You can find the latest version in the releases table below.
For application using the OpenVidu Web Component 🔗
This includes any client application built with the OpenVidu Web Component.
- Replace both web component files:
openvidu-webcomponent-2.X.X.js
toopenvidu-webcomponent-v2compatibility-3.X.X.js
andopenvidu-webcomponent-2.X.X.css
toopenvidu-webcomponent-v2compatibility-3.X.X.css
. You can find the latest version in the releases table below.
For applications using OpenVidu Components (Angular) 🔗
- Replace your
openvidu-angular:2.X.X
dependency withopenvidu-angular-v2compatibility:3.X.X
in yourpackage.json
- React Native
- Android native
- iOS native
For applications using server SDKs [openvidu-java-client, openvidu-node-client] 🔗
This is actually not mandatory, but recommended for consistency and possible future updates.
- If your application has a Java backend and you are using
openvidu-java-client
, replace in your pom.xmlopenvidu-java-client:2.X.X
foropenvidu-java-client-v2compatibility:3.X.X
. You can find the latest version in the releases table below. - If your application has a Node backend and you are using
openvidu-node-client
, replace in your package.jsonopenvidu-node-client:2.X.X
foropenvidu-node-client-v2compatibility:3.X.X
. You can find the latest version in the releases table below.
3. Point your server application to your new OpenVidu v3 deployment 🔗
Make sure that your server application is configured to connect to your new OpenVidu v3 deployment. Depending on the deployment type you have chosen, you will have to update OpenVidu Server URL and OpenVidu Secret in your server application accordingly.
- OpenVidu Local Deployment
- OpenVidu Elastic Deployment:
- OpenVidu High Availability Deployment:
After these steps, your application should be up and running against OpenVidu v3.
Breaking changes 🔗
Although most OpenVidu v2 applications should work out of the box with OpenVidu v3, there are some breaking changes that developers should be aware of before starting the upgrade process:
General breaking changes 🔗
- IP Cameras are not supported (for now).
- Speech To Text is not supported (for now).
- Server-side voice and video filters are not supported out-of-the-box.
- Autoscaling is not available for On-Premises deployments. It is currently available for AWS deployments.
- In Connection objects the
subscribers
array will always be empty. This applies to thesubscribers
property in the JSON response of the REST API methods, the Connection#getSubscribers method of openvidu-java-client, and the Connection.subscribers property of openvidu-node-client. - As there are no official OpenVidu SDKs for native Android and iOS, applications have to be updated to use the LiveKit SDKs. We are currently working on migration guides.
Breaking changes in openvidu-browser 🔗
reason
attribute is available but not accurate for events: sessionDisconnected, connectionDestroyed, streamDestroyed and recordingStopped.- When using Network Quality API, event NetworkQualityLevelChanged now returns only values 1,3 and 5 (never 2 or 4). Representing 5 good network, 3 average network and 1 poor network.
- Method Stream.reconnect exists but does nothing.
- ICE exception events are not generated. This means that ExceptionEvent will not be fired with event names ICE_CANDIDATE_ERROR, ICE_CONNECTION_DISCONNECTED, ICE_CONNECTION_FAILED.
Breaking changes in recording 🔗
You can ignore these points if you are not making use of the Recording feature.
- For
OPENVIDU_PRO_RECORDING_STORAGE=local
files won’t be available in the filesystem until the recording is stopped. - Media Node selection is disabled for recordings (recordings will always launch in the less loaded node). Providing a
mediaNode
parameter when starting a recording won't have any effect. - The output of INDIVIDUAL recordings have
mp4
extension instead ofwebm
. - INDIVIDUAL recordings consume more resources, as transcoding is required.
- Thumbnail is not generated in COMPOSED recordings.
Breaking changes in Webhook events 🔗
You can ignore these points if you are not listening to Webhook events.
- Webhook events are not sent when a subscription is made in a Session. This means that webrtcConnectionCreated and webrtcConnectionDestroyed events with property
"connection"
set to"INBOUND"
will not be fired. reason
attribute is available but not accurate for webhook events sessionDestroyed, participantLeft, webrtcConnectionDestroyed and recordingStatusChanged.location
attribute has a fixed fake value ("unknown") for webhook events participantJoined and participantLeft.videoFramerate
attribute has a fixed fake value (30) for webhook events webrtcConnectionDestroyed and webrtcConnectionDestroyed.- Node management webhooks are not available. These webhook events will not be fired: nodeCrashed, nodeRecovered, mediaNodeStatusChanged, autoscaling, HANodeRegistered, HANodeDeregistered.
Breaking changes in REST API 🔗
The affected REST API methods are related to the cluster administration. Functional REST API methods for managing Sessions, Connections and Recordings remain unchanged.
- Health check API method doesn’t return nodes. The response will only have the
status
attribute. - Restart API method is not available.
- Node management API is not available. This affects the following methods: Retrieve Media Node info, Retrieve all Media Nodes info, Add Media Node, Remove Media Node, Modify Media Node and Autodiscover Media Nodes.
Breaking changes in operations 🔗
- The configuration is different: configuration is now split different files and config parameters have changed.
- You need a brand new deployment. A direct update of an OpenVidu v2 deployment to an OpenVidu v3 deployment is not possible.
Roadmap for the future 🔗
The OpenVidu team will spend the near future making sure OpenVidu v2 applications are working fine with OpenVidu v3 (remember that you can write us at pro.support.v2apps@openvidu.io if you need custom support).
We will also address some limitations for users coming from OpenVidu v2: we will incorporate in OpenVidu v3 Speech To Text and IP cameras support as soon as possible.
As mid-term goals, will be working in supporting a mesh distribution in the media servers, which will allow for massive Rooms in your own infrastructure.
Artifacts for v2 apps compatible with OpenVidu v3 🔗
The below artifacts allow making your OpenVidu v2 application compatible whith an OpenVidu v3 deployment. Read the instructions to update your app and make it work against an OpenVidu v3 deployment.
Release 3.0.0 🔗
Artifact | Type | Compatible Version | Link | Info |
---|---|---|---|---|
openvidu-browser-v2compatibility | NPM package | 3.0.0 | NPM | |
JS file | 3.0.0 | Download | ||
openvidu-angular-v2compatibility | NPM package | 3.0.0 | NPM | |
openvidu-webcomponent-v2compatibility | ZIP | 3.0.0 | Download | |
openvidu-java-client-v2compatibility | MVN package | 3.0.0 | MVN Repository | |
openvidu-node-client-v2compatibility | NPM package | 3.0.0 | NPM |
Release 3.0.0-beta3 🔗
Artifact | Type | Compatible Version | Link | Info |
---|---|---|---|---|
openvidu-browser-v2compatibility | NPM package | 3.0.0-beta3 | NPM | |
JS file | 3.0.0-beta3 | Download | ||
openvidu-angular-v2compatibility | NPM package | 3.0.0-beta3 | NPM | |
openvidu-webcomponent-v2compatibility | ZIP | 3.0.0-beta3 | Download | |
openvidu-java-client-v2compatibility | MVN package | 3.0.0-beta3 | MVN Repository | |
openvidu-node-client-v2compatibility | NPM package | 3.0.0-beta3 | NPM |
Release 3.0.0-beta2 🔗
Artifact | Type | Compatible Version | Link | Info |
---|---|---|---|---|
openvidu-browser-v2compatibility | NPM package | 3.0.0-beta2 | NPM | |
JS file | 3.0.0-beta2 | Download | ||
openvidu-angular-v2compatibility | NPM package | 3.0.0-beta2 | NPM | |
openvidu-webcomponent-v2compatibility | ZIP | 3.0.0-beta2 | Download | |
openvidu-java-client-v2compatibility | MVN package | 3.0.0-beta2 | MVN Repository | |
openvidu-node-client-v2compatibility | NPM package | 3.0.0-beta2 | NPM |
Release 3.0.0-beta1 🔗
Artifact | Type | Compatible Version | Link | Info |
---|---|---|---|---|
openvidu-browser-v2compatibility | NPM package | 3.0.0-beta1 | NPM | |
JS file | 3.0.0-beta1 | Download | ||
openvidu-angular-v2compatibility | NPM package | 3.0.0-beta1 | NPM | |
openvidu-webcomponent-v2compatibility | ZIP | 3.0.0-beta1 | Download | |
openvidu-java-client-v2compatibility | MVN package | 3.0.0-beta1 | MVN Repository | |
openvidu-node-client-v2compatibility | NPM package | 3.0.0-beta1 | NPM |